logo资料库

一线互联网大厂完整Java面试题.pdf

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
JD Java 工程师面试题 一,Java 基础 ü Static 方法是否能被覆盖? ü 集合不用泛型会造成什么问题?比如 List list = new ArrayList(); ü Java 泛型中 extends 和 super 的用法? ü ü 系列化 IO 字节流和字符流区别? u Serializable 和 Externalizable 区别? u serialVersionUID 不定义有什么问题? ü NIO? ü sleep()和 wait()方法区别? ü 为什么等待和通知是 Object 类而不是 Thread 中声明的? ü 为什么 Java 中 wait 方法需要在 synchronized 的方法中调用?(wait 和 notify 方法之间的任何潜在竞 争条件) ü 为什么 Java 中不支持多重继承?(钻石问题) ü 为什么 Java 不支持运算符重载?(清晰、避免混乱、JVM 复杂性) ü 为什么 String 在 Java 中是不可变的?(对象池、Map 键、安全性) ü 为什么 char 数组比 Java 中的 String 更适合存储密码?(String 不变) ü 如何使用双重检查锁定在 Java 中创建线程安全的单例? ü synchronized 和 volatile? ü 同步方法和同步代码块区别? ü Lock 和 synchronzied 区别? ü Java 中偏向锁,自旋锁,轻量级锁,和重量级锁? ü 无锁化编程的途径有哪些? ü Java 线程池 corePoolSize, maximuPoolSize, workQueue 的含义? ü 如何结合业务场景和机器设置合适的线程池大小? ü 同步器:Semaphore,CyclicBarrier,CountDownLatch,Exchanger? ü Java 显示锁和隐式锁区别? ü 什么是线程上下文切换?(存储和恢复 CPU 状态的过程,它使得线程执行能够从中断点恢复执行) ü 多线程最佳实践? l 给线程取有意义的名字 l 避免锁定和缩小同步范围 l 多用同步类少用 wait 和 notify l 多用并发集合少用同步集合 ü 强引用,软 引用,弱引用? l 强引用:主动放,才回收 l 软引用:内存缺,可回收,Get 可能为 null
l 弱引用:GC 被回收,Get 可能为 null final 的变量不变的是引用还是对象? ü HashMap 实现原理?在非线程安全的情况使用 HashMap 会造成什么问题? ü ConcurrentHashMap 原理? ü ThreadLocal? ü 遇到过什么 OOM 或 SOF(StackOverflow)? ü ClassLoader 继承关系和过程? ü JVM 模型? ü ü Java 实现多态的机制? ü 两个对象 equasl 为 true,却拥有不同的 hash code? ü 深克隆和浅克隆区别? ü 数据库乐观锁和悲观锁? ü SSL? ü Java 程序性能优化? ü ü 开发会遵循那些编码规范? jstack,jstat,jmap 用法?怎么使用 jstack 侦测机器 CPU 飙升的问题? 二,框架 ü Spring Aop? ü 如何在系统启动后执行一个 bean 的方法? ü 如何定制 Spring 中 bean 初始化的过程? ü 如何自定义 Spring 标签? ü 自定义的实例化、初始化、依赖装配、依赖检查等流程? ü Netty 原理?和高性能原理? l 逻辑架构? l 零拷贝 l 高效的并发编程? ü 消息队列的使用场景? ü Redis 数据结构,持久化,集群和事务? ü Redis 单线程为什么并发能力那么强? ü ZooKeeper 使用场景?选举算法? 三,设计模式和原则 ü 单一职责,里氏替换,依赖倒置,接口隔离,迪米特,开闭原则? ü 设计模式:模板模式,适配器,策略模式等? ü 继承和组合区别?
四,分布式 ü 一致性哈希? ü Dubbo?框架如何扩展(微核+插件),API 和 SPI 区别? ü BASE 和 CAP? ü 分布式事务? ü 负载均衡技术? ü 如何构建一个高并发,高性能,高扩展性的系统? ü 如何应对类似秒杀抢红包瞬间高并发的场景? 五,数据库 ü MySQL 中 myisam 和 innodb 区别? ü MySQL 的数据如何恢复到任意时间点?(全量和增量 binlog,先恢复在回放) ü MySQL 数据库设计和使用准则? l 尽量不在 DB 做运算,复杂运算移到程序中 l 主键设计(INT 主键自增,和 B+树叶子节点顺序一致,效率最高) l 注释,禁止存储过程,视图,触发器等 l 禁止存储大文件 l 定义为 NOT NULL 并提供默认值 l WHERE 条件的属性上使用函数或者表达式 l 禁止负向查询,以及%开头的模糊查询 l 不要使用 IS NULL,IS NOT NULL l UNION ALL 优于 UNION l 考虑使用 limit N,少用 limit M,N ü MySQL explain 和 profile 用法? ü MySQL 复制原理和流程?(dump,IO,SQL 线程) ü MySQL 中 varchar 与 char 的区别以及 varchar(50)中的 50 代表的涵义? ü MySQL 索引?B+树 ü MySQL 锁? l gap 锁,next-key 锁,以及 innodb 的行锁是怎么实现的,以及 myisam 的锁是怎么实现 l Innodb 的锁的策略为 next-key 锁,即 ecord lock+gap lock。是通过在 index 上加 lock 实现的,index 为 unique index,降级为 record lock,如普通 index,则为 next-key lock,如没有 index,则直接锁住全表。 myisam 直接 使用全表扫描 ü 如何应对数据库的瓶颈? ü 如何水平,垂直拆分? ü 数据库优化?(设计和查询优化) ü 分布式中间件? 六,代码题目 ü 给你一个日期,得出日期在当年的第几天? ü 给定一个数,判断是不是回文数? ü 用 Java 实现快速排序?
ü 用 Java 实现线程安全的任务生产者和消费者模式队列? ü 画出模板方法,策略模式,装饰者模式类图? ü 下面输出什么? int a = 1; Integer b = new Integer(1); System.out.println(a == b); ü 执行 SubClass 中 main 方法,输出什么?(父类静态代码块->子类静态代码块->父类普通代码块->父类构造方 法->子类代码块->子类构造方法) public class Parent { public Parent() { System.out.println("Parent A"); } { System.out.println("Parent B"); } static { System.out.println("Parent C"); } } public class SubClass extends Parent { public SubClass() { System.out.println("SubClass A"); } { System.out.println("SubClass B"); } static { System.out.println("SubClass C"); } public static void main(String[] args) { new SubClass(); } }
ü 最终 userList 包含哪些元素? List userList = Lists.newArrayList(“tom”, “jack”, “billy”); for (String user : userList) { If (user.startsWith(“t”)) { userList.remove(user); } } ü String username = new String(“tom”);产生几个对象? ü 用 Java 写一个死锁代码?如何避免死锁 七,开放性题目 ü 我们行业未来 3 到 5 年会有什么挑战和机遇? ü 你的学习能力如何?最近在学习什么新东西?如何学习?看过什么书? ü 做过最有成就感的事情是什么?遇到最大的挫折和问题是什么?你是怎么应对和解决挫折和问题的? ü 最近看过的书有哪些?得到哪些启发呢? ü 如何判断一个数是否存在 40 亿个整数中? ü 一共有 25 匹马,有一个赛场,赛场有 5 个赛道,最多同时可以有 5 匹马一起比赛。假设每匹马速度是稳定的, 通过马与马之间的比赛,问最少比多少场才能知道跑得最快的 5 匹马? ü 你有不限量的水,还有两个罐子,容量分别是 5 升和 3 升。请精确的称量出 4 升水。 l 先把 5 升的罐子装满,然后用罐子里的水来倒满 3 升的罐子,此时 5 升罐子中还剩 5-3=2 升水;倒掉 3 升罐子里的水,然后把 5 升罐子里 剩下的 2 升水倒入 3 升罐子,再次把 5 升罐子装满水,并用它往 3 升罐子倒水,由于把 3 升罐子装满还需要 1 升水,因此 5 升罐子里的水 量最终变成了 5-1=4 升水
分享到:
收藏