资讯详情

2021 Java面试真题集锦

… 1

大厂面试的基本流程 17 字节跳动 17 阿里 17 腾讯 18 网易游戏 18 面试前需要准备: 18 面试中可以借鉴的套路 19

  1. 用简历获得更多的面试机会 19
  2. 自我介绍时,技术栈和亮点立即全面抛出。 20
  3. 首先介绍项目背景,消除面试官的问题 21
  4. 通过说明项目管理工具,你不仅可以写代码 22
  5. 用 SPRING BOOT 项目示例说明你的技术基本面 23
  6. 用实例说明你在内存调优方面的经验 24
  7. 展示你在数据库调优方面的经验 25
  8. 总结上述说辞 26
  9. 在准备项目演讲时,可以准备后续面试官的问题 27 JAVA 进阶训练营 28 2021 【美团】面试真题: 32 1、SPRING AOP 底层原理 32 2、HASHMAP 底层数据结构是什么? 32 3、HASHMAP 扩容机制是什么? 33 4、CONCURRENTHASHMAP 的存储结构是怎样的? 33 5.如何设置线程池大小? 34 6、IO 密集=NCPU*2 如何计算? 34 7、G1 收集器的特点是什么? 34 8.你有什么方法来检查? OOM 的问题? 35 9、请你谈谈MYSQL 事务隔离等级,MYSQL 默认隔离水平是什么? 35 可重复读解决了哪些问题? 35 11、对 SQL 慢慢查询会考虑哪些优化? 36 12.谈谈缓存穿透、缓存击穿和缓存雪崩以及解决方案? 36 13、LRU 是什么?如何实现? 37 14.堆内存是什么?如何设置参数? 37 15、栈和队列,以使用场景为例? 38 16、MYSQL 为什么INNODB 是默认引擎吗? 38 17、MYSQL 为什么使用索引底层结构 B 树? 38 18、B 树叶节点链表是单向还是双向? 39 19、MVCC 它的底层原理是什么? 39 20、UNDO LOG 如何回滚事务 ? 39 如何慢慢查询? SQL 产生的原因 39 索引失效的情况有哪些? 39 23、一个 REDIS 最多能存储多少实例?KEYS?LIST、SET、SORTED SET 他们最多能存放多少元素? 40 24、REDIS 数据结构压缩列表与跳跃表的区别 40 25.为什么数据量小时使用压缩列表? ? 40 26、REDIS 如何实现主从同步? 40 27、REDIS 持久化RDB 和AOF 优缺点 41 谈谈自己的对待 SPRING AOP 的了解? 42 29、 SPRING BEAN 容器的生命周期是什么? 42 30、RABBITMQ 如何保证消息不丢失? 43 2021 【阿里】: 43 1、TCP 和UDP 区别? 43 2、TCP/IP 协议涉及哪些层次的 43 3、描述下TCP 连接 4 挥手的过程?为什么? 4 次挥手? 43 计算机插上电源操作系统做了什么? 44 5、LINUX 操作系统设备文件有哪些? 44 6.多线程同步有哪些方法? 44 7.一个对象的两种方法 SYNCHRONIZED,进入一个线程SLEEP,另一个线程能进入另一个方法吗? 44 什么是可重入?(REENTRANTLOCK)? 44 创建线程的三种方法是什么? 45 10、JAVA 怎么获取多线程的返回值? 45 创建线程池的方法有哪些? 45 线程池的参数是什么? 46 13.线程池拒绝策略有哪些? 46 14.您认为线程池的核心参数是自定义和可配置的吗? 46 15、THREADPOOLEXECUTOR 线程池,COREPOOLSIZE=5, MAXIMUMPOOLSIZE=10,QUEUECAPACITY=10,有 20 线程池将如何执行耗时任务 20 个任务? 46 16.给用户发信息的任务超过了队列。你使用哪种拒绝策略?还有别的办法吗? ? 47 17、JAVA8 了解新特性有哪些? 47 18时候使用多线程,为什么要设计多线程? 47 多线程越多,效率越高吗? 48 20.多线程会产生什么并发问题? ? 48 21、MYBATIS 如何将对象转换成SQL? 48 虚拟内存是什么,虚拟内存的原理是什么? 48 23.栈会溢出吗?什么时候溢出?方法区会溢出吗? 49 24、JVM 如何加载? 49 25、自己写过 STRING 以前的类可以加载吗?STRING 何时加载? 50 26、描述 THREADLOCAL底层实现原理及常用场景(线程本地变量)? 50 27.什么是微服务架构? 51 28.微服务的特点是什么? 51 29、LAMBDA 什么是表达式?优缺点? 51 30、讲一下 LAMBDA 表达式作用域(LAMBDA SCOPES)。 52 31、MYSQL 事务的特点是什么,分别是什么意思? 52 2021 【京东】: 52 1.垃圾回收机制将处理哪些情况下的对象? 52 2.谈常见的编码方法? 53 3、UTF-8 中文在编码中占几个字节;INT 几个字节? 53 4、静态代理和动态代理的区别,什么场景使用? 53 5、简述下JAVA 异常系统。 54 6.谈谈你对分析和分配的理解。 54 7、修改对象A 的EQUALS 方法签名,然后使用HASHMAP 存储这个对象的实例时用哪个?EQUALS 方法? …54 8、JAVA 实现多态的机制是什么? 55 9.如何将一个JAVA 将对象序列化到文件中? 55 10、说说你对 JAVA 理解反射。 55 11、说说你对 JAVA 理解注释。 56 12泛型原理,并举例说明。 57 13、谈谈你对 JAVA 中STRING 的了解。 57 14、STRING 为什么要设计成不可变的? 58 15、REDIS 说几种常见的数据结构?各自的使用场景? 58 16缓存穿透、缓存击穿和缓存雪崩,以及各自的解决方案? 59 17、讲下 KAFKA、RABBITMQ、ROCKETMQ 两者有什么区别? 60 18、KAFKA 说说架构? 60 19、KAFKA 如何保证消息有序? 61 20、KAFKA 如何保证消息不丢失? 61 21、KAFKA 如何解决重复消费问题? 62 22、介绍下 MYSQL 聚簇索引和非聚簇索引的区别(INNODB 与MYISAM 引擎)? 62 然后给出联合索引(A,B)和一个句子,SELECT * FROM TABLE WHERE B = ‘XXX判断是否能命中索引?为什么? …62 24、JAVA 实现多线程有哪些方法? 63 25、用过 CONCURRENTHASHMAP,讲一下他和 HASHTABLE 差异? 63 26、JAVA 如何实现线程安全? 63 27、描述 THREADLOCAL底层实现原理及常用场景(线程本地变量)。 63 28、介绍下 SPRING BEAN 作用域有哪些? 64 29、注解 @AUTOWIRED 和@RESOURCE 有什么区别? 64 30、RPC 实现基础? 65 31、CMS,G1 了解垃圾回收器中的三色标记吗? 65 2021 【腾讯】面试真题: 66 1、KAFKA 是什么?主要的应用场景是什么? 66 2、KAFKA 为什么有TOPIC 还要用PATITION? 67 3.客户端和服务器之间最多能建立多少个连接? 67 4、HASHMAP 比如结构,线程不安全? 67 5、MYSQL 索引分类? 67 6、了解线程& 过程有区别吗? 68 7、JAVA 过程中有多少种通信方式? 68 8.如何同时处理多个服务器的数据定时任务? 69 9.实现常见分布式锁的几种方法? 69 10、REDIS 分布式锁实现原理? 69 11、REDIS 的数据类型及它们的使用场景? 70 12.信号量与信号的区别 70 13、SELECT 和EPOLL 底层结构的原理是什么? 70 14、场景题:1 在取出最大数据之前 100 什么方法? 71 15、KAFKA 如何确保信息可靠? 72 16.消息队列的使用场景 72 对乐观锁和悲观锁的理解以及如何实现,有哪些实现方法? 73 18、ARRAYLIST 和LINKEDLIST 有什么区别? 73 19、谈谈你对 SQL 理解注入式攻击? 74 20.数据库事务的特点? 74 21、REDIS 如何做内存优化? 74 22.缓存穿透,缓存击穿,缓存雪崩是怎么回事?解决办法? 75 23.数组和链表的区别?数组内存过大会出现什么问题?链表增删过多会出现什么问题? 76 常见的排序算法和分别的复杂性? 76 25、JDK 1.8 的JVM 内存划分模型,堆与堆的区别 76 26、简单描述 MYSQL 中、索引、主键、唯一索引、联合索引的区别对数据库的性能有什么影响(从读写两个方面)? 77 27、I/O 什么样的模型? 77 28.当你用浏览器打开链接时,电脑做了什么工作步骤? 77 29、虚拟 DOM 优缺点是什么? 77 什么是幻读,什么隔离级别可以防止幻读? 78 2021 【百度】面试真题: 78 1、SPINGBOOT 还有定期任务?注释是什么? 78 2.请描述线程的生命周期们之间如何切换? 78 3.什么情况下线程会进入?WAITING 状态? 79 、简述多进程开发中JOIN 和DEAMON 的区别? 79 5、异步和同步、阻塞和非阻塞之间的区别? 79 6、为什么要分内核态和用户态? 80 7、说下类加载器与类加载?加载的类信息放在哪个区域? 80 8、UDP 协议和TCP 协议的区别? 80 9、LIMIT 1000000 加载很慢的话,你是怎么解决的呢? 81 10、MYSQL 的索引分类是什么? 81 11、什么是散列表? SELECT * 和 SELECT 1? 82 12、MYSQL 的主从复制了解吗? 82 13、SPRING 框架事务注解用什么注解?使用该注解的失效场景? 82 14、FINAL、FINALLY、FINALLIZE?FINALLY 是在RETURN 之前执行还是之后?FINALLY 块里的代码一定会执行吗? 82 15、I/O 多路复用实现方式有哪些? 83 16、SELECT、POLL、EPOLL 区别有哪些? 83 17、哈希算法解决哈希冲突方式有哪些? 83 18、如何保证 REDIS 中的数据不丢失? 83 19、如何保证 REDIS 中的数据都是热点数据? 84 20、REDIS 持久化机制是如何做的? 84 21、REDIS 为什么在使用RDB 进行快照时会通过子进程的方式进行实现? 85 22、介绍下 MYSQL 的主从复制原理?产生主从延迟的原因? 86 23、父进程如果宕掉,子进程会怎样? 86 24、孤儿进程和僵尸进程有什么区别? 86 25、MYSQL 中有哪几种锁? 86 26、互斥锁(MUTEX)和自旋锁(SPINLOCK)分别在什么场景使用? 87 27、描述 SYNCHRONIZED、REENTRANTLOCK 的区别? 87 28、HASHMAP 扩容操作是怎么实现的? 87 29、CONCURRENTHASHMAP 1.7 与 1.8 区别? 87 30、如何使用 JAVA 的反射? 87 2021 【华为】面试真题: 88 1、JAVA 常用集合及特点? 88 2、开启一个线程的方法? 89 3、JAVA 面向对象包括哪些特性,怎么理解的? 89 4、JAVA 如何保证线程安全? 90 5、介绍SPRING MVC 的工作流程? 90 6、SPRING 框架中用到了哪些设计模式? 90 7、REDIS 的特点是什么? 91 8、为什么使用REDIS,有什么好处? 91 9、REDIS 雪崩和击穿了解吗? 91 10、什么是面向对象,谈谈你的理解? 92 11、访问数据库除了 JDBC 还有什么? 92 12、你知道有哪些设计原则? 92 13、在生产环境 LINUX 服务器上,发现某台运行 JAVA 服务的服务器的 CPU100,不借助任何可视化工具,怎么进行问题的定位? 92 14、JDK 里面带的工具你知道哪些? 93 15、基本数据类型 BIT 长度? 93 16、CHAR 能不能存中文? 93 17、谈谈你对泛型的理解? 93 18、JAVA 程序是怎样运行的? 94 19、GC ROOT 有哪些? 94 20、栈帧的大小什么时候确定? 94 21、静态 FILED 声明和构造器哪个先执行? 95 22、线程创建方式是什么? 95 23、传统 I/O 跟NIO 的区别? 95 24、消息队列的在各种场景下如何选型? 95 25、JAVA 的安全性体现在哪里? 97 26、STATIC 方法怎么访问非STATIC 变量? 97 27、讲下你理解的 JAVA 多继承? 98 28、JAVA 基本类型有哪些? 98 29、线程池如果满了会怎么样? 98 30、什么是双亲委派机制,它有什么作用? 98 JAVA I/O 99 1、I/O 流的分类 99 2、字节流如何转为字符流? 99 3、字节流和字符流,你更喜欢使用哪一个? 99 4、SYSTEM.OUT.PRINTLN 是什么? 100 5、什么是FILTER 流? 100 5、有哪些可用的FILTER 流? 100 6、有哪些FILTER 流的子类? 100 7、NIO 和I/O 的主要区别 100 8、BIO、NIO、AIO 有什么区别? 101 9、NIO 有哪些核心组件? 102 10、SELECT、POLL 和EPOLL 什么区别 102 11、什么是 JAVA 序列化,如何实现JAVA 序列化? 103 12、如何实现对象克隆? 103 13、什么是缓冲区?有什么作用? 103 14、什么是阻塞 IO?什么是非阻塞 IO? 103 15、请说一下 PRINTSTREAM BUFFEREDWRITER PRINTWRITER 有什么不同? 104 KAFKA 104 1、KAFKA 是什么?主要应用场景有哪些? 104 2、和其他消息队列相比,KAFKA 的优势在哪里? 105 3、什么是 PRODUCER、CONSUMER、BROKER、TOPIC、PARTITION? 105 4、KAFKA 的多副本机制了解吗? 105 5、KAFKA 的多分区(PARTITION)以及多副本(REPLICA)机制有什么好处呢? 106 6、ZOOKEEPER 在KAFKA 中的作用知道吗? 106 7、KAFKA 如何保证消息的消费顺序? 106 8、KAFKA 如何保证消息不丢失? 107 9、KAFKA 判断一个节点是否还活着有那两个条件? 108 10、PRODUCER 是否直接将数据发送到BROKER 的LEADER(主节点)? 108 11、KAFA CONSUMER 是否可以消费指定分区消息吗? 108 12、KAFKA 高效文件存储设计特点是什么? 108 13、PARTITION 的数据如何保存到硬盘? 108 14、KAFAKA 生产数据时数据的分组策略是怎样的? 109 15、CONSUMER 是推还是拉? 109 16、KAFKA 维护消费状态跟踪的方法有什么? 109 MYSQL 109 1、据库三大范式是什么 109 2、MYSQL 有关权限的表都有哪几个? 109 3、MYSQL 的BINLOG 有有几种录入格式?分别有什么区别? 110 4、MYSQL 存储引擎MYISAM 与INNODB 区别 110 5、MYISAM 索引与INNODB 索引的区别? 110 6、什么是索引? 111 7、索引有哪些优缺点? 111 索引的优点 111 索引的缺点 111 8、索引有哪几种类型? 111 9、MYSQL 中有哪几种锁? 112 10、MYSQL 中INNODB 支持的四种事务隔离级别名称,以及逐级之间的区别? 112 11、CHAR 和VARCHAR 的区别? 112 12、主键和候选键有什么区别? 112 13、如何在 UNIX 和MYSQL 时间戳之间进行转换? 112 14、MYISAM 表类型将在哪里存储,并且还提供其存储格式? 113 15、MYSQL 里记录货币用什么字段类型好 113 16、创建索引时需要注意什么? 113 17、使用索引查询一定能提高查询的性能吗?为什么 113 18、百万级别或以上的数据如何删除 114 19、什么是最左前缀原则?什么是最左匹配原则 114 20、什么是聚簇索引?何时使用聚簇索引与非聚簇索引 114 21、MYSQL 连接器 114 22、MYSQL 查询缓存 115 23、MYSQL 分析器 115 24、MYSQL 优化器 115 25、MYSQL 执行器 115 26、什么是临时表,何时删除临时表? 116 28、什么叫外链接? 117 29、什么叫内链接? 117 30、使用 UNION 和UNION ALL 时需要注意些什么? 117 31、MYISAM 存储引擎的特点 117 32、INNODB 存储引擎的特点 118 NETTY 118 1、为什么要用NETTY 呢? 118 2、NETTY 有哪些应用场景? 119 3、NETTY 的优势有哪些? 119 3、NETTY 核心组件有哪些?分别有什么作用? 119 5、EVENTLOOPGROUP 了解么?和EVENTLOOP 啥关系? 120 6、请说下对BOOTSTRAP 和SERVERBOOTSTRAP 的了解? 121 7、请说下NETTY 线程模型? 121 8、NETTY 服务端和客户端的启动过程是怎样的? 121 9、什么是TCP 粘包/拆包? 122 10、如何在 NETTY 中解决TCP 粘包问题? 122 11、TCP 长连接和短连接了解么? 123 12、为什么需要心跳机制?NETTY 中心跳机制了解么? 123 13、讲讲 NETTY 的零拷贝 124 14、NETTY 和TOMCAT 的区别? 124 15、NETTY 发送消息有几种方式? 124 分布式 125 1、分布式服务接口的幂等性如何设计? 125 2、分布式系统中的接口调用如何保证顺序性? 125 3、说说ZOOKEEPER 一般都有哪些使用场景? 125 4、说说你们的分布式SESSION 方案是啥?怎么做的? 126 5、分布式事务了解吗? 126 6、那常见的分布式锁有哪些解决方案? 127 7、ZK 和REDIS 的区别,各自有什么优缺点? 127 8、MYSQL 如何做分布式锁? 127 9、你了解业界哪些大公司的分布式锁框架 128 10、请讲一下你对 CAP 理论的理解 128 11、请讲一下你对 BASE 理论的理解 129 12、分布式与集群的区别是什么? 129 13、请讲一下 BASE 理论的三要素 130 14、请说一下对两阶段提交协议的理解 130 15、请讲一下对 TCC 协议的理解 131 微服务 131 1、你对微服务是怎么理解的? 131 2、说说微服务架构的优势。 131 3、微服务有哪些特点? 132 4、单体应用、SOA 和微服务架构有什么区别? 132 5、在使用微服务架构时,你面临的挑战是什么? 132 6、什么是SPRING BOOT? 133 7、SPRING BOOT 有哪些优点? 133 8、什么是JavaConfig? 133 9、什么是SPRING CLOUD? 134 10、使用 SPRING BOOT 开发分布式微服务时,我们需要关注哪些问题? 134 11、服务注册和发现是什么意思?SPRING CLOUD 如何实现? 134 12、负载平衡的意义什么? 134 13、什么是 HYSTRIX? 135 14、什么是 NETFLIX FEIGN?它的优点是什么? 135 15、SPRING CLOUD 断路器的作用 135 消息队列 135 1、为什么使用消息队列? 135 2、消息队列有什么优点和缺点? 135 3、KAFKA、ACTIVEMQ、RABBITMQ、ROCKETMQ 都有什么区别,以及适合哪些场景? 136 4、如何保证消息不被重复消费? 136 5、如何保证消息消费的幂等性? 137 6、如何保证消息的可靠性传输?(如何处理消息丢失的问题) 137 7、如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路。 139 8、如何解决消息队列的延时以及过期失效问题? 139 9、消息队列满了以后该怎么处理? 140 10、消息如何分发? 140 11、消息怎么路由? 140 12、消息基于什么传输? 141 13、为什么不应该对所有的 MESSAGE 都使用持久化机制? 141 14、如何保证高可用的?RABBITMQ 的集群 141 15、RABBITMQ 的工作模式 142 16、为什么需要消息系统,MYSQL 不能满足需求吗? 142 DUBBO 143 1、说说核心的配置有哪些? 143 2、DUBBO 支持哪些协议,每种协议的应用场景,优缺点? 144 3、服务提供者能实现失效踢出是什么原理? 145 4、RPC 架构有哪些组件? 145 5、DUBBO 服务调用是阻塞的吗? 145 6、DUBBO 核心功能有哪些? 145 7、DUBBO 服务器注册与发现的流程? 146 8、DUBBO MONITOR 实现原理? 146 9、DUBBO 和SPRING CLOUD 有什么关系? 147 10、DUBBO 和SPRING CLOUD 有什么哪些区别? 147 11、DUBBO 有哪些注册中心? 147 12、DUBBO 的注册中心集群挂掉,发布者和订阅者之间还能通信么? 147 13、DUBBO 集群提供了哪些负载均衡策略? 147 14、DUBBO 的集群容错方案有哪些? 148 15、DUBBO 超时设置有哪些方式? 148 JAVA 集合 148 1、说说LIST, SET, QUEUE, MAP 四者的区别? 148 2、如何选用集合? 149 3、为什么要使用集合? 149 4、 ARRAYLIST 和VECTOR 的区别? 149 5、ARRAYLIST 与LINKEDLIST 区别? 149 6、COMPARABLE 和COMPARATOR 的区别? 150 7、无序性和不可重复性的含义是什么 150 8、比较HASHSET、LINKEDHASHSET 和TREESET 三者的异同 150 9、试比较QUEUE 与DEQUE 的区别 151 10、请谈一下对 PRIORITYQUEUE 的认识? 151 11、HASHMAP 和HASHTABLE 的区别? 151 12、HASHSET 如何检查重复? 152 13、HASHMAP 的长度为什么是 2 的幂次方? 152 这个算法应该如何设计呢? 153 14、CONCURRENTHASHMAP 和HASHTABLE 的区别? 153 15、CONCURRENTHASHMAP 线程安全的具体实现方式是怎样的? 153 16、TREEMAP 和TREESET 在排序时如何比较元素?COLLECTIONS 工具类中的SORT()方法如何比较元素? 154 17、COLLECTION 和COLLECTIONS 有什么区别? 154 18、ARRAY 和ARRAYLIST 有何区别? 155 19、HASHMAP 和CONCURRENTHASHMAP 的区别 155 20、如果使用 OBJECT 作为HASHMAP 的KEY,应该怎么办呢? 155 21、为什么 HASHMAP 中STRING、INTEGER 这样的包装类适合作为 K? 155 22、什么是哈希冲突? 156 23、你知道 FAIL-FAST 和FAIL-SAFE 吗? 156 24、ARRAYS.ASLIST 获得的 LIST 应该注意什么? 156 25、FINAL、FINALLY 和FINALIZE()的区别 157 26、内部类有哪些分类,分别解释一下 157 27、项目为 UTF-8 环境,CHARC=中,是否合法 157 28、动态代理是基于什么原理 158 29、EXCEPTION 和ERROR 有什么区别 158 30、反射的基本原理,反射创建类实例的三和方式是什么 158 ZOOKEEPER 158 1、ZOOKEEPER 是什么? 158 2、ZOOKEEPER 提供了什么? 159 3、ZOOKEEPER 文件系统 159 4、ZAB 协议? 159 5、四种类型的数据节点ZNODE 160 6、ZOOKEEPER WATCHER 机制 – 数据变更通知 160 7、客户端注册WATCHER 实现 161 8、服务端处理WATCHER 实现 161 9、客户端回调WATCHER 162 10、ACL 权限控制机制 162 12、会话管理 163 13、服务器角色 163 14、ZOOKEEPER 下SERVER 工作状态 164 15、数据同步 164 16、ZOOKEEPER 是如何保证事务的顺序一致性的? 165 17、分布式集群中为什么会有 MASTER? 165 18、ZK 节点宕机如何处理? 165 19、ZOOKEEPER 负载均衡和NGINX 负载均衡区别 166
  10. ZOOKEEPER 有哪几种几种部署模式? 166
  11. 集群最少要几台机器,集群规则是怎样的? 166
  12. 集群支持动态添加机器吗? 166
  13. ZOOKEEPER 对节点的WATCH 监听通知是永久的吗?为什么不是永久的? 167
  14. ZOOKEEPER 的JAVA 客户端都有哪些? 167
  15. CHUBBY 是什么,和ZOOKEEPER 比你怎么看? 167
  16. 说几个ZOOKEEPER 常用的命令。 167
  17. ZAB 和PAXOS 算法的联系与区别? 167
  18. ZOOKEEPER 的典型应用场景 168 JAVA 并发编程 171 1、在JAVA 中守护线程和本地线程区别? 171 2、线程与进程的区别? 171 3、什么是多线程中的上下文切换? 171 4、死锁与活锁的区别,死锁与饥饿的区别? 172 5、什么是线程组,为什么在JAVA 中不推荐使用? 172 6、为什么使用EXECUTOR 框架? 173 7、在JAVA 中EXECUTOR 和EXECUTORS 的区别? 173 8、什么是原子操作?在JAVA CONCURRENCY API 中有哪些原子类(ATOMIC CLASSES)? 173 9、JAVA CONCURRENCY API 中的LOCK 接口(LOCK INTERFACE)是什么?对比同步它有什么优势? 174 10、什么是 EXECUTORS 框架? 175 11、什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型? 175 12、什么是 CALLABLE 和FUTURE? 176 13、什么是 FUTURETASK?使用EXECUTORSERVICE 启动任务。 176 14、什么是并发容器的实现? 176 15、多线程同步和互斥有几种实现方法,都是什么? 177 16、什么是竞争条件?你怎样发现和解决竞争? 177 17、你将如何使用 THREAD DUMP?你将如何分析 THREAD DUMP? 177 18、为什么我们调用 START()方法时会执行RUN() 方法,为什么我们不能直接调用RUN()方法? 178 19、JAVA 中你怎样唤醒一个阻塞的线程? 178 20、在 JAVA 中CYCLIBARRIAR 和COUNTDOWNLATCH 有什么区别? 179 21、什么是不可变对象,它对写并发应用有什么帮助? 179 22、什么是多线程中的上下文切换? 180 23、JAVA 中用到的线程调度算法是什么? 180 24、什么是线程组,为什么在 JAVA 中不推荐使用? 181 25、为什么使用 EXECUTOR 框架比使用应用创建和管理线程好? 181 26、JAVA 中有几种方法可以实现一个线程? 181 27、如何停止一个正在运行的线程? 181 28、NOTIFY()和 NOTIFYALL()有什么区别? 182 29、什么是 DAEMON 线程?它有什么意义? 182 30、JAVA 如何实现多线程之间的通讯和协作? 182 31、什么是可重入锁(REENTRANTLOCK)? 182 32、当一个线程进入某个对象的一个 SYNCHRONIZED 的实例方法后,其它线程是否可进入此对象的其它方法? …183 33、乐观锁和悲观锁的理解及如何实现,有哪些实现方式?…183 34、SYNCHRONIZEDMAP 和CONCURRENTHASHMAP 有什么区别? 184 35、COPYONWRITEARRAYLIST 可以用于什么应用场景? 185 36、什么叫线程安全?SERVLET 是线程安全吗? 185 37、VOLATILE 有什么用?能否用一句话说明下 VOLATILE 的应用场景? 185 38、为什么代码会重排序? 186 39、在 JAVA 中WAIT 和SLEEP 方法的不同? 186 40、一个线程运行时发生异常会怎样? 186 41、如何在两个线程间共享数据? 186 42、JAVA 中NOTIFY 和NOTIFYALL 有什么区别? 186 43、为什么 WAIT, NOTIFY 和NOTIFYALL 这些方法不在THREAD 类里面? 186 44、什么是 THREADLOCAL 变量? 187 45、JAVA 中INTERRUPTED 和ISINTERRUPTED 方法的区别? 187 46、为什么 WAIT 和NOTIFY 方法要在同步块中调用? 187 47、为什么你应该在循环中检查等待条件? 188 48、JAVA 中的同步集合与并发集合有什么区别? 188 49、什么是线程池? 为什么要使用它? 188 50、怎么检测一个线程是否拥有锁? 188 51、你如何在 JAVA 中获取线程堆栈? 188 52、JVM 中哪个参数是用来控制线程的栈堆栈小的? 189 53、THREAD 类中的YIELD 方法有什么作用? 189 54、JAVA 中CONCURRENTHASHMAP 的并发度是什么? 189 55、JAVA 中SEMAPHORE 是什么? 189 56、JAVA 线程池中SUBMIT() 和EXECUTE()方法有什么区别? 190 57、什么是阻塞式方法? 190 58、JAVA 中的READWRITELOCK 是什么? 190 59、VOLATILE 变量和ATOMIC 变量有什么不同? 190 60、可以直接调用 THREAD 类的RUN ()方法么? 190 61、如何让正在运行的线程暂停一段时间? 191 62、你对线程优先级的理解是什么? 191 63、什么是线程调度器(THREAD SCHEDULER)和时间分片(TIME SLICING )? 191 64、你如何确保 MAIN()方法所在的线程是JAVA 程序最后结束的线程? 191 65、线程之间是如何通信的? 192 66、为什么线程通信的方法 WAIT(), NOTIFY()和 NOTIFYALL()被定义在 OBJECT 类里? 192 67、为什么 WAIT(), NOTIFY()和NOTIFYALL ()必须在同步方法或者同步块中被调用? 192 68、为什么 THREAD 类的SLEEP()和YIELD ()方法是静态的? 192 69、如何确保线程安全? 193 70、同步方法和同步块,哪个是更好的选择? 193 71、如何创建守护线程? 193 72、什么是 JAVA TIMER 类?如何创建一个有特定时间间隔的任务? 193 MYBATIS 194 1、什么是MYBATIS? 194 2、MYBAITS 的优点: 194 3、MYBATIS 框架的缺点: 194 4、MYBATIS 框架适用场合: 194 5、MYBATIS 与HIBERNATE 有哪些不同? 195 6、#{}和${}的区别是什么? 195 7、当实体类中的属性名和表中的字段名不一样,怎么办? 195 8、 模糊查询LIKE 语句该怎么写? 196 9、通常一个XML 映射文件,都会写一个DAO 接口与之对应,请问, 这个DAO 接口的工作原理是什么?DAO 接口里的方法,参数不同时, 方法能重载吗? 196 10、MYBATIS 是如何进行分页的?分页插件的原理是什么? 197 11、MYBATIS 是如何将SQL 执行结果封装为目标对象并返回的?都有哪些映射形式? 197 12、如何执行批量插入? 197 13、如何获取自动生成的(主)键值? 198 14、在 MAPPER 中如何传递多个参数? 199 15、MYBATIS 动态SQL 有什么用?执行原理?有哪些动态SQL? 200 16、XML 映射文件中,除了常见的SELECT|INSERT|UPDAE|DELETE 标签之外,还有哪些标签? 200 17、MYBATIS 的XML 映射文件中,不同的XML 映射文件,ID 是否可以重复? 200 18、为什么说 MYBATIS 是半自动ORM 映射工具?它与全自动的区别在哪里? 201 19、 一对一、一对多的关联查询? 201 20、MYBATIS 实现一对一有几种方式?具体怎么操作的? 202 21、MYBATIS 实现一对多有几种方式,怎么操作的? 202 22、MYBATIS 是否支持延迟加载?如果支持,它的实现原理是什么? 202 23、MYBATIS 的一级、二级缓存 203 24、什么是 MYBATIS 的接口绑定?有哪些实现方式? 203 25、使用 MYBATIS 的MAPPER 接口调用时有哪些要求? 203 26、MAPPER 编写有哪几种方式? 203 27、简述 MYBATIS 的插件运行原理,以及如何编写一个插件。 205 REDIS 205 1、什么是REDIS? 205 2、REDIS 的数据类型? 206 3、使用REDIS 有哪些好处? 206 4、REDIS 相比MEMCACHED 有哪些优势? 207 5、MEMCACHE 与REDIS 的区别都有哪些? 207 6、REDIS 是单进程单线程的? 207 8、REDIS 的持久化机制是什么?各自的优缺点? 207 9、REDIS 常见性能问题和解决方案: 208 10、REDIS 过期键的删除策略? 209 11、REDIS 的回收策略(淘汰策略)? 209 12、为什么 REDIS 需要把所有数据放到内存中? 210 13、REDIS 的同步机制了解么? 210 14、PIPELINE 有什么好处,为什么要用 PIPELINE? 210 15、是否使用过 REDIS 集群,集群的原理是什么? 210 16、REDIS 集群方案什么情况下会导致整个集群不可用? 210 17、REDIS 支持的JAVA 客户端都有哪些?官方推荐用哪个? 210 18、JEDIS 与REDISSON 对比有什么优缺点? 211 19、REDIS 如何设置密码及验证密码? 211 20、说说 REDIS 哈希槽的概念? 211 21、REDIS 集群的主从复制模型是怎样的? 211 22、REDIS 集群会有写操作丢失吗?为什么? 211 23、REDIS 集群之间是如何复制的? 211 24、REDIS 集群最大节点个数是多少? 212 25、REDIS 集群如何选择数据库? 212 26、怎么测试 REDIS 的连通性 212 27、怎么理解 REDIS 事务? 212 28、REDIS 事务相关的命令有哪几个? 212 29、REDIS KEY 的过期时间和永久有效分别怎么设置? 212 30、REDIS 如何做内存优化? 212 31、REDIS 回收进程如何工作的? 212 32、都有哪些办法可以降低 REDIS 的内存使用情况呢? 213 33、REDIS 的内存用完了会发生什么? 213 34、一个 REDIS 实例最多能存放多少的KEYS? LIST、SET、SORTED SET 他们最多能存放多少元素? 213 35、MYSQL 里有 2000W 数据,REDIS 中只存 20W 的数据,如何保证REDIS 中的数据都是热点数据?REDIS 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。 相关知识:REDIS 提供 6 种数据淘汰策略: 214 36、REDIS 最适合的场景? 214 37、假如 REDIS 里面有 1 亿个KEY,其中有 10W 个KEY 是以某个固定的已知的前缀开头的,如果将它们全部找出来? 215 38、如果有大量的 KEY 需要设置同一时间过期,一般需要注意什么? 215 39、使用过 REDIS 做异步队列么,你是怎么用的? 216 40、使用过 REDIS 分布式锁么,它是什么回事 216 SPRING 217 1、不同版本的SPRING FRAMEWORK 有哪些主要功能? 217 2、什么是SPRING FRAMEWORK? 217 3、列举SPRING FRAMEWORK 的优点。 217 4、SPRING FRAMEWORK 有哪些不同的功能? 217 5、SPRING FRAMEWORK 中有多少个模块,它们分别是什么? 218 6、什么是SPRING 配置文件? 219 7、SPRING 应用程序有哪些不同组件? 219 8、使用SPRING 有哪些方式? 219 9、什么是SPRING IOC 容器? 219 10、什么是依赖注入? 220 11、可以通过多少种方式完成依赖注入? 220 12、区分构造函数注入和 SETTER 注入 220 13、SPRING 中有多少种IOC 容器? 221 14、区分 BEANFACTORY 和APPLICATIONCONTEXT。 221 15、列举 IOC 的一些好处。 221 16、SPRING IOC 的实现机制。 221 17、什么是 SPRING BEAN? 222 18、SPRING 提供了哪些配置方式? 223 19、SPRING 支持集中BEAN SCOPE? 223 20、SPRING BEAN 容器的生命周期是什么样的 224 21、什么是 SPRING 的内部BEAN? 224 22、什么是 SPRING 装配 225 23、自动装配有哪些方式? 225 24、自动装配有什么局限? 226 25、什么是基于注解的容器配置 226 26、如何在 SPRING 中启动注解装配? 226 27、@COMPONENT, @CONTROLLER, @REPOSITORY,@SERVICE 有何区别 227 28、@REQUIRED 注解有什么用? 227 29、@AUTOWIRED 注解有什么用? 228 30、@QUALIFIER 注解有什么用? 228 31、@REQUESTMAPPING 注解有什么用? 229 32、SPRING DAO 有什么用? 229 33、列举 SPRING DAO 抛出的异常。 229 34、SPRING JDBC API 中存在哪些类? 230 35、使用 SPRING 访问HIBERNATE 的方法有哪些? 230 36、列举 SPRING 支持的事务管理类型 230 37、SPRING 支持哪些ORM 框架 230 38、什么是 AOP? 231 39、什么是 ASPECT? 231 40、什么是切点(JOINPOINT) 232 41、什么是通知(ADVICE)? 232 43、指出在 SPRING AOP 中CONCERN 和CROSS-CUTTINGCONCERN 的不同之处。 232 45、SPRING AOP AND ASPECTJ AOP 有什么区别? 233 46、如何理解 SPRING 中的代理? 233 47、什么是编织(WEAVING)? 233 48、SPRING MVC 框架有什么用? 233 49、描述一下 DISPATCHERSERVLET 的工作流程 234 50、介绍一下 WEBAPPLICATIONCONTEXT 235 51、什么是 SPRING? 235 52、使用 SPRING 框架的好处是什么? 235 53、SPRING 由哪些模块组成? 236 54、核心容器(应用上下文) 模块。 236 55、BEANFACTORY – BEANFACTORY 实现举例。 236 66、XMLBEANFACTORY 236 67、解释 AOP 模块 236 68、解释 JDBC 抽象和DAO 模块。 236 69、解释对象/关系映射集成模块。 237 70、解释 WEB 模块。 237 72、SPRING 配置文件 237 73、什么是 SPRING IOC 容器 237 74、IOC 的优点是什么? 237 75、APPLICATIONCONTEXT 通常的实现是什么? 237 76、BEAN 工厂和APPLICATION CONTEXTS 有什么区别? 238 77、一个 SPRING 的应用看起来象什么? 238 78、什么是 SPRING 的依赖注入? 238 79、有哪些不同类型的 IOC(依赖注入)方式? 238 80、哪种依赖注入方式你建议使用,构造器注入,还是 SETTER 方法注入? 239 81、什么是 SPRING BEANS? 239 82、一个 SPRING BEAN 定义包含什么? 239 83、如何给 SPRING 容器提供配置元数据? 239 84、你怎样定义类的作用域? 239 85、解释 SPRING 支持的几种BEAN 的作用域 240 86、SPRING 框架中的单例BEAN 是线程安全的吗? 240 87、解释 SPRING 框架中BEAN 的生命周期。 240 88、哪些是重要的 BEAN 生命周期方法?你能重载它们吗? 241 89、什么是 SPRING 的内部BEAN? 241 90、在 SPRING 中如何注入一个JAVA 集合? 241 91、什么是 BEAN 装配? 241 92、什么是 BEAN 的自动装配? 241 93、解释不同方式的自动装配 242 94、自动装配有哪些局限性 ? 242 95、你可以在 SPRING 中注入一个NULL 和一个空字符串吗? 242 96、什么是基于 JAVA 的SPRING 注解配置? 给一些注解的例子 242 97、什么是基于注解的容器配置? 243 98、怎样开启注解装配? 243 99、@REQUIRED 注解 243 100、@AUTOWIRED 注解 243 101、@QUALIFIER 注解 243 102、在 SPRING 框架中如何更有效地使用JDBC? 244 103、JDBCTEMPLAT 244 104、SPRING 对DAO 的支持 244 105、使用 SPRING 通过什么方式访问HIBERNATE? 244 106、SPRING 支持的ORM 244 108、SPRING 支持的事务管理类型 245 109、SPRING 框架的事务管理有哪些优点? 245 110、你更倾向用那种事务管理类型? 245 111、解释 AOP 245 112、ASPECT 切面 245 113、在 SPRING AOP 中,关注点和横切关注的区别是什么? 246 114、连接点 246 115、通知 246 116、切点 246 117、什么是引入? 246 118、什么是目标对象? 247 119、什么是代理? 247 120、有几种不同类型的自动代理 247 121、什么是织入。什么是织入应用的不同点? 247 122、解释基于 XML SCHEMA 方式的切面实现。 247 123、解释基于注解的切面实现 247 124、什么是 SPRING 的MVC 框架? 247 125、DISPATCHERSERVLET 247 126、WEBAPPLICATIONCONTEXT 248 127、什么是 SPRING MVC 框架的控制器? 248 128、@CONTROLLER 注解 248 129、@REQUESTMAPPING 注解 248 JVM 248
  19. 什么是 JVM? 251 1.1 请问 JDK 与 JVM 有什么区别? 251 1.2 你认识哪些 JVM 厂商? 251 1.3 ORACLEJDK 与 OPENJDK 有什么区别? 252 1.4 开发中使用哪个版本的 JDK?生产环境呢? 为什么这么选? 252
  20. 什么是 JAVA 字节码? 252 2.1 字节码文件中包含哪些内容? 252 2.2 什么是常量? 253 2.3 你怎么理解常量池? 253
  21. JVM 的运行时数据区有哪些? 253 3.1 什么是堆内存? 253 3.2 堆内存包括哪些部分? 255 3.3 什么是非堆内存? 255
  22. 什么是内存溢出? 255 4.1 什么是内存泄漏? 255 4.2 两者有什么关系? 257
  23. 给定一个具体的类,请分析对象的内存占用 257 5.1 怎么计算出来的? 257 5.2 对象头中包含哪些部分? 257
  24. 常用的 JVM 启动参数有哪些? 259 6.1 设置堆内存 XMX 应该考虑哪些因素? 261 6.2 假设物理内存是 8G,设置多大堆内存比较合适? 261 6.3 设置的值与 JVM 进程所占用的内存有什么关系? 261 6.4 怎样开启 GC 日志? 261
  25. JAVA8 默认使用的垃圾收集器是什么? 263 7.1 JAVA11 的默认垃圾收集器是什么? 263 7.2 常见的垃圾收集器有哪些? 263 7.3 什么是串行垃圾收集? 263 7.4 什么是并行垃圾收集? 263 7.5 什么是并发垃圾收集器? 265 7.6 什么是增量式垃圾收集? 265 7.7 什么是年轻代? 265 7.8 什么是 GC 停顿(GC PAUSE)? 265 7.9 GC 停顿与 STW 停顿有什么区别? 265
  26. 如果 CPU 使用率突然飙升,你会怎么排查? 265 8.1 如果系统响应变慢,你会怎么排查? 266 8.2 系统性能一般怎么衡量? 266
  27. 使用过哪些 JVM 相关的工具? 266 9.1 查看 JVM 进程号的命令是什么? 266 9.2 怎么查看剩余内存? 266 9.3 查看线程栈的工具是什么? 266 9.4 用什么工具来获取堆内存转储? 266 9.5 内存 DUMP 时有哪些注意事项? 267 9.6 使用 JMAP 转储堆内存大致的参数怎么处理? 267 9.7 为什么转储文件以结尾? 267 9.8 内存 DUMP 完成之后,用什么工具来分析? 267 9.9 如果忘记了使用什么参数你一般怎么处理? 267
  28. 开发性问题:你碰到过哪些 JVM 问题? 267

