面试题day27
百度
-
实习或者自己的小项目中接触过设计模式吗?比如用过什么设计模式?
单例模式、代理模式、工厂模式
-
多态这个概念口述一下?
重写 重载
-
HashMap 和 TreeMap 区别了解吗?使用场景了解吗?说一下 HashMap 的底层实现?
HashMap无序,TreeMap有序。
HashMap覆盖了equals()方法和hashcode()方法,这使得HashMap中两个相等的映射返回相同的哈希值;TreeMap则是实现了SortedMap接口,使其有序。
HashMap的工作效率更高,而TreeMap则是基于树的增删查改。更推荐使用HashMap。
HashMap基于哈希桶实现,TreeMap是基于红黑树实现。
-
LinkedList 和 ArrayList 有什么区别?LinkedList 底层是双向链表,这个双向链表给他提供了哪些得天独厚的优势?
基于数组,需要连续内存;基于双向链表,无需连续内存
随机访问快(指根据下标访问);随机访问慢(要沿着链表遍历)
尾部插入、删除性能可以,其它部分插入、删除都会移动数据,因此性能会低;头尾插入删除性能高
可以利用 cpu 缓存,局部性原理;占用内存多
遍历o(n/2) 不会有循环链表
-
多线程的实质了解吗?如何实现线程池
单线程池、定量线程池、动态线程池、定期线程池
-
Java 线程池有哪些参数?
核心线程数、最大线程池、线程存活时间、时间单位、阻塞队列、拒绝策略、线程工厂
-
标准的 JDK 有几种方法去新建、启动一个线程?
thread runnable callable
start()
-
CPU 使用率和负载的概念了解吗?
CPU利用率:显示的是程序在运行期间实时占用的CPU百分比
CPU负载:显示的是一段时间内正在使用和等待使用CPU的平均任务数。
-
浏览器输入 www.baidu.com 到页面呈现,后台经历了哪些过程?
缓存 dns ip tcp https
-
Spring AOP 原理了解吗?如何用 JDK 原生的 API 实现自己的动态代理模式?
Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理。常用于计算接口运算时间、记录日志。
AspectJ AOP 基于字节码操作的AOP。
-
MySQL 的存储引擎有哪些?
myisam innodb
事务 mvcc 锁粒度 外键 底层实习 场景
-
索引是一个什么东西呢?
-
创建索引时要遵循哪些基本原则?
建立唯一索引。唯一索引能够更快速地帮助我们进行数据定位;
为经常需要进行查询操作的字段建立索引;
对经常需要进行排序、分组以及联合操作的字段建立索引;
在建立索引的时候,要考虑索引的最左匹配原则
不要建立过多的索引。因为索引本身会占用存储空间;
如果建立的单个索引查询数据很多,查询得到的数据的区分度不大,则考虑建立合适的联合索引;
尽量考虑字段值长度较短的字段建立索引,如果字段值太长,会降低索引的效率。 -
索引在查询时候要遵循一个最左匹配,这个最左匹配是什么情况?
-
联合索引 (a, b, c),where 条件为 a = 1, c = 2,这个索引会生效吗?b=2 and a=1呢
会,虽然不满足最早前缀原则,mysql优化
-
在 Spring 中,操作数据库时,想实现一个事务,该怎么写代码?
事务隔离级别 传播行为 异常回滚 超时时间
-
有张 Person 表,有 name 和 age 两个字段,如何找出这张表年龄第二大的人,如果人数大于 1,我们需要把人名打印出来,这个 SQL 语句怎么写?
SELECT * FROM (SELECT DISTINCT age FROM table ORDER BY age DESC LIMIT 1 OFFSET 1) AS SecondHighestage
-
Redis 做分布式锁了解吗,怎么实现的?如果有 A、B 两个线程同时获取锁,都去 Redis 中加锁,假设 A 先加锁,但是 A 比较磨叽,没加完,这时候 B 也来加锁,B 不磨叽,立马加上了锁,A 就会产生一个独占了这把锁的假象,继续执行,怎么解决?
setnx
-
Linux 了解的多吗?如何找出当前路径下 .java 文件的个数?
ls | grep .java
-
用过 Docker 吗?用自己的话说 Docker 和传统的虚拟机有啥区别?
Docker启动快速属于秒级别,虚拟机通常需要几分钟去启动;
Docker需要的资源更少,Docker在操作系统级别进行虚拟化,Docker容器和内核交互,几乎没有性能损耗,而虚拟机就差了很多;
Docker更轻量,Docker的架构可以共用一个内核与共享应用程序库,所占内存极小;同样的硬件环境,Docker运行的镜像数远多于虚拟机数量,对系统的利用率非常高;
与虚拟机相比,Docker隔离性更弱,Docker属于进程之间的隔离,虚拟机可实现系统级别隔离;
-
实习了多久?主要负责什么业务?在 JD 那边主要负责什么?
-
你感觉经过两次实习,你认为自己比较得意的技术产出是什么?
-
中间件都用什么?
补充
-
自我介绍
-
本科在哪里?没考虑考研吗?
-
挑一下你之前做过的比较有技术含量的项目讲一下吧,先介绍一下业务、再介绍一下技术架构、还有一些难点?
-
说一下你为什么要使用 Lucene?索引的是什么?需要建几个索引?标题、描述、内容的权重是一样的吗?
-
还引入了什么?答了引入 Nginx 做负载均衡,继续追问如果其中一个服务出问题怎么办,怎么保障他的高可用?
-
说一下实习的项目吧?
-
为什么配置态服务和运行态服务要分开?我在运行态服务里面把配置放到配置文件中不行吗?
-
配置态配置存在哪里?运行态服务能访问这个数据库吗?为什么要引入配置中心,不让运行态服务去查数据库呢?怎么保证数据库和配置中心的数据一致性
-
呢?数据库成功了,推送配置中心没成功怎么办?重试还不成功呢?
-
你觉得用配置中心有什么好处呢?直接在运行态读数据库不也挺好,为什么要引入配置中心呢?
-
再举一个例子,比如说有多个部门,不同的部门存的数据格式都不一样,管理的服务也不一样,他们有一些数据可能相互需要,这时候,你觉得用配置中心
-
能解决这个问题吗?
-
服务 A 的数据库改了,服务 B 怎么办?这个配置需要多个部门同时使用,所以这个变动别人需要感知到。各个部门都维护一套数据库,相互调用接口这个
-
方案好,还是都存到一个配置中心,大家互相拉取好?说一下优缺点?
-
在 Java 中,有 hashCode() 方法和 equals() 方法,当我定义一个对象时,为什么有时候要重写这两个方法?什么时候需要重写这两个方法?
维护 equals()=>hashcode()
-
你了解函数式接口吗?他有什么作用?解决了什么样的问题?
只有确保接口中有且仅有一个抽象方法
方便lambda的使用,代替匿名内部类
-
Lambda 表达式解决了什么问题?临时的什么对象?为什么创建了这个对象就可以解决问题?这个对象有什么特点?如果没有 Lambda 你怎么做呢?Lambda 写的那个表达式是干什么用的?Lambda 表达式真正的好处在哪?
-
函数式接口有什么好处?你知道 Java 里面默认的函数式接口有哪些?你用过什么方法里面,会用到函数式接口作为参数?
生产者、消费者
-
用了 Comparable 接口的排序方法和没用 Comparable 接口的排序方法有什么优点呢?
实现Comparable接口的类的对象”可以用作“有序映射”中的键或“有序集合(TreeSet)”中的元素, 而不需要指定比较器。