Android微信支付的坑
事情是这样的我接了个单子就是写微信登陆和支付的
一开始我接单子的时候想之前都写过qq登录微信也应该差不多结果我错了首先遇到的坑有
sdk的配置他是把sdk放到了maven远程仓库然后直接compile但是我as抽风好了许久最终下载了官方的demo找到了jar直接copy到工程文件夹里了
我边写边吐槽写文档的开发者乱七八糟后来我看着官方demo改的终于成功了。于是就有了这篇文章
登录的class名称必须是WXEntryActivity并且继承activity实现IWXAPIEventHandler接口否则无法回调
然后剩下的直接上图了
微信登录和qq登录不同他是先把回调返回来的code进行发送请求获取access_token但access_token有效期只有两小时
我这里登录只需要用户的openid和nickname所以我没有获取有效期一个月的access_token详细见官网
这里也没有api判断是否登录全部得自己写所以写这个微信登陆的时候很恼火别看代码那么简单实现写起来真的是各种坑这是最坑的地方不仅class要WXEntryActivity还要在wxapi包下所以要新建一个 ...
【Java多线程】线程安全问题
首先什么是线程安全问题?
答:当多个线程同时修改做写操作的时候可能受到其他线程的干扰导致数据出现问题这种现象叫做线程安全问题
举个例子比如火车票自动售票机,原本有100张票分别有两个售票机进行判断票数是否大于0,如果票数大于0就把票出售给乘客,但当两个售票机同时读取这个变量的时候第一个判断大于0就售出了但第二个判断也大于0但前面第一个线程已经把票售出了所以此时是0张票这个时候就可能出现了-1张票,或者售出了同一张票
12345678910111213141516171819202122232425262728293031323334353637public class ThreadTest implements Runnable { private int trainCount = 100; @Override public void run() { while (trainCount > 0) { try { Thread.sleep(500); ...
【Java多线程】使用同步代码块解决线程安全问题
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141public class ThreadTest implements Runnable { private int trainCount = 100; private Object lock = new Object();//实例化一个对象当作锁 @Override public void run() { wh ...
【Java多线程】函数锁,证明是this锁
函数所非常简单
只需要在函数定义的时候加上synchronized关键字就可以了
那么synchronized用的是什么锁呢
答:this锁,怎么知道他是this锁的呢
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157public class ThreadTest implements Runnable { ...
【Java多线程】死锁
死锁就是:一个宝藏需要两把钥匙来打开,同时间正好来了两个人,他们一人一把钥匙,但是双方都再等对方能交出钥匙来打开宝藏,谁都没交出自己的那把钥匙.就这样这俩人一直僵持下去,直到开发人员发现这个局面.
123456789101112131415161718192021222324252627282930313233343536373839404142public class ThreadTest implements Runnable { private int trainCount = 100; private final Object lock = new Object(); public boolean flag; @Override public void run() { while (true) { if (flag) { synchronized (lock) { sell1(); ...
【Java多线程】内存模型/volatile /Atomic原子类
多线程的三大特性
原子性 独一无二,一致性 保证线程安全问题
可见性 java内存模型图
有序性 join,wait,notify
什么是java内存模型?
答:(属于)多线程可见性jmm
java内存结构是jvm内存分配
Java内存模型,决定了一个线程与另一个线程是否可见
java内存模型 主内存,本地私有内存
1234567891011121314151617181920212223242526272829public class ThreadDemo extends Thread { private boolean flag = true; @Override public void run() { super.run(); System.out.println("Thread starting run"); while (flag) { } System.out.println("Thread Stop"); ...
【Java】NIO学习笔记
缓冲区
Java NIO中负责数据的存取。缓冲区就是数组。用于存储不同数据类型的数据
根据数据类型不同(Boolean)除外,提供了相应类型的缓冲区;
ByteBufer
CharBuffer
ShortBuffer1
IntBuffer
LongBuffer
FloatBuffer
DoubleBuffer
上面的缓冲区管理方式几乎一致,通过allocate方法获取缓冲区
缓冲区的核心方法
put();存入数据到缓冲区
get();获取缓冲区中的数据
flip();切换到读取数据模式
rewind();
clear();恢复成最初状态,但里面的数据依然存在
mark();在当前position进行标记
reset();恢复到mark的位置
hasRemaining();查看缓冲区是否还有数据
remaining();缓冲区还剩几个字节没有读取
缓冲区的属性
capacity : 容量,表示缓冲区中最大存储数据的容量。一旦声明不能改变。
limit : 界限,表示缓冲区中可以操作数据的大小。(limit后的数据不能进行读写)
position : 位置,表示缓冲区正在操作数据的位置。
...
【Linux&Java】Linux中安装JDK
使用yum进行安装
123456789#查看所有jdk版本yum -y list java*#找到jdk1.8版本的名称yum install -y jdk版本名#然后进行环境变量的配置,看我之前的文章#测试是否安装成功java -version
手动安装
手动安装的方式比较推荐,可以安装的自己指定的目录
首先去甲骨文官网下载jdk1.8的版本
下载好后解压出来然后再进行环境变量的配置
最后输入javac 检测是否安装成功
【Linux&Maven】Linux中安装Maven
1、下载maven
首先到官网复制下载地址,如果服务器是国内的话请挂v下载后上传到linux服务器中否则无法进行下载,如果是国外的服务器则使用下面的代码进行下载
1curl -O http://us.mirrors.quenda.co/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
2、安装maven,【Linux】Linux中设置环境变量
123456789101112131415161718192021222324#解压包tar -xzvf apache-maven*.tar.gz#切换到目录中cd apache-maven*#把路径添加到环境变量中,看我之前的文章#获取当前的路径pwdvim ~/.bashrc#添加这几行代码MAVEN_HOME=刚刚获取到的路径export PATH=$MAVEN_HOME:$MAVEN_HOME/bin:$PATH#保存后使用source命令进行更新source ~/.bashrc#更新后输入mvn查看是否安装成功#[INFO] Scanning for pr ...
二进制中原码、反码和补码
1、机器的存储编码方式
首先要知道机器是使用补码进行存储数据的
2、什么是原码、反码和补码
什么是原码?首先我们知道int是占4个byte字节的,每个字节占8bit位,所以4*8=32得出int是占了32bit
比如2的二进制是10,而-2的二进制是11111111 11111111 11111111 11111110这里可以看到2的二进制只有两位而-2的二进制呢却有32位这里-2的二进制才是真的原码而10并不是原码其实10前面还有32个0因为都是0所以省略了,所以2的原码是00000000 00000000 00000000 00000010即:-2等于~2=11111111 11111111 11111111 11111110
什么是反码?
从上面2和-2的二进制可以看出来,正数的反码是他本身而负数的反码是在原码的基础上除符号位以外其他取反如:
00000000 00000000 00000000 00000010左边第一个0就是符号位了,当符号位是0时时正数而则1时负数
看符号位知道是正数所以他的反码就是他本身也就是00000000 00000000 00000000 0000 ...