大厂面试的基本流程 以下是一些大厂面试的基本流程,大家可以参考下:

字节跳动

阿里

腾讯

网易游戏

面试前需要准备:

  1. Java 八股文:了解常考的题型和回答思路;

  2. 算法:刷 100-200 道题,记住刷题最重要的是要理解其思想,不要死记硬背,碰上原题很难,但大多数的解题思路是相通的。

  3. 项目:主要准备最近一家公司所负责的业务和项目:

项目的背景,为啥要做这个项目; 系统的演进之路,有哪几个阶段,每个阶段主要做了什么; 项目中的技术选型,在项目中使用一些工具和框架时的调研,为啥选这个; 项目的亮点:就是你在项目中做过最牛逼的事,复杂的需求方案设计、性能优化、线上问题处理、项目重构等等;

  1. 架构设计:主要是平台化的一些思想、DDD 领域驱动设计思想,随着经验的增加,这块会越来越重要。

  2. 项目管理:主要是在主导跨团队的项目时,如何高效的协调好各个团队的工作,使用哪些方法来保障项目的按时交付。在项目遇到困难时,作为项目负责人如何应对等等。跟架构设计一样,这块也是随着经验的增加越来越重要。

  3. 通用问题:几个比较容易被问到的问题是:1)为什么离职;2)在上家公司哪些能力得到了成长;3)平时怎么学习的?

  4. 问面试官:每次面试最后面试官一般会问有没有什么想问的,如果不知道问什么,可以问下团队当前负责的业务是什么?主要面临的挑战是什么?

