JAVA开发工程师 专题汇总

JAVA开发工程师 面试经验分享列表,共2328

北京飞宇信科技有限公司 - JAVA开发工程师

面试时间:2018面试职位:JAVA开发工程师分享时间:2018-09

面试经历:
在前程无忧上公开了简历,对方人事查看到了,打了电话邀约面试。
首先就是技术面试,面试官就问了一些简单的基础问题,然后问问了项目经验,问了问对行业的认知,总体不是很难。
然后HR面试,问了一些常规的问题,因为我中间有一段时间没有去工作,就问了为什么没有工作,最后聊了聊职业规划和期望薪资。
隔两天收到offer,但是不太喜欢外派,就没去。
面试官提的问题:
其实问题很常见,网上也很多答案。
1.Java基础中必问的集合框架,这个读过源码很容易讲出来。
2.问了一些Java的基础概念,还有一些反射的东西。
3.问了问前端的一些问题,jQuery,HTML之类的,这一块我做的比较少,所以回答的不是很好。
4.问了一些SQL,也是常规的问题,多表联合查询,having子句之类的。

有用(0) 评论(0) 面试感觉:一般 面试难度:简单 应聘途径:网上申请

京东商城 - JAVA开发工程师

面试时间:2018面试职位:JAVA开发工程师分享时间:2018-08

