Java后端面试问题总结

面试知识点:

一面
一面都是聊项目,聊了半个小时,主要包括这几个问题:
1、项目介绍
2、项目中如何对数据库进行优化
3、项目中的难点
4、你在项目中充当的角色

完整带排版请转到2020阿里面经全

17、说一下你对HashMap的理解?说完…put操作的流程大概是怎样的呢?(流程)
讲一下redis的集群机制
5、分库分表的依据是什么?有用什么工具吗?
10、BIO和NIO的区别是什么?分别适合于什么场景?

说一下你知道的Http的请求头和返回码

3、项目的架构是怎样的?
4、如果现在让你在广州市投放出租车,你觉得出租车的数量会由什么因素来决定?
5、设计一个打车算法

7、数据分表你是按照什么来划分的?有用到什么中间件吗?

15、平时有用什么工具观察过虚拟机的内存情况吗?

20、线程池当队列中的任务都执行完毕之后会对线程进行怎样的操作?
21、多线程是不是肯定比单线程好?
22、什么样的任务适合用多线程什么适合单线程?
23、单CPU的情况下适合用多线程吗?

9、了解堆排序吗,为什么堆排序的空间复杂度是O(1)?
2、解释一下并行和并发的区别

还可以,有研究过部分JDK源码,比如常用的集合类如HashMap/Hashtable、ArrayList/LinkedList、Vector等,还有Java5之后的并发包JUC如concurrentHashMap、Executor框架、CopyOnWrite容器等。

那你把JVM的结构和类加载原理说下

8、(另一个项目)你主要负责哪个部分,难点是什么?
9、并发下单的并发是在哪个部分?你通过什么来防止超卖这种情况?
10、如果是分布式情况下你如何防止超卖的情况?
11、出租车项目的分库分表是按照什么条件进行的?
12、如果让你设计一个叫车算法,你会考虑什么?如何设计?
13、geohash是什么,你能说一下吗?
14、如何计算两个geohash块之间的距离?
4. 有几百亿个数字找出其中的中位数
11. 常用的负载均衡,该怎么用,你能说下吗?

  1. SQL 优化的常见方法有哪些

  2. SQL 索引的顺序,字段的顺序

  3. 查看 SQL 是不是使用了索引?(有什么工具)

  4. 线上服务 CPU 很高该怎么做?有哪些措施可以找到问题

  5. Spring Boot除了自动配置,相比传统的 Spring 有什么其他的区别?

  6. Spring Cloud 有了解多少?

  7. 一个文本有很多单词,找出来其中词频最大的k个单词?如果内存读一次装不下怎么办

  8. 拜占庭算法的理解?

  9. TCP协议拥塞是怎么解决的?

  10. JAVA线程池的参数都有什么?

  11. 有序链表和二叉搜索树在查找和插入上时间复杂度的区别?了解过红黑树么,在插入上有什么优化?

  12. 介绍下你觉得你做的比较好的项目,解决了哪些技术难点?

3、如果我要让10个线程并发同时开始运行,你要怎么做?
4、你认为数据库索引的设计需要考虑什么因素?
5、知道索引的最左原则吗?解释一下

6、项目中把数据放到HBase上面,你rowkey是如何设计让数据均匀分布在RegionServer上的?

map(重点是hashmap),虚拟机,具体项目,分布式知识,tcp,ip三次握手四次 挥手(详细一点比如:ACK/FIN以及相应的序号),虚拟机的垃圾收集,分布式的负载均衡,数据库一致性问题,
具体项目中用到的三层结构DAO,Service,Controller,以及浏览器访问网页到服务器发回响应的具体过程,cookie窃取导致的session劫持,以及解决方法(服务端设置httponly),还有如何应对拦截报文导致的信息泄露,我回答的是利用https进行加密处理,,
设计模式(重要,熟悉几个就好),,之后面试官发了个邮件,直接来了个在线测试,题目是简单实现观察者模式。这个自然没问题,维护一个listener队列,事件发生就遍历调用接口方法即可,,
第一个问题是讲解我做过的一个项目,用一个小白板加彩笔演示。具体涉及到了需求分析,原型图设计,数据字典设计,前后端对接,各种框架比如springboot,mybatis等。
之后面试官设计了一个场景,输入关键字,同时在三个引擎搜索,然后返回结果,要求返回时间在0.2s,不管搜到多少都必须返回,同时如果0.2s内就查询到了所有结果,也要尽快返回。毫无疑问是个多线程的场景,我的思路是把所有返回结果都存到一个json里,开三个线程分别查询,查到了就把结果放到json里,键事先定义好,为了避免返回时正在往json放数据,可以用一个CopyOnWrite锁来限制一下(虽然我没实际用过这个锁),另外把一个标识有多少个搜索引擎完成任务的标志位+1。
主线程可以用一个定时器,0.2s后把某个标志位设置一下,然后sleep,每隔一段时间检查是任务完成数,都完成了直接返回,没完成但是时间到了也返回。(当然用notify唤醒主线程可能会更好)。
最后问了数据结构相关的问题,主要是hashmap和treemap,以及各自特点和应用场景。这个属于比较常规了,没什么问题。最后问了红黑树的有序遍历,我假期自己实现了一遍红黑树,这里稍微想了一下,就用递归实现了,使用二叉树的中序遍历即可。