面试中可以借鉴的套路:

  1. 用简历争取到更多的面试机会 注意点 1:阅读职位介绍上的技能要求年限,在简历上的醒目位置标明你有足量的相关技术项目经验。

比如某职位需要有 Spring boot 3 年经验,又如某职位需要有 2 年大数据开发经验,而你恰好有了, 就在简历第一页个人信息介绍下直接写明。 万一假设你缺乏一些,比如要求是有 2 年大数据,而你就只有一年,你就回想下,你在读书阶段,有没有在外面做过兼职,有没有帮老师一起做过项目,有的话别客气,把这部分的技术年限也加上。

注意点 2:再仔细阅读职位介绍上要求的技术,也列在第一页的醒目位置。

比如某职位需要有 jave 核心开发,多线程开发经验,分布式组件开发经验。其实对做开发的人来说, 这些技术多少在项目里也用过,但如果你不写上,甚至你的简历没法过筛选,甚至你没有面试机会。

注意点 3:再多少写些你的亮点,怎么写看下面的范例。

也就是说,在简历第一页,你写好姓名性别年龄和手机邮箱等基本信息后,一般可以用如下概要的形式,向面试官展示你和职位的匹配度,如下是范例。

具有 3 年 Java 开发经验,2 年 Spring Boot 开发经验,2 年数据库开发经验。(这里的年限需要大于等于职位介绍上的要求,如果达不到,很多公司就不给面试机会) 再根据职位介绍上要求的技术,总纲性列出你掌握的技术,以此证明你很匹配 这里你可以尽可能多地列出你掌握的 JD 上的技能,然后,你可以多列些你的亮点。

