java开发3~5年工作经验面试题
关于java基础
- String,StringBuilder,StringBuffer区别是什么?底层数据结构是什么?分别是如何实现的?
- HashSet的底层实现是什么?它与HashMap有什么关系?
- Java 的并发包里面有那些知识点?
- HashCode与HashMap的关系?
- 哈希函数的理解?
- map在put()的做了哪些事?
- 如果发生hash碰撞,有什么方法可以解决?
- 各种类型的锁?
- synchronize和lock?
- hashTable的数据结构?
- 线程安全的map即HashTable和CurrentHashMap,底层的线程安全是如何实现的?
- hashCode的原理?
- 什么情况下需要重写类的hashCode()方法?什么时候需要重写equals()方法?
- hashmap添加元素,如果通过hash值得到的位置如果有元素,哪一种情况会取代所在的元素?
- HashMap添加元素,如果是所得的桶数组的位置有值。该值则被添加到链表尾端,为什么会是尾端?
- ArrayList和hashmap底层结构,以及CurrentHashMap解决了什么问题;
- Hashmap的是否线程安全?为什么是安全或者不安全?
- HashMap、HashTable以及ConcurrentHashMap的区别;
- volatile关键字的理解;用在哪些场景?
- 线程的理解以及其实现方式;
- 线程池的参数有哪些?实现原理;
- 线程同步方法有哪些?
- 缓存的原理?为什么要用缓存?为什么会比数据库查询快?
- 反射机制的理解;
- Object中的方法;
- String的toString()方法的实现?底层原理?
- NIO与IO的异同;
- 垃圾回收机制的理解;
- java8的新特性有哪些?如何使用?
- static关键字的场景和意义;(拓展:final)
- 如何理解事务?
- 虚拟机的内存结构;
- 动态代理的两种实现方式;
- 悲观锁和乐观锁的区别
- 如何解决跨域问题?
- xml文件解析方式有几种
- synchronize的锁的类型
- 秒杀系统的设计
- 分库分表
- Spring底层是如何实现的;
- Tomcat容器启动的时候,spring的启动流程;
- SpringAop除了动态代理,还用了其余的什么原理?
- rpc框架
- 事务的隔离级别和传播机制
- docker
- 高峰期如何进行分流
高并发
- 造成线程安全的主要因素有哪些:
- 互斥锁是什么?java锁如何分类?
- 关于锁名词的分类
- 线程的创建方式;
- 三种创建方式分别有什么区别?(最终可以追究到最底层)
- 线程池的核心参数是哪些?分别表示什么意义?
- 通过线程池创建线程的流程是什么?
- Lock接口;
- synchronize和volitile的区别?
- 设计一个高并发的网站通用的技术有哪些?
- CAS是什么?
- JUD是什么?
分布式
- 关于分布式的一些基本概念
- springboot与spring相比优势是什么?
- springboot自动配置的原理是什么?
- 如果自己集成一个jar包到springboot中,该如何做?
- 如何解决分布式事务问题?
web
- 
servlet的实现以及其中的方法; 
- 
token生成的原理; 
常用的设计模式
关于前端
- 闭包的理解;
- js函数的理解;
- 如何优化前端?
关于框架
spring
- 
springIOC的理解; 
- 
spring是如何通过xml配置或者注解配置生成实例对象的? 
- 
springIOC的java底层原理; 反射 
- 
springAOP的理解; 
- 
springAOP的底层的实现原理; 
- 
spring如何解析视图; 
- 
spring的常用注解; 
- 
springmvc和Struts2的差异; 
- 
如何控制事务; 
- 
事物的隔离级别和传播机制; 
- 
Spring BeanFactory与FactoryBean的区别; 
- 
springAOP的应用场景; 
mybatis
- 
mybatis的结构? 
- 
配置文件如何配置? 
- 
mybatis处理多个参数的几种方式? 
- 
占位符有几种?区别是什么? 
- 
一级缓存和二级缓存的区别? 
- 
Mybatis的类型转换器? 
- 
mybatis接口没有实现类,他是如何操作数据库的? 
hibernate
- mybatis 与hibernate的对比;优势,劣势,原理,如何选择;
| 项目 | Mybatis | Hibernate | 
|---|---|---|
| 开发效率 | 较容易上手;需要手动管理sql | 较难上手;无需管理sql,专注业务 | 
| 入门 | 简单 | 较难 | 
| 灵活性 | sql更加灵活 | 几乎不用写sql,封装性较大 | 
| 性能 | 相对较高 | 相对较低 | 
| 日志系统 | 除了基本记录功能外,功能薄弱很多 | 志系统非常健全,涉及广泛,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等 | 
| 优化 | 更容易 | 更难 | 
| 自动性 | 半自动 | 全自动 | 
| 缓存 | 有更好的二级缓存机制 | |
| 移植性 | 移植性低(绑定了sql) | 移植性高 | 
| 适用场合 | 1.有复杂的查询业务;2.无hibernate实践经验的 | 1.无复杂的查询业务;2.能够熟练应用hibernate的 | 
SpringBoot
- springboot与springmvc最大的优势在哪?
- 一个加了事务注解的“新增方法”,抛出异常,数据有没有添加成功?
关于工具的使用
- git和svn的区别以及各自优势
- Jenkins的搭建和配置;
- maven是如何管理jar包版本的;
关于数据库
关系型数据库
- 
limit关键字从0到10与从100000到200000效率相差几个数量级,为什么? 
- 
mysql的架构; 
- 
索引的原理; 
- 
索引的选取原则(通用): 
- 
为什么索引导致查询效率高?操作数据效率低? 
- 
索引的底层结构是什么?是如何实现的? 
- 
哪些查询会用到索引?哪些查询用不到索引? 
- 
索引类型? 
- 
聚集索引和非聚集索引 
- 
聚集索引的优缺点 
- 
mysql索引的数据结构 
- 
数据库的隔离级别分别是什么? 
- 
sql的优化方案; 
- 
left join 与 inner join的差别; 
- 
mysql的存储引擎MyIsam和InnoDB的区别; 
- 
主键和唯一索引有啥区别? 
- 
唯一索引能不能为空? 
非关系型数据库
- 常用哪些非关系型数据库?哪些场景会用到?
- redis如何进行持久化?
关于网络协议
- UDP与TCP的异同;
- http的理解;
- webSocket编程;
- 什么是ajax?原生的ajax如何写?
- 比较get请求和post请求的异同;
关于linux操作
- 常用的文件操作命令;
- 查看线程信息的命令;
- 查看内存的命令;
- 部署项目的命令;
- mac与Linux服务器文件传输命令;
关于算法
- 常用的排序算法有哪些,分别如何实现(原理)?
- java中有哪些排序方式?原理是什么?
- 两个按降序排序的数组,用效率最高的算法组合成一个按降序排列的新数组;
- 回文字符串的个数;
- 一个若干字符串中括号的对数;
- 斐波那契的实现;
- 单向链表反转?
- 台阶问题?
- 输入一个字符串,输出一出现频率最高的字符,如果出现频率相同,则输出第一个字符;
 
