面经整理
- 重载(运行时决定)重写(编译时决定)
- synchornized与volatile(原子性与有序性角度)
volatile和synchronized的区别 volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。 volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的 volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性 volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。 volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化
- oom,出现原因
1.我确实需要那么多对象,这些对象也都是有用的。 解决方法:1)加大内存。2)利用外置存储,将对象写入磁盘。 2.有一些对象不是我需要的,发生了「内存泄露」 解决方法:1)排查对象引用关系,将无用对象及时从容器中移除。
- list,set,map
- 线程池的作用,什么情况下使用
提高效率,限制系统内线程数量 使用情形 1.单个任务处理的时间比较短 2.将需处理的任务的数量大
- lambda表达式(场景:stream流,集合方法,线程实例化)
- stream api语法,filter,sum,
- 基本数据类型(byte,char,short,int,float,long,double,boolean)
- 抽象类,接口
- java8新特性
Stream API - 集合,数组,将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。 默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。(接口加入default,static方法) Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
- jvm垃圾回收机制与调优(略)
- mysql什么时候使用索引-----频繁作为查询条件的字段应该创建索引
- ioc实现方式(工厂,xml,反射),单例模式
- 查看进程,杀死进程( ps aux--显示所有状态 | kill (-9) 进程号)
- vim操作(正常模式,编辑模式(输入i),指令模式(:w--写入|:q!--离开|:wq--写入后离开))
- delete,truncate,drop区别
drop直接删掉表; truncate删除的是表中的数据,再插入数据时自增长的数据id又重新从1开始; delete删除表中数据,可以在后面添加where字句。
- 建临时表的方法与优势
MySQL 临时表在我们需要保存一些临时数据时是非常有用的。
临时表主要用于对大数据量的表上作一个子集,提高查询效率。 CREATE TEMPORARY TABLE - 索引为什么用b+树(1.出度大,树的高度小,io次数少;2.范围查询)
- 索引类别(唯一索引,主键索引,全文索引,组合索引,普通索引),失效情况
1.条件中用or,即使其中有条件带索引,也不会使用索引查询(这就是查询尽量不要用or的原因,用in吧) 注意:使用or,又想索引生效,只能将or条件中的每个列都加上索引 2.对于多列索引,不是使用的第一部分,则不会使用索引。 3.like的模糊查询以%开头,索引失效 4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不会使用索引
- 数据库分区,分库分表,
- 写数据库连接池
- 编译过程