其实对大多数初级开发而言,应该都具备上述技能,哪怕当下不具备,用个把月绝对也能学会,所以大家完全可以写在简历上。

相反,姑且先不论候选人是培训班出身还是科班出身,但就凭在简历第一页醒目地展示和该职位的匹配度,至少面试官就肯继续往下看项目经验了,这样得到面试的机会,乃至通过面试的机会,就大大增加了。

  1. 自我介绍时,立即全面抛出技术栈和亮点 在面试的开始阶段,面试官大概率会让候选人自我介绍,这部分别的不用说,就直接根据上文给出的简历上列出的总纲性要点介绍自己,如下给出范例说辞。 先说技能和 JD 的匹配度。

我叫张三,今年 25 岁,18 年从交大大学毕业,计算机系,目前有 3 年 Java 开发经验(这个是 jd 上的要求),有 Oracle,MySQL 的开发经验,有 xx 等技术经验(这些经验也是 jd 上的要求)。

再说自己的亮点。

在项目里,我用过用索引和执行计划等进行数据库调优经验,有 JVM 方面排查 OOM 的经验,大数据方面,用过 Spark 等框架,分布式组件方面,用过 Redis 和 Dubbo 等,有在 linux 上看日志然后排查线上问题的经验。

其实天地良心,上述提到的亮点,除了大数据 spark 以外,其它技能亮点初级开发应该都会,哪怕不会也能轻易学会。但就这样,很多候选人不会说,不过反过来,你说了就比别人强。然后立即引申出最近的项目,因为大多数公司会衡量 jd 技术是否在最近项目里用过。

