什么是java同步,java同步的应用场景是什么?
共享资源在一个时刻只能被一个线程使用,我们称之为同步
参考:[https://blog.csdn.net/yangtongli2012/article/details/51626264]
同步的方式有synchronized,volidate,threadlocal
内部类的作用是什么,应用场景又是什么?
参考:https://www.cnblogs.com/ynuo/p/5506651.html
作用:防止被其他类访问
应用场景:
1 除了他的外部类,不再被其他类使用时。
2 解决一些非面向对象的语句块
3 多算法场合
4 使得代码更加灵活和富有扩展性
什么情况下对象会被垃圾回收机制回收?
1 引用计数法:在对象头维护一个counter,统计有几个引用,为0可回收
2 可达性分析:虚拟机定义GC Roots,GC Roots沿着引用链寻找,不在链上的可以回收
参考:[https://blog.csdn.net/codeyanbao/article/details/103512911]
常见的编码方式
1 ASCII码:用一个字节表示一个字符(2^7=128),第一位为0,后7位为字符
2 扩展ASCII码:0127和标准码一样,128255为扩展码,不同语言不统一
3 Unicode符号集:是所有符号的符号集,不是编码
4 UTF-8和UTF-16以及UTF-32都是Unicode的实现形式
汉字在utf-8编码占多少个字节
占2个字节的:〇
(〇有两个读音 xīng líng(一) xīng 同“星”。唐武则天所造字,(二) líng 同“零”。)
占3个字节的:基本等同于GBK,含21000多个汉字
占4个字节的:中日韩超大字符集里面的汉字,有5万多个
一个utf8数字占1个字节
一个utf8英文字母占1个字节
动态代理和静态代理
通过代理类访问,代理类调用委托类的方法的前后还可以做其他操作,扩展了功能,等于对委托类进行了增强而没有改动委托类
区别:静态代理是固定代理某个类的,动态代理在使用时传入具体的委托类。
解析和分派的的区别和联系
sleep和wait的区别
功能差不多,都用来进行线程控制,他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩.
还有用法的上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来强行打断;wait()可以用notify()直接唤起.
进程和线程的区别
一个线程只能属于一个进程,一个进程可以拥有多个线程
进程拥有自己的资源,线程没有,但能够使用进程的资源
序列化
什么是序列化 —— 序列化,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。
方式一:Serializable,要传递的类实现Serializable接口传递对象,
方式二:Parcelable,要传递的类实现Parcelable接口传递对象。
什么是反射
定义:动态获取程序信息以及调用对象功能成为java语言的反射机制。
解释:在程序运行时,可以任意构造一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员和方法,可以调用任意一个对象的属性和方法。
什么是注解
从JDK5开始,Java增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。
什么是元数据
元数据是指用来描述数据的数据,更通俗一点,就是描述代码间关系,或者代码与其他资源(例如数据库表)之间内在联系的数据。
元数据以标签的形式存在于java代码中
什么是映射
将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。
对象-关系映射(ORM( 操作数据库的框架))系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
springboot从数据库把数据取出来,解析装到javabean,也能把Javabean插入数据库,这就是映射。
LRUcache(Least Recently Used)
最近最少使用,内部使用LinkedHashMap实现,定义缓存最大值,最新使用的放在前面,最后面的超出了缓存最大值就会被移除,长度减一,更新缓存大小
当新的缓存产生,大于最大的缓存容量,则不缓存。如果小于最大缓存但是加入之后超出,则扩容。
泛型和泛型边界
泛型擦除:在虚拟机看来,List<E>这个泛型类型只是普通的类型List而已,这种行为叫泛型擦除(Type Erasure)。
java通配符
泛型通配符以及泛型的边界
1,<>
任意类型,如果没有明确,那么就是Object以及任意的Java类了
2,<? extends E>
向下限定,E及其子类
3,<? super E>
向上限定,E及其父类
sp持久化是否能跨进程
参考:https://www.jianshu.com/p/a076c38f756a
配置:Context.MODE_WORLD_READABLE | Context.MODE_MULTI_PROCESS
线程池的管理
具体过程:
1.execute一个线程之后,如果线程池中的线程数未达到核心线程数,则会立马启用一个核心线程去执行。
2.execute一个线程之后,如果线程池中的线程数已经达到核心线程数,且workQueue未满,则将新线程放入workQueue中等待执行。
3.execute一个线程之后,如果线程池中的线程数已经达到核心线程数但未超过非核心线程数,且workQueue已满,则开启一个非核心线程来执行任务。
4.execute一个线程之后,如果线程池中的线程数已经超过非核心线程数,则拒绝执行该任务,采取饱和策略,并抛出RejectedExecutionException异常。
glide
glide会自动根据imageview的大小调整图片大小
图片压缩
像素、质量、尺寸
RecyclerView性能优化
https://www.jianshu.com/p/bd432a3527d6
抽象类和接口
抽象类是多个类的模板,接口粒度更细,是方法级的抽象
接口的作用:给一批类定义一个规范,让实现分离,降低模块间的耦合
hashmap
参考:[https://www.jianshu.com/p/8b372f3a195d/]
存储结构为链表(entry链)和数组,也就是链表数组
在put值的时候,如果key为null,放到table[0],table[0]也是一个链表。
不为null,计算key的哈希值,遍历链表,找到则更新值,没找到则新增entry,如果超过临界值,则hashmap扩容
网友评论