面试经历:
电话面试,首先微信询问了为什么离职,我说是因为出差不能 接受,最好不要说其他体现自己缺点的原因。然后就让我等电话面试,当天下班7点就来电话开始面试了,面试一共就问了10个问题左右,当时聊的挺轻松的。
面试官提的问题:
1. LinkedList和ArrayList的数据原理?
a) LinkedList:链表结构,增删快,读取慢。
b) ArrayList:数组结构,读取快,增删慢。
2. ArrayList的默认初始化长度,在add时的源码实现?
a) 默认长度10,add时如果满了会使用arrays.copy()到一个新建的长度为1.5倍的数组。
3. HashMap的底层实现,在高并发时会出现的问题,是否有序的,解释无序的原因?
a) Entry数组,hash碰撞时会形成链表。
b) 并发put时会在扩容时形成链表环,下一次get时内容溢出。
c) 无序,数组下标是根据key的hash值计算的,和放入顺序无关。
4. HashSet内部实现,如何实现的无重复?
a) 内部就是包了一个hashMap,使用key的hash值来存放到map里面,如果相同就覆盖。
5. String的内部结构?
a) Char数组,定义为final类不可变,每一次字符串拼接都是new stringBuilder.append(),每一次的replace/substring都是new String()。
6. 线程池的参数含义,线程池执行新情求的流程?
a) 流程:
i. 核心数未满就创建线程,即使有空闲的;
ii. 核心数满了队列未满,就放入队列;
iii. 队列满了,就新建线程直至最大数满;
iv. 最大数满了就根据拒绝处理策略处理;
b) corePollSize:核心线程数
c) maximumPoolSize:最大线程数
d) keepAliveTime:空闲线程保留时间
e) TimeUnit:保留时间单位
f) BlockingQueue:阻塞队列(有限队列ArrayBlockingQueue,无限队列LinkedBlockingQueue)
g) ThreadFactory:线程工厂
h) RejectedExeutionHandler:队列满时的拒绝处理策略
7. Runable和Callable区别?
a) 都是任务,后者可以有返回值或者抛出异常,使用get获取返回值时要阻塞当前线程。
8. volatile关键字的作用?
a) 防止指令重排,对所有线程的可见性;
b) 可见性是基于内容屏障实现的,保证每个线程总能拿到内存中的最新值。
9. 事务的理解,事务的传播性,传播级别,隔离性,隔离级别?
a) 事务分为编程式和声明式。编程式更加灵活,声明式方便管理。
b) 传播级别定义的是事务的控制范围,事务隔离级别定义的是事务在数据库读写方面的控制范围。
c) 传播级别:
i. REQUIRED:上下文已存在事务,则加入到事务中,若不存在,则创建事务
ii. NESTED:嵌套上下文中的事务,不存在就新建
iii. SUPPORTS:上下文已存在事务,则加入到事务中,若不存在,则不使用事务
iv. NOT_SUPPORTED:不支持事务,如果在事务中,就挂起直至逻辑完成后恢复
v. REQUIRES_NEW:每次都新建一个事务,挂起上下文的事务直至本事务完成后恢复
vi. MANDATORY:要求上下文必须存在事务,否则抛出异常
vii. NERVER:要求上下文不允许存在事务,否则抛出异常
d) 隔离级别:
i. Serializable:事务串行执行,影响性能
ii. Repeatable read:避免了不可重复读取,保证一个事务不会修改已经由另一个事务读取但未提交的数据
iii. Read committed:默认级别,保证一个事务不会读取已经由另一个事务读取但未提交的数据
iv. Read uncommitted:保证不会读取非法数据
10. SQL优化的例子?
a) 添加索引
i. 联合索引,谁在前谁可以单独用索引
ii. is null 和 is not null 不会使用索引
iii. 对列进行操作,如||连接,不会使用索引
iv. Like 语句%在前面不会使用索引
v. Order by 里面使用表达式不会使用索引
b) 将不等于<>替换为大于or小于
c) Select避免使用*号
d) 使用EXISTS代替IN
e) Sql语句全部大写,因为执行时会转换为大写
f) 读写分离和分库分表,可以用mysql的主从同步实现分库
11. SQL注入方式?如何防止?
a) 方式:比如登录页面用户名输入 ‘ or 1=1 --。
b) 防止:
i. 使用预编译PreparedStatement;
ii. 正则表达式过滤sql关键字和符号;
12. 乐观锁 悲观锁?
a) 乐观锁:借助版本号或时间戳,更新前获取旧值,更新时判断值为旧值才更新,否则回滚重试。
i. 使用场景:业务中无法和数据库保持连接的情况。或获取锁失败几率小的情况。
b) 悲观锁:一锁二查三更新。Mysql的select for update如果没用索引会全表扫描都锁上。
13. redis 可存储的数据结构,如何实现分布式锁?
a) String字符串,hash哈希,list列表,set集合,zset散列
b) 分布式锁用setnx命令,如果锁不存在则set进去,如果锁存在则不做操作
c) Setnx结合expire一起使用,保证过期自动解锁,防止死锁。但是可能出现expire命令时突然崩溃导致过期时间设置失败
d) 高版本redis使用set命令,一次性设置所有参数
jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);
e) 还可以使用lua脚本加eval命令实现加锁的原子操作(非原子性场景:解锁时锁突然过期,然后另一个客户端加锁成功,这时解锁就解到别人去了)
14. Autowire 和 Resource 区别?
a) Autowire是byType的,是spring提供的,设置required=false可以注入null,结合@Qualifier可以byName。
b) Resource是byName的,是jdk自带的。
i. 如果同时指定了name和type,则找不到就抛出异常;
ii. 如果指定了name,就只按name匹配,找不到抛出异常;
iii. 如果指定了type,就只按type匹配,找不到或找到多个抛出异常;
iv. 如果没有指定,先按name,找不到再按type;
15. Spring Boot、Spring MVC 和 Spring 有什么区别?
a) Spring:主要核心是IOC和AOP。
b) Spring MVC:用于web应用,借助mvc分层,核心是DispatcherServlet,ModleAndView,ViewResolver。
c) Spring Boot:只支持JDK8,简化大量配置,通过自动配置和一个启动类实现,默认是tomcat容器,可以通过pom配置修改为jetty。
(如省略了web.xml+servlet-mvc.xml+application.xml等配置文件)
16. 微服务?
a) 概念:根据业务拆分为多个服务,部署在不同服务器上,相互之间进行调用,使用dubbo或者springcloud;
b) Dubbo停止维护,只支持RPC,不支持分布式;
17. Spring Cloud 如何注册服务?断路器是什么?Eureka Server集群?
a) 在main方法加@EnableDisscoveryClient,就可以在服务发布时,将服务名+ip+port+域名注册到注册中心,一般通过zookeeper/Eureka注册。
b) 调用的时候通过ribbon和feign(整合了Ribbon和Hystrix):
i. Ribbon:@RibbonClient(value="服务名称"),要构建http请求;
ii. Feign:@FeignClient,以接口的方式调用,定义为抽象方法,注解写在方法上;
c) 断路器:处理多个请求等待响应的问题,有三种状态:
i. 完全打开:上一次请求没有响应,下一次请求就被拦截。
ii. 半开:短时间内检测到服务有恢复迹象,就会放过请求,如果能调用成功,则关闭断路器。
iii. 关闭:服务能正常调用。
d) Eureka Server集群:采用去中心化的架构,每一个节点都保存其他节点的副本,新建节点后,会从附近节点请求注册信息做初始化,并且以心跳检测所有节点是否正常运行,如果超时没有收到心跳就会注销该节点。如果丢失心跳过多,就会自我保护。
18. kafka?activeMQ?RabbitMQ?
a) Kafka:处理发布-订阅的模式,高吞吐量,大数据量,支持批量写入,消息写入磁盘,减少IO;
b) ActiveMQ:
c) RabbitMQ:支持miror queue,不支持批量写入
19. JVM内存区域划分,内存模型,JVM调优?
a) 内存区域:
i. 堆:所有线程共享,存放对象和数组。
ii. 栈:每个线程有独立的栈,存放局部变量,操作数栈,常量池的引用,方法返回地址(递归会导致栈内存溢出) 。
iii. 方法区:所有线程共享,存放类信息,静态变量,编译后的代码。
iv. 本地方法栈:用于调用native方法服务的。
v. 程序计数器:每个线程有独立的计数器,保存的当前执行的指令的地址,用于多线程中切换线程后恢复之前的执行位置。
b) 内存模型:
i. 堆(Heap space分为年轻代和老年代。年轻代分为Eden和两个Survivor区)
1. 年轻代是新对象的产生地方,主要位于Eden区,Eden区被用完就会触发Minor GC,存活的放入From Survivor区,FS区满后触发GC,存活的放入To Survivor区。多次GC后仍然存活的放入老年代。
2. 老年代存放长久存活的对象,满后触发Major GC,这会让所有线程停止直到回收完成。
ii. 永久代(Permanent Generation)(Java8中已经用metaspace完全替代了永久代。jvm参数-XX:PermSize 和 -XX:MaxPermSize选项会被忽略)
iii. Native Area(程序计数器+本地方法栈)
c) 内存调优:
i. -Xmx/Xms:最大/初始堆内存 -XX:MaxNewSize/NewSize:最大/初始年轻内存(通常为 Xmx 的 1/3 或 1/4)
ii. 回收算法:引用计数,标记清除(碎片问题),复制(空间问题),标记整理(最优)
20. 设计模式,使用场景?
a) 观察者模式:如android的各种listener监听,借助接口通知观察者做出响应
b) 装饰者模式:如IO流的各种包装new BufferedInputStream(new FileInputStream(new File()))
c) 适配器模式:如Java.util.Arrays#asList(),java.io.InputStreamReader(InputStream)
d) 桥接模式:减耦合,如Collections类中的sort(),JDBC数据库访问接口API