在最近的项目里,我用到了 Spring Boot 框架,具体用到了 JPA 组件,数据库用 Oracle,最近的项目是 xx 系统,用到了敏捷开发模式,在这个项目里,我除了做 coding 外,还做过单元测试,讨论需求和详细设计等工作,并且最近的项目进度比较紧,我自己感觉还能主动加班,一起和同事们保质保量地完成项目。

在自我介绍阶段甚至也不必展开项目,因为后面你有机会详细说明,但你第一要以此进一步突出你最近的技能经验和职位介绍很匹配,第二还要以此说明你肯加班等特性(毕竟通过项目举例说明自己肯加班,比单纯说肯加班要可信得多)。

再强调下,在自我介绍阶段,只需要说明自己能胜任当前工作的要点,这些要点不需要展开,比如不必展开说明自己如何排查 OOM 异常的。而其它没和找工作没关系的,比如兴趣爱好,家庭成员,个人性格等一概不需要说。

大家在面试前,可以根据上述范例练习下说辞,不紧不慢地说这些话,估计也就需要 2 分钟,哪怕再腼腆再内向口才再不好的人,多练几遍也能说好,但如果因为没说好被面试官认为沟通能力差,就太冤枉了。

  1. 先介绍项目背景,打消面试官疑问 由于你在自我介绍阶段已经涉及到最近项目了,所以面试官一定就会再问下去。不过不管怎么样,面试官总会问及你最近的项目,所以你总是有机会通过介绍项目经验来验证自己能胜任这份工作。

