2018面试题总结

最近这段时间在忙于面试,终于可以抽时间总结一下面试题,供各位同命运的小伙伴参考,问题都很类似,但是深度需要各位小伙伴自己探索了,加油!


1.java基础


  1)常用的集合,之间的区别,底层实现源码
是否线程安全,为什么非线程安全,怎么保证线程安全?
 
  2)哈希一致性
  
  3)Hashmap的插入数据过程
       讲讲红黑树
       为什么使用红黑树
 
  4)抽象类和接口的区别
  
  5)String、StringBuffer、StringBulider的区别
  
  6)反射的一些API
  
  7)String的常量池
  

 

  8)final关键字的用法

 

  9)单例的缺点有哪些?

  
  
2.IO

1)是否使用过IO?说一下NIO


3.并发编程

1)项目中是否用过多线程的案例?怎么做的?

2)同步的几种方式?

synchronized 控制原理?

volatile怎么保证多线程可见的?为什么不用该关键字修饰多线程不可见?内存模型是怎么样的?

ThreadLocal有没有用过?什么场景使用?原理?使用ThreadLocal要注意什么?

3)是否用过线程池?线程池的原理?线程池大小怎么设置?如果有一个IO密集的线程,如何设计多线程?

4)如果有一个主线程,要等待其他线程处理完成后,再处理主线程,如何控制?

5)生产者、消费者如何实现?手写代码

6)说一下并发容器ConcurrentHashMap和HashTable的区别?

7)重入锁和synchronized的区别?

8)你认为什么是线程安全的?
 

9)写一个死锁的程序

 


4.设计模式


1)项目中用过哪些设计模式?讲一下

2)写一个单例模式

 

 

 

3)如果项目中有多个if else,如何用设计模式解决?

 

 

        4)责任链模式?适配器模式?装饰器模式?

 


5.数据库


1)数据库常用的存储引擎?有什么区别?

2)数据库的悲观锁和乐观锁

3)数据库隔离级别?默认的是什么?有什么区别?怎么解决?MVCC

4)数据库常用的几种锁?

5)数据库的范式??

6)数据库常用的几种索引?重点是组合索引,会给出一个组合索引,问某种脚本会不会走索引?什么情况下走索引?什么情况不走索引?

7)数据库索引的底层结构,B+树,为什么用B+树,讲一下B+树。

8)数据库的主键,为什么要用自增的比UUID的好?

9)讲讲项目中遇到的SQL优化

10)讲讲数据库的慢SQL优化

11)数据类型varchar 和char的区别??

 

 

 

12)left join 和right join的区别?

 

 

        13)数据库分库、分表、分区?

        14)union 和 union all的区别?

        15)查询每个班级成绩前三的学生

 


6.框架


1)讲一下SpringMVC的处理过程?Spring的拦截器和过滤器

2)Spring的优势是什么?为什么使用Spring?

3)讲一下为什么使用Spring IOC?Bean的生命周期?底层的原理?Spring的单例Bean是如何实现的?

4)有没有自己写过注解? 怎么使用? 

5)将一下Spring AOP 的实现原理?CGLIB怎么实现的?源码讲一下

6)将一下Spring事务管理的几种方式?事务的隔离级别?事务的传播机制?你们用的是什么?

7)Mybatis的原理?如何使用Mybatis

8)Mybatis的#和$的区别?

9)Mybatis的分页?源码?

10) 项目什么场景用到了Redis,Redis常用的数据结构?原生的命令?如何防止缓存雪崩?Redis的TPS是多少?

11)Redis的持久化方式?Redis除了存储数据还有什么功能?

12)Redis的内存模型?Redis的集群部署?Redis的锁?Redis的事务如何控制?

13)讲一下什么时候使用消息队列?原理?有哪些传播机制??你们项目用的是什么??怎么保证消息不会丢失?

14)有没有用过分布式?微服务?微服务用到了什么组件?功能是什么?

15)如果要你自己实现断路器功能,如何实现??

16)分布式事务怎么控制?

17)分布式锁怎么控制?

 

 

 

18)定时任务quartz怎么使用的?

19)Mybatis和Hibernate的区别?


7.网络


1)说一下http和https的区别

2)https怎么保证安全的?

3)说一下三次握手的过程?

 

 

 

 

4)http的处于哪一层?tcp处于哪一层?

 

 

        5)负载均衡Nginx

6)http头部有哪些信息?


8.JVM


1)讲一下JVM的内存模型?垃圾回收机制?垃圾收集器用的什么?

2)讲一下JVM的双亲委派?

3)JVM的加载类的过程?

4)JVM的优化?如何优化?项目中的例子??
 

5)写一个堆溢出、栈溢出的例子??

        6)定义一个类,类里定义一个变量,如Class B  = New B() ,说一下内存怎么分配的?

        7)String常量池的内存模型画一下??

        8)如果系统的CPU和内存飙升,怎么排查问题?你觉得原因可能是什么?


9.数据结构和算法


1.常用的排序算法??时间复杂度、空间复杂度

2.递归计算文件夹的大小

3.从数组中查询出重复的数据和下标位置并返回,如果数组长度为99W,如何处理?MapReduce 

 

 

4.链表反序输出

 

 

        5.将两个有序的数组组合成一个有序的数组

 


11.linux


1)常用到哪些命令?

2)如何查看日志?grep?

3)能否在linux系统安装软件?


10.其他的问题


1、自我介绍

2、介绍一下熟悉的项目

3、画一下项目的架构图

4.说一下如何进行代码review ,注重哪些点??

 

 

 

5.说一下项目中遇到最有挑战的事情??如何解决的??

 

 

        6.说一下一个请求到拿到返回的整个过程?

7.如何保证系统的安全?

        8.系统的TPS多少?

 

 

你可能感兴趣的:(面试)