面经整理

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