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操作;
 - 常用的集合框架的底层实现;
 - 乐观锁和重入锁;
 
java开发3~5年工作经验面试题的更多相关文章
- 写给java web一年左右工作经验的人
		
摘要 大学就开始学习web,磕磕绊绊一路走过来,当中得到过开源社区很多的帮助,总结了这些年来的技术积累,回馈给开源社区. ps:图片都是从网上盗...感谢原作者. ps:文字千真万确都是我自己写的 ...
 - 面试 3-5年Java开发后的感受
		
在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间.我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面 ...
 - 2年Java开发工作经验面试总结
		
最近换了个公司,从三月底开始面,面到四月底,面了有快二十家公司.我是一个喜欢总结经验的人,每经过一场面试,我在回来的路上都会仔细回想今天哪些问题可以答的更好,或者哪些问题是自己之前没遇到过的,或者是哪 ...
 - java后端程序员1年工作经验总结
		
java后端1年经验和技术总结(1) 1.引言 毕业已经一年有余,这一年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少东西.这一年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为 ...
 - 一位10年Java工作经验的架构师聊Java和工作经验
		
从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师.对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验,擅长敏捷开发模式.国内开源软件推动者之一, ...
 - 一年工作经验的大专生程序员(java后台)
		
1.文章前言 作为18应届毕业大专生已工作一年,相信这也是大部分同届生的现状. 那么,一个萌新进入职场一年都经历了什么呢?在校那会我是挺好奇的. 这篇文章是根据自己一年 ...
 - 转:一位10年Java工作经验的架构师聊Java和工作经验
		
黄勇( 博客),从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师.对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验,擅长敏捷开发模式.国内开源 ...
 - 精干货! Java 后端程序员 1 年工作经验总结
		
一.引言 毕业已经一年有余,这一年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少 东西.这一年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为系统维护 和发布当救火队员的苦恼 ...
 - 一个4年工作经验的java程序员的困惑,怎样才能能为一个架构师,请教大神
		
一个4年工作经验的java程序员的困惑,怎样才能能为一个架构师 LZ本人想往架构师发展, 业余时间也会看一些书籍, 但是感觉没有头绪, 有些书看了,也没有地方实践 我做了4年的java开发, 在一个公 ...
 
随机推荐
- C#怎么调用方法
			
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Exep ...
 - 第一个贴上XMT标签的Hadoop程序
			
距离老板留给我并行化做属性约简的任务开始到今天,已是一周有余,期间经历过各种呕心沥血,通宵达旦,终于运行出了一个结果.其中在配置过程中,浪费了爷大量的时间,有时回想自己上个周干的事情,会觉得分明的本末 ...
 - linq.js的用法
			
linq.js 详细介绍 linq.js 是一个 JavaScript 实现的 LINQ. 主要特性: 实现所有 .NET 4.0 的方法 complete lazy evaluation full ...
 - 适用于实数范围的中缀表达式的 + - * / ( ) 计算(C++实现)
			
核心算法: mid=FormatMid(mid); //格式化中缀表达式 JudgeLegalMid(mid); //判断中缀表达式的合法性 MidToPost mtp(mid); mtp.ToPos ...
 - 在eclipse中从gitlab上面下载项目
			
(1)在eclipse中 import --git--uri--输入用户名密码,下载,这个时候是在本地建立了一个本地仓库 (2)把仓库中的项目导入到eclipse的工作空间中. (3)将所需要的项目转 ...
 - es6+最佳入门实践(14)
			
14.模版字符串 模版字符串(template string)是增强版的字符串,定义一个模版字符串需要用到反引号 let s = `这是一个模版字符串` console.log(s) 14.1.模版字 ...
 - oracle12c创建用户等问题
			
一:前言 这几天我重新装了下电脑,然后自己有试着去装了下oracle11g,结果还是失败了然后我自己又去下载了最新的oracle12c,oracle12c中有两个用户sys和system,scott已 ...
 - linux认证上网
			
公司上网需要认证,linux命令行模式:curl -d "opr=pwdLogin&userName=用户名&pwd=密码&rememberPwd=1" h ...
 - 【Foreign】猜测 [费用流]
			
猜测 Time Limit: 10 Sec Memory Limit: 256 MB Description Input Output Sample Input 3 1 1 1 2 2 1 Samp ...
 - Vue 还是 React 还是 Angular ?
			
有空的时候还是把3个都熟悉一下.除了Angular学习起来笔记花时间外.React跟Vue没啥难度,学习用的时间不多. 如果你在Google工作:Angular如果你喜欢TypeScript:Angu ...