关于数据结构
- 
常用的数据结构; 
- 
hashmap是什么数据结构? 
- 
堆、栈、队列的特性是什么? 
- 
树的应用场景是什么? 
- 
二叉树与红黑树的理解; 
关于所做项目
- 
读写如何设置同步和异步; 
- 
如何处理排他处理? 思路:数据库中存一个时间戳字段,每次加载页面的时候将时间戳带到页面隐藏域。向后台发送请求的时候将该时间戳与数据库中所存的时间戳对比,如果一致的话说明该数据没有被他人更新,如果不一致说明数据被他人更新了。 
- 
如何判断用户是否重复操作; 可以有如下几种方案:  1) 数据库层面:添加唯一性约束,通过账号、名称等信息进行唯一性约束;  2) 页面层面:可以对操作按钮进行点击限制;  3) 后端层面:提交时生成的token(一般是时间戳),存与session,提交到后端与之对比; 
- 
如何实现实时显示大计算的结果? 
- 
如何防止重复支付或者重复退款? 
- 
项目中如防止重复生成订单? 
- 
项目中遇到什么难题?是如何解决的? 
- 
下单时,如果在支付的时候,反馈给用户的是失败,然而调用第三方是成功,如何处理? 
- 
首先要缕清所有的流程,然后再拿出对应的数据表结构 
关于分布式
- 
分布式框架有哪些? 
- 
dubbo和spring cloud的比较; 
- 
Restful风格的接口的理解; 
- 
rpc框架有哪些?如何使用? 
- 
rpc和http的对比; 
- 
负载均衡的理解; 
- 
常用的mq的种类;(补充) 
- 
RabbitMQ的作用? 
PS(SongLea)
- 一个字符串里有多个左右括号 如何判断这些括号都是一一对应的
- 手写一个单例模式的代码
- 手写实现一个blockingqueue的实现
- 线程池的数量怎么确定,设多少?
- 手写怎样实现一个LRU的缓存
- lru:最少未使用算法
- redis与rabbitmQ部分知识
- 手写代码去实现一个读写锁
- 代理模式有什么好处,怎么实现的
- Linux常用命令,如查看磁盘空间,内存大小,CPU利用率,机器信息,Jvm上的内存占用信息。。。
- btree树,线程池,数据连接池,秒杀系统设计,回文字符串个数,线程如何变成运行态,事务的两种方式,垃圾回收机制,索引,hashmap,concurrenthashmap的结构
- 缓存穿透如何解决
- object有哪些方法,hashmap线程安全不
- hash一致性,JUC包与sync关键字锁的区别与理解
- aba的问题;
- 什么是乐观锁?什么是重入锁?
- CAS操作;
- 常用的集合框架的底层实现;
- 乐观锁和重入锁;
本文来自博客园,作者:追梦1819,转载请注明原文链接:https://www.cnblogs.com/yanfei1819/p/10213673.html

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号