有用(7) 评论(0) 面试感觉:一般 面试难度:难度一般 应聘途径:网上申请

中软国际 - JAVA开发工程师

面试时间:2016面试职位:JAVA开发工程师分享时间:2018-05

面试经历:
1、在网上投简历的时候联系上的hr
2、面试的时候首先要通过简历的初选,这个是项目的负责人来完成的
3、面试的时候有笔试,不过面试官好像对笔试的成绩看得不是太重,然后就是后面进行了面试,面试的时候问了下底层的jdbc的实现过程、数据库方面的知识、还有就是线程方面的知识,前段的知识也问了些,比喻HTML5的新特新、ajax的实现等
4、面试通过,薪水保密
5、面试的过程比较顺利,面试后hr就说通过了,面试官提的问题如果都能应对或者大部分都能应对,就没什么问题
面试官提的问题:
1、底层jdbc的实现流程
2、数据库方面的知识,入数据库的索引的优缺点、left join 和 right join的区别
3、以前的项目的实现流程,你在里面是什么角色,主要实现哪些功能,用到哪些技术
4、前端方面的知识,主要就是HTML5的新特性、jQuery方面的技术

有用(6) 评论(0) 面试感觉:很好 面试难度:很简单 应聘途径:社会招聘

广州捷世高信息科技有限公司 - JAVA开发工程师