当面试官让你介绍下最近的项目时,你可以先大致先说下项目背景。因为有些候选人在简历上的项目经验看上去就像学习项目(其实我知道不少项目经验还真是),但你可以通过如下的说辞,证明这个项目是商业项目经验。

我最近是在 xx 公司(以此突出商业项目)里做了 xx 项目,这个项目的客户方是 xx,已经上线(但如果是 web 项目面试官大概率会去核对)。这个项目用到了敏捷开发模式(提一下别展开,算抛出个提问点), 这个项目组人员是 xx 人,做了 n 个月,我在里面做了 xx 和 xx 模块。

你这样一说,能通过项目所在公司和客户方等要素,说明这个项目不是你编的。有人会问了,如果项目真的是编的,该怎么说?这块我不管,你自己想办法说。 但你这样说之前,事先需要做好如下的功课。

  1.  了解敏捷开发模式,比如站会每个人该说什么,用 jira 管理进度,一年定好若干个发布日期,一个月发布一次等,因为你提到了,面试官大概率后继会问到。
    
  2. 如果你说的是 xx 财务系统 xx 图书馆系统等,一些资深的面试官可能会问,这块有现成的项目, 为什么你们公司还要自己开发?所以说你在准备项目描述时,不能夸张,比如把一个数据收集模块的维护项目夸张成 xx 财务系统。不过我也遇到过一些候选人,他们就说这是公司接的项目,为什么人家还要下订单做此项目他们管不着。
  3. 你一旦说了这个项目,那么面试官就会认为你真实做过,所以其中每个业务需求,比如数据从哪里收集,客户从哪个前端发请求,客户请求处理的流程,以及数据表的规模等信息,你得知道并且事先准备好回答预案,我就经常用此来确认候选人的项目是真实项目还是编的项目。
  4. 通过说项目管理工具,说明你不仅会写代码 在介绍项目背景之后,你更可以说些项目管理的工具,以此证明你在项目里还做过其它事情,不仅是仅会写代码,具体的说辞范例如下。

