Java 基础 =========================================
*Java中负数的二进制表示
计算机对有符号数(包括浮点数)的表示有三种方法:原码、反码和补码
正数的补码,反码都是其本身,补码=反码+1(负数的二进制为=符号位+补码)
在 二进制里,最高位为符号位,最高位为 1 代表负数,最高位为 0 代表正数。
以java中8位的byte为例,最大值为:0111 1111,最小值为1000 0001。
十进制 ==> 二进制
对于正数我们直接转换即可,对于负数则有一个过程。
以负数-5为例:
1.先将-5的绝对值转换成二进制,即为0000 0101;
2.然后求该二进制的反码,即为 1111 1010;
3.最后将反码加1,即为:1111 1011
Integer.toBinaryString(-5)结果为11111111111111111111111111111011. Integer是32位(bit)的
正数右移,高位用0补,负数右移,高位用1补,当负数使用无符号右移时,用0进行补位(自然而然的,就由负数变成了正数了)
位异或( ^ ):不同的为1
位非( ~ )
5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
-6转换为二进制:1111 1111 1111 1111 1111 1111 1111 1010
*常用的加密算法
|对称加密(加解密密钥相同)常用的有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES 双向加密| |非对称加密(公钥与私钥是一对,公钥加密->私钥解密;私钥加密->公钥解密。)常用的有:RSA、DSA 单向加密(Hash算法-不能通过算法生成明文)常用的有:MD5、SHA
Android 基础 ======================================
* Android不同分辨率适配?dip、dpi、px之间的关系?(1 英寸 = 2.54 厘米)
1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果
2. dpi:dots per inch(像素密度)(单位:像素/英寸),表示屏幕每英寸有多少个像素
dip =(dpi/160)* pixel
float density = context.getResources().getDisplayMetrics().density (指的就是dpi/160)
比如4英寸、854×480的分辨率,那么dpi就是854的平方加480的平方和开2次方后除以4,结果大约是245,为hdpi。
3. px: pixels(像素),不同的设备不同的显示屏显示效果是相同的,这是绝对像素,不会改变。
120 (ldpi) 低密度 (240*320) (1dip=0.75px)
160 (mdpi) 中密度 (320*480) (1dip=1px)
240 (hdpi) 高密度 (480*800) (1dip=1.5px)
320 (xdpi) 超高密度 (720*1280) (1dip=2px)
480 (xxdpi) 超清密度 (1080*1920) (1dip=3px)
* AIDL(Android Interface Definition Language)的是什么?
“只有当你允许来自不同的客户端访问你的服务并且需要处理多线程问题时你才必须使用AIDL”
Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言来公开服务的接口。我们知道4个Android应用程序组件中的3个(Activity、BroadcastReceiver和ContentProvider)都可以进行跨进程访问,另外一个Android应用程序组件Service同样可以。因此,可以将这种可以跨进程访问的服务称为AIDL服务。
* Activity如何与Webview交互
webview.addJavascriptInterface(new JavaScriptInterface(), "bornClient");
public class JavaScriptInterface extends WebJavaScriptInterface {
public void finish(String param) { finish(); }
}
<button onClick="window.bornClient.finish('param')">Close Activity</button> // html 端代码
* 如何有效的处理未捕获的异常
继承自UncaughtExceptionHandler类,然后重载uncaughtException()函数,还可以将日志写文件存储到SD卡,发送给服务器
* 第三方库
基础框架:RxJava + Retrofit + Dagger2 + MVP + RxBus + ButterKnife
图片加载:Picasso ImageLoader Fresco Glide Volley
html.fromhtml 加载strings.xml中的资源文件
<string name="test_string">< ![CDATA[ 未绑定手机号?<font color="#0f9afc">绑定</font> ]]> </string>
AndroidStudio取消折叠代码
Setting->Editor->General->CodeFolding->取消closures选项
AndroidStudio退出时保存打开的文件状态
解决方案:打开AndroidStudio的project视图方式,找到工程目录下.idea/workspace.xml删除,重启AndroidStudio
使用adb shell dumpsys检测Android的Activity任务栈
adb shell dumpsys activity 输出包括intents,services,broadcasts,providers,activites等
adb shell dumpsys activity activities 指定只输出activities
adb shell dumpsys activity > d:\dumpsys.txt (输出到D:盘的文件里)
inline:在编译时把调用这个函数进行替换,而noinline依据字面意思也比较好理解。
rossinline:让被标记的lambda表达式不允许非局部返回
internal 修饰类的方法,表示这个类方法只适合当前module使用