面试时间:2018面试职位:JAVA开发工程师分享时间:2018-03

有用(9) 评论(0) 面试感觉:不好 面试难度:很简单 应聘途径:网上申请

美云智数 - Java开发工程师

面试时间:2018面试职位:Java开发工程师分享时间:2018-03

有用(0) 评论(0) 面试感觉:很好 面试难度:简单 应聘途径:内部推荐

新医华 - JAVA开发工程师

面试时间:2017面试职位:JAVA开发工程师分享时间:2018-02

有用(0) 评论(0) 面试感觉:一般 面试难度:难度一般 应聘途径:网上申请

美团网 - JAVA开发工程师

面试时间:2017面试职位:JAVA开发工程师分享时间:2017-11

有用(5) 评论(0) 面试感觉:不好 面试难度:困难 应聘途径:校园招聘

中软国际 - JAVA开发工程师

面试时间:面试职位:JAVA开发工程师分享时间:2017-11

有用(6) 评论(0) 面试感觉:一般 面试难度:难度一般 应聘途径:网上申请

腾讯 - JAVA开发工程师

面试时间:2017面试职位:JAVA开发工程师分享时间:2017-11

有用(6) 评论(0) 面试感觉:不好 面试难度:困难 应聘途径:网上申请

深圳市筷云信息科技股份有限公司 - JAVA开发工程师

面试时间:2017面试职位:JAVA开发工程师分享时间:2017-10

有用(8) 评论(0) 面试感觉:一般 面试难度:简单 应聘途径:网上申请

深圳路畅科技有限公司 - JAVA开发工程师

面试时间:2017面试职位:JAVA开发工程师分享时间:2017-09

有用(0) 评论(0) 面试感觉:一般 面试难度:难度一般 应聘途径:校园招聘

华为 - JAVA开发工程师

面试时间:2017面试职位:JAVA开发工程师分享时间:2017-09

有用(5) 评论(0) 面试感觉:一般 面试难度:难度一般 应聘途径:校园招聘

中兴 - JAVA开发工程师

面试时间:2017面试职位:JAVA开发工程师分享时间:2017-09

有用(3) 评论(0) 面试感觉:一般 面试难度:难度一般 应聘途径:校园招聘

中科软 - JAVA开发工程师

面试时间:2017面试职位:JAVA开发工程师分享时间:2017-08

有用(27) 评论(1)

中软国际 - JAVA开发工程师

面试时间:2017面试职位:JAVA开发工程师分享时间:2017-07

有用(6) 评论(0) 面试感觉:不好 面试难度:非常难

QUNA - JAVA开发工程师

面试时间:2017面试职位:JAVA开发工程师分享时间:2017-06

有用(0) 评论(0) 面试感觉:很好 面试难度:难度一般 应聘途径:社会招聘

58到家家政有限公司 - JAVA开发工程师

面试时间:2017面试职位:JAVA开发工程师分享时间:2017-06

有用(0) 评论(0) 面试感觉:不好 面试难度:很简单 应聘途径:猎头

软通动力 - JAVA开发工程师

面试时间:2016面试职位:JAVA开发工程师分享时间:2017-06

有用(5) 评论(1) 面试感觉:一般 面试难度:难度一般 应聘途径:网上申请

中科软 - JAVA开发工程师

面试时间:2016面试职位:JAVA开发工程师分享时间:2017-05

有用(9) 评论(0) 面试感觉:不好 面试难度:难度一般 应聘途径:社会招聘

广东亿讯电子有限公司 - JAVA开发工程师

面试时间:2017面试职位:JAVA开发工程师分享时间:2017-03

有用(0) 评论(0) 面试感觉:不好 面试难度:难度一般 应聘途径:猎头

1 2 3 4 5 6 7 8 9 10 11   共 20 页