在这个项目里,我们用到了 maven,用 git 来管理代码,用 jira 来管理任务和 bug,用 jenkins 工具来发布。我还用过 junit 编写过单元测试,我们还用 sonar 来统计代码的测试覆盖度,我们项目经理要求,只有当“行覆盖率高于 80%”,代码才能提交。

上文提到 maven,Git 和 junit 这块不难,jira 管理 bug 和 task 这个也没什么可问,但你要事先了解下 sonar 管理代码质量的基础知识以及行覆盖率等要点,至于 jenkins 发布脚本,这个无需一般开发操心,你说下就行了。在上文里你仅仅提到的是工具,但你更要通过这些工具,来进行自我表扬。

我在使用 junit 时,不会敷衍地编写案例,而会根据真实的业务数据来编写案例,并且我还会着重考虑各种边界情况(这些哪怕初级开发也有本事做到),而且在编写代码时,我会非常注意编码规范,比

如定义变量时会让人一看就理解 ,在关键代码地方多写注释,在 if 等条件里不会写太复杂,一个方法不会写太长,或者你可以再说些其它好的编码规范。而且,一旦遇到我的 bug,我会第一时间跟进, 并会和相关对应的人一起解决掉。 上述文字,虽然说是自卖自夸,但由于你结合到了项目,所以面试官不会有违和感。而且你这样一说,面试官就会认为你除了写代码外,其它开发项目的综合能力也很强。

不过千万注意,介绍项目经验的目的主要是证明技能的匹配度,所以上文提到的“介绍项目背景”和 “说明项目用到的工具”以及“自卖自夸”的说辞,你别说太多,可以通过练习把它们控制在 1 分钟以内。

  1. 用 Spring Boot 项 目举例,说明你的技术基本面 然后就需要介绍项目里用到的技术,哪怕你的亮点说辞再说,你也得保证技术的基本面说辞,这里就用当前 Java 项目的主流框架 Spring Boot 为例,告诉大家如何以此展示 Java 开发的基本功。

我们这个项目用到了 Spring Boot 框架,其中用 JPA 连接 Oracle(或 MySQL 等)数据库,在控制层里用到了@RequestMapping 注解来编写业务处理方法。在业务代码里,是用@Autowired 注解来以 IOC 的方式引入类,还用到了@Service 和@Component 注解。当我们从数据库里拿到数据后,会用包含@Entity 和@Table 注解的模型类来映射数据。在这个项目里,我们还用到了@Transactional 注解来定义事务,这个注解是作用在 Service 层上的,在这个项目里,我们还用到多个 Java 集合类和异常处理类。

通过上文的范例,大家应该可以很好地展示 Spring Boot 的基本技术面,其实对大多数 Java 初级开发而言,日常工作也就是用 Spring Boot 写一些增删改查的工作,所谓根据现有的业务再编写新的业 务,所以上述说辞足够了。但是由于你提到了 Spring Boot,所以在提问阶段,面试官大概率会问及如下的问题。

@Service 和@Component 注解的差别? 各种 Restful 请求格式以及各种 http 请求返回码。 @Transactional 事务里的事务隔离级别和事务传播机制概念。 Spring 依赖注入概念和@Autowired 的用法。 Spring Bean 的生命周期。 甚至可能还会问 Spring Boot 启动流程以及底层源码。

  1. 用实例说明你在内存调优方面的经验 当你介绍好基于 Spring Boot 的技术基本面以后,你还可以进一步说明诸多亮点,这里就先给出结合项目展示内存调优方面说辞的范例。

(之前是介绍项目技术基本面,比如 Spring Boot)在本项目里,我会非常注意内存的使用性能,并在项目里有过排查分析 OOM 的项目经验,我在编码的时候,也会非常注意内存性能,同时我也了解过 JVM 内存结构以及 GC 算法。

不管怎么组织语言,这方面你需要突出四点: 第一强调你有内存调优意识, 第二说明你有排查 OOM 的经验, 第三说明你写代码的时候也会注意内存性能, 第四说明你还了解 JVM 结构和 GC 流程的知识。

但这里依然要强调,你尚在项目介绍阶段,你说明要点即可,别展开,如果这里你展开说明内存调优的做法,面试官会认为你思路不清晰,不过既然你提到了,面试官可能立即就打断你介绍让你详细说明,或者你介绍完项目后会继续问,总之你是有机会详细展示内存调优亮点技能了。

如果面试官事后详细问你排查 OOM 经验细节时,你可以这样回答。

在测试环境,我们经常会收到内存使用率高于 70%的告警,(至于怎么告警的相关设置,你可以看下new relic,如果你是初级开发,甚至不需要掌握相关经验),收到告警后,我第一通过 dump 命令观察当前内存镜像(你得熟悉下 dump 命令以及 dump 文件的打开方式和 dump 文件的内容),第二通过日志观察是哪个方法抛出的,最后发现是因为在订单模块(或其它模块)一个 JDBC 连接对象没关闭(或一个大的 Hashmap 对象用好没 clear),所以导致了内存无法回收,发现问题后对应回收掉即可。