1、 项目简介以及你在项目中的角色。

2、 项目中你所遇到的难点以及你是怎样解决的。

3、 如果让你再次优化项目的话,你将从哪些方面进行考虑(这里可以考虑代码整体的规范性,重用性等)。

4、 对于这种大数据开发项目,我们应当选择哪一种Java虚拟机以及为什么选择这种虚拟机。

5、 通过这个项目你学到了什么。

手写一个Java程序,使得执行该程序必然发生死锁
给你一篇博客,如何找出这篇博客中的违禁词
简述如何寻找一棵二叉树的最大子树。其中二叉树中的节点值有正有负,二叉树的最大子树定义为该子树中的节点值之和在所有子树中是最大的。。
Java中的相关实现源码也可以上网看博客学习,如ConcurrentHashMap在Java 7 和Java 8中的实现区别
Java中线程安全的集合类(会涉及到相关实现原理,即源码问题)

Python等脚本语言和Java相比的优缺点。

数据库中的范式问题(一般到第三范式即可
哈希算法的冲突处理方法(可以结合Java中HashMap源码进行分析)
TCP和UDP简述。
(14)哪些对象是作为GC roots的
(15)了解阻塞队列吗,如何实现的
(16)数据库的范式
(17)数据库如何优化查询的?
(5)给你一个list如何遍历其中的每一个元素(我答使用的是Iterator迭代器,因为速度快)。为什么使用迭代器?

2.聊聊印象最深刻的项目(实习时做的项目) 3.项目中图片处理用了什么方法 4.确认实习的时间,工作内容,公司情况等

14.遇到过哪些异常的类型
15.Exception和Error有什么区别
16.对jvm有什么了解,有遇到过jvm调优的情况么

.算法题,发邮件在网页中手打,实现一个LRU的缓存器

11.JDK和CGLib的区别
13.分布式session共享问题

3.看到你项目中用到了多线程,聊聊多线程
4.你怎么理解线程安全
5.你知道哪些类型的线程池,一般我们项目中用的是什么类型(fix那个)
6.线程池的原理知道么,源码看过没有
7.源码中线程池默认初始化的线程数是多少

4.看过那些开源框架的源码(上来就怼源码) 5.Spring的源码看过么,Spring注册bean的流程是怎样的(不会)

6.Spring中是怎么获取到bean,能通过哪些方式获取bean(答了BeanFactory和一些工具类,大佬让说BeanFactory里面的细节,求求你放过我)

7.Spring中的事务传播机制(说了有七种,只记得四种)

3、数据库三大范式 4、左连接和右连接说一下,内连接呢

11.让你来设计观察者模式,你会怎么写

算法题:圆圈中最后剩下的数字

看你的项目用了悲观锁和乐观锁,说一下区别

动态代理有几种,Jdk与Cglib区别

8、Error与RuntimeException的区别

算法题:找出一个数组中第100个小的数字(堆思想解决)

3,Redis和memcached 4、Redis集群宕机,数据迁移问题

5、看你项目用到Spring boot,那有用过Spring cloud吗

6、RPC说一下 7、说一下你对微服务的理解,与SOA的区别

4、开闭原则懂吗,说一下

5

、NIO说一下你的理解 6、AtomicInteger底层原理 7、CAS机制会出现什么问题

8、还用过并发包哪些类

9、你实习的本地缓存过期策略怎么设置,一致性怎么保证

10、分布式理论懂多少,说一下(这里我说了CAP,Base,paxos)

11、分布式事务有了解吗 12、RabbitMQ消息队列丢失消息,重复消费问题

1.给定存有n个数的数组,找出数组中最小的k个数。(算法设计与分析基本算法题)

你可能感兴趣的:(程序员笔试面试)