关注
一、线上一面(9.13)
1. 反射
- 答案:反射是Java语言特性,允许程序在运行时动态获取类信息及创建对象、调用方法和访问属性等。可通过 Class.forName("类的全限定名") 获取 Class 对象,再用其进行如 newInstance() 创建实例、 getDeclaredMethods() 获取方法等操作。
2. 常见的设计模式
- 答案:常见设计模式包括创建模式(单例、工厂、抽象工厂等)、结构模式(代理、装饰器、桥接等)和行为模式(观察者、策略、模板方法等)。例如单例模式保证一个类只有一个实例并提供全局访问点,可通过饿汉式或懒汉式实现。
3. 线程池
- 答案:线程池由管理器、工作队列、工厂和拒绝策略等组成。核心是预先创建线程放池中,有任务时从池取线程执行,若线程忙则任务放队列等待,线程完成任务回池。可避免频繁创建和销毁线程开销,提高性能和资源利用率。
4. 排序算法相关
- 答案:
- 冒泡排序:通过相邻元素比较交换,将最大(或最小)元素“冒泡”到一端。从第一个元素开始,比较相邻两个元素,顺序不对就交换,一轮后最大元素到最后位置,对剩下元素重复。
- 插入排序:将待排序元素插入已排序部分合适位置。从第二个元素开始,与前面已排序元素依次比较,比前面小就将前面元素后移,直到找到合适位置插入。
- 选择排序:在未排序数组中选最小(或最大)元素,与未排序部分第一个元素交换位置,一轮后最小元素到第一个位置,对剩下元素重复。
- 快速排序:选“枢轴”元素将数组分两部分,左边小于枢轴,右边大于枢轴,对两部分分别快速排序。选第一个元素为枢轴,从两端向中间移动,将小于枢轴元素移到左边,大于枢轴元素移到右边,两端相遇时枢轴位置确定,对两部分分别排序。
- 归并排序:将数组分成两部分,分别排序后合并成有序数组。将数组分成左右两部分,对两部分分别排序,用两个指针分别指向两部分第一个元素,比较大小,将较小元素放入新数组,移动指针,重复直到元素都放入新数组。
5. HashMap,ConcurrentHashMap相关
- 答案:
- HashMap插入过程:先计算键哈希值(通过 hashCode() 及扰动函数),根据哈希值确定桶位置。桶空则直接插入;桶不空且只有一个键值对且键相等则更新值;桶不空且是链表(或红黑树,链表长达到一定阈值且数组长达到64时转换)则遍历找键相等键值对更新值,否则插入末尾。
- ConcurrentHashMap插入过程:类似HashMap先算哈希值确定桶位置,采用分段锁机制,将哈希表分成若干段,每个段有自己的锁,插入时确定所属段,获取锁后插入,完成后释放锁。
- HashMap底层是数组+链表(或红黑树)结构,数组长为2的幂次方,链表长达到8且数组长达到64时转换为红黑树。
- ConcurrentHashMap底层是分段锁结构,由若干个段组成,每个段类似小型HashMap,底层也是数组+链表(或红黑树)结构。
6. ioc和aop
- 答案:
- ioc(控制反转):核心是将对象创建和管理控制权从程序转移到容器(如Spring容器)。传统程序自己创建和管理对象,ioc模式下由容器根据配置文件或注解等创建和管理。
- aop(面向切面编程):核心是将横切关注点(如日志记录、安全检查、事务管理等)从业务逻辑中分离出来,以独立切面形式处理。如应用中很多业务逻辑方法需日志记录,有aop可将日志记录作为切面,通过配置文件或注解实现对所有业务逻辑方法的日志记录。
7. redis线程模式及速度原因
- 答案:redis采用单线程模式(单线程处理核心业务逻辑,有辅助线程处理其他任务)。快的原因包括数据结构简单(使用字符串、列表、集合、哈希表等)、内存操作(主要在内存中,避免磁盘I/O延迟)、事件驱动(有事件发生才处理,避免不必要等待和资源浪费)。
8. 链表插入排序
- 答案:定义已排序链表头节点(初始为空)。遍历原始链表,若已排序链表为空,将当前节点作为头节点;否则从头节点开始比较,若当前节点值小于头节点值,插入头节点之前;否则继续找合适位置,直到找到节点值大于当前节点值,插入该节点之前。最后已排序链表是原始链表排序结果。
二、线下二面(9.20,合肥)
1. redis宕机怎么办
- 答案:首先故障诊断,查看日志文件了解原因(可能是内存不足、硬件故障、软件冲突等)。针对原因处理,如内存不足增加内存、优化策略;硬件故障更换设备;软件冲突解决冲突。恢复时考虑用备份数据恢复,无备份数据根据业务需求和实际情况采取不同方法,如重新创建部分数据。
2. 接口设计原则和安全性保证
- 答案:
- 接口设计原则:单一职责(一个接口负责一项功能)、可扩展性(便于添加新功能)、简单性(设计简单明了)、稳定性(保持稳定,避免频繁修改)。
- 保证安全性方法:身份验证(用户名和密码、数字证书等)、授权(根据身份给予不同授权,限制访问权限)、加密(对传输数据加密,防止窃取)、完整性检查(对传输数据完整性检查,防止篡改)。
3. 一个用户同时登录两台设备处理方法
- 答案:在服务器端设置用户登录状态表,记录登录状态和设备信息。当一个用户在一台设备上登录时更新表,记录登录设备信息和时间。当同一用户在另一台设备上登录时,检查表,发现已有登录则发送退出登录指令给已登录设备,同时更新表记录新登录设备信息和时间。
4. 数据库表的设计原则
- 答案:设计原则包括第一范式(表每行具唯一性,每列基本数据类型,不含其他列内容)、第二范式(满足第一范式且每列与主关键在于逻辑上有联系,不与主关键在于其他列上有联系)、第三范式(满足第二范式且每列与主关键在于逻辑上有联系,且不与其他列在逻辑上有联系,除非通过主关键在于间接联系)、节本原则(避免复杂表结构,保持简单明了)。还需考虑索引设计,合理设置索引提高查询效率。
5. qps和tps的区别
- 答案:qps(每秒查询数)指每秒能处理的查询请求数量,用于衡量系统查询处理能力;tps(每秒事务数)指每秒能处理的事务数量,一个事务是完整操作序列,可能包括多个查询操作,用于衡量系统事务处理能力。
6. 数据库索引失效场景及行锁升级情况
- 答案:
- 索引失效场景:索引列上进行四则运算;索引列使用错误的索引类型;索引列上的字符串使用未设定好的字符串格式。
- 行锁升级情况:未提及明确的升级条件,可参考一般数据库知识,如当锁冲突严重、需要对表进行整体操作等情况下可能升级为表锁。
查看原帖
9 1
相关推荐
牛客热帖
更多
- 1... 都在找Agent开发,我整理了80道相关的Agent开发面试题。8307
- 2... 学院本春招逆袭年包25w5250
- 3... 腾讯后端复试面经3984
- 4... #美团笔试#不知道为什么算法题第一题只能通过15%的测试用例. 另外, 大模型的基础知识太差了, 很多知识点都不知道3165
- 5... AI时代,技术er的三大“职业单选题”3129
- 6... 3.26 美团后端暑期一面3079
- 7... 27后端暑期实习-字节-中国广告与交易(已OC3030
- 8... AI应用开发求职心得分享,怎么走才可以轻松上岸?3005
- 9... 快手后端-Java开发二面面经2877
- 10... 携程后端二面2848
正在热议
更多
# 一张图晒出你司的标语 #
4481次浏览 78人参与
# 找AI工作可以去哪些公司? #
10248次浏览 328人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15803次浏览 230人参与
# 你的实习产出是真实的还是包装的? #
20992次浏览 346人参与
# 从事AI岗需要掌握哪些技术栈? #
9936次浏览 403人参与
# 春招至今,你的战绩如何? #
68315次浏览 605人参与
# 米连集团26产品管培生项目 #
13515次浏览 286人参与
# AI面会问哪些问题? #
29294次浏览 644人参与
# 你做过最难的笔试是哪家公司 #
36331次浏览 325人参与
# 中国电信笔试 #
32423次浏览 302人参与
# 金三银四,你的春招进行到哪个阶段了? #
22619次浏览 284人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
341277次浏览 2176人参与
# 同bg的你秋招战况如何? #
212269次浏览 1121人参与
# 哪些公司真双非友好? #
69855次浏览 289人参与
# 如何准备秋招 #
78327次浏览 868人参与
# 阿里笔试 #
179551次浏览 1324人参与
# 应届生被毁约被毁意向了怎么办 #
63368次浏览 305人参与
# 机械人避雷的岗位/公司 #
62728次浏览 393人参与
# 小马智行求职进展汇总 #
25151次浏览 80人参与
# 第一份工作一定要去大厂吗 #
15352次浏览 129人参与
# 担心入职之后被发现很菜怎么办 #
291444次浏览 1210人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26336次浏览 310人参与
查看7道真题和解析