这里你结合的业务(比如订单模块)来说明,然后面试官再问 dump 细节时,你再说下 dump 文件的结构,这就行了。

如果面试官再问你如何在代码里注意内存性能,你可以这样说:

在写代码时,我会非常注意,在 try…catch…finally 从句里关闭或释放 Connection 和大的集合,一些大的对象用好以后,我会及时把它们设置成 null,以此提升它们的回收时间,在 for 等循环里,我不会频繁地操作 String 对象,因为会产生大量内存碎片。同时,我会非常谨慎地使用 finalize 方法(事先看下),因为这可能会导致对象无法回收。 其实说上这四点就够了, 如果你自己感觉有本事,可以在了解强引用、弱引用和软引用的前提下在说如下的点,这很值钱。 在数据同步的业务场景里,我用到了弱引用(或软引用),以此提升数据对象的回收时间。

如果面试官问你 JVM 内存结构及 GC(垃圾回收)流程,这其实是理论问题,网上资料太多,靠背就行了,所以这里就不再详细说了。但话说回来,GC 流程以及 JVM 体系结构这方面的理论知识,这属于面试常用考点,你准备下不吃亏。

  1. 展示你在数据库调优方面的经验 很多候选人其实不会在面试中展示内存调优方面的经验,而你如果按照上述说辞,一方面在介绍项目经验时引出要点,另一方面在后继交流中很好地说明细节,那么可以这样说,你就超越了很多竞争 者,甚至说句不该说的话,一些初级开发甚至还能以此充实自己的项目经验。

在介绍项目经验时,如果单纯展示内存调优方面的经验,可能说服力不强,这里再给出用实际说明数据库调优技能的范例。首先你可以在介绍项目时,适当地通过如下的说辞来引入要点。

在本项目里,我参与过数据表设计,所以会考虑用反范式来避免因大表关联而导致的性能损耗,同时我们会合理地设置索引以提升数据库的访问性能,并且我还有过用执行计划优化语句的经验,同时在使用事务的时候,我会非常注意配置事务隔离级别和事务传播机制,以免造成锁表。

同样,在项目介绍阶段,数据库调优方面的说辞不需要展开,给出点即可,由于你提到了,所以面试官在后面大概率会问到。

不过你在面试前,需要准备如下的技能(其实这些技能属于数据库基本点,你不准备反而会有问题)。

1 你去看下索引的数据结构(比如 B+树),建索引的语句,索引的种类,尤其是复合索引以及对应的回表和最左匹配原则。 2 事先看下索引的正确用法,以及哪些情况下用不到索引,比如 where a != 'xx’可能就用不到。 3 索引的代价(会占硬盘,以及大批量读写时会重建索引,所以性能慢),以及在小表里,无需建索引。 4 执行计划的概念,以及通过执行计划排查慢 sql 时该注意的点(避免全表扫描,设置合理的关联表方式等)。 5 三范式和反范式相关概念,因为你提到了。 6 事务隔离级别里的脏读等概念,以及事务传播机制,尤其地,你要具体说出你项目里用的是哪个。

  1. 总结前文说辞 这里根据上文给出的要点,整理下介绍项目经验的说辞。

(介绍项目背景)我最近的项目是在 xx 公司做的 xx 社区爱心超市项目(项目别说太大),客户方是 xx 公司,项目组里是 6 个人,开发了八个月,最近还在开发,在其中我做了删除和更新订单模块的业务 (如果是在校阶段做的项目需要再加上如下的话),这个项目是我从大三开始,外面找 xx 公司做的兼职项目,做项目的时候我每月还能拿到钱。

(介绍项目技术,JD 上列的尽量说全)这个项目用到了 Spring Boot 框架,数据库是 Oracle,用 JPA 连接 Oracle(或 MySQL 等)数据库,在控制层里用到了@RequestMapping 注解来编写业务处理方法。在业务代码里,是用@Autowired 注解来以 IOC 的方式引入类,还用到了@Service 和 @Component 注解。当我们从数据库里拿到数据后,会用包含@Entity 和@Table 注解的模型类来映射数据。在这个项目里,我们还用到了@Transactional 注解来定义事务,这个注解是作用在 Service 层上的,在这个项目里,我们还用到多个 Java 集合类和异常处理类。

(介绍项目管理工具)这个项目用到了敏捷开发模式,用 Maven 框架,用 sonar 管理质量,用 git 管理项目版本,用 jenkins 发布,用 logback 打日志, 我在这个项目里,除了写代码外,还有用 Junit 进行单元测试的经验。我们还用 sonar 来统计代码的测试覆盖度,我们项目经理要求,只有当“行覆盖率高于 80%”,代码才能提交。

(最后抛出亮点)在这个项目里,我用到了单例和工厂设计模式,在这个项目里,我做过 JVM 调优和数据库调优的的事情,在做项目时为了加深理解,我还看了 ArrayList 快速失效的底层代码,也看过

HashMap 关于 HashCode 以及 put 和 get 部分的底层源码。这个项目后期进度比较紧,我也能通过加班等手段保证项目能正常上线,而且一旦遇到线上问题,我也会尽量参与并解决。

大家在面试前,可以根据上述范例合理地准备说辞,次序和内容上可以做调整,但包含的几个要素尽量都说全。如果可以,事先要多练习几遍,确保能足量地抛出你的相关技能和亮点。

不过千万注意,在介绍项目时,对具体的点,比如内存调优,你点到为止,别展开,否则的话,面试官一定会认为里思路不清晰。总之在介绍项目时,需要遵循的要点是:第一要尽可能全面地说明你用过 JD 上的技能,第二要抛出亮点话题,等待面试官提问。

  1. 准备项目说辞时,更可以准备后继面试官的问题 其实大多数面试官在面试前,有可能还在调试代码,或者还在开会,也就是他们事先是不会准备面试问题的。所以当你在自我介绍和介绍项目经验时抛出亮点后,他们往往会随口接着这个话题问下去, 也就是说,只要实现准备好,你是知道面试官会问什么的。

根据上文给出的项目介绍说辞,你提到了敏捷开发,Spring Boot 框架,数据库调优,内存调优,设计模式,junit 以及项目管理软件,java 集合以及底层源码等话题,在前文里也给出了一些面试官可能问到的问题以及对应的准备要点,除此之外,大家还可以做如下的准备。

理解单例模式,尤其是双重检查的单例模式,要会写代码,并给出一个项目使用场景,比如某工具类需要用单例的方式创建。同样地,对于工厂模式也准备一个使用场景,这更好办,比如 xml 解析器类,是用 Factory 模式创建的。
在理解的基础上,背诵并会默写 ArrayList 快速失效的底层代码,面试时,当面试官顺着你给出的言辞继续提问时,你可以边写边说,同时也可以准备 HashMap 以及 Hashcode 的底层源码。

去看下 JVM 内存调优和垃圾回收相关理论,最好再看下强引用,弱引用和软引用理论。

这里请注意,你在自我介绍和项目介绍时,可以通过抛出亮点来引导面试官提问,但同时,你更需要准备其它常见问题,因为有些面试官依然会问其它问题。对此大家可以在 Spring Boot 框架,数据库和 Java 核心开发这三个方面多刷些面试题,甚至可以多准备些笔试题。那么这样一说,你抛出亮点有什么好处呢?

第一,真有些面试官在顺着你言辞提问后,发现你回答很好(因为你事先准备过,想不好回答都难),然后他们就不再提问了。 第二,面试官多少会问及些你提到的亮点,这样你就能最大程度避免面试官问及你不熟悉的点。 第三,其实大多数初级开发在项目中只是做增删改查,但一方面你根据上文描述准备了若干常稳点, 另一方面你能很好证明你熟悉设计模式,有 JVM 和数据库调优经验,那么你就有可能在面试中表现比其它人强。

总之,你

标签: sub连接器78p影响fpc连接器性能的四因素fpc补强连接器交流接触器自带热继电器14r继电器输出双重pid3os3do安全继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台