关注
一、线上一面(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. 数据库索引失效场景及行锁升级情况
- 答案:
- 索引失效场景:索引列上进行四则运算;索引列使用错误的索引类型;索引列上的字符串使用未设定好的字符串格式。
- 行锁升级情况:未提及明确的升级条件,可参考一般数据库知识,如当锁冲突严重、需要对表进行整体操作等情况下可能升级为表锁。
查看原帖
2 1
相关推荐
许愿Offer114:等+1,先许愿
点赞 评论 收藏
分享
牛客热帖
- 1... 大四,双非二本,求指教,目前有一个offer但是一个月工资只有600要不要去啊4446
- 2... 西安荣耀嵌入式oc4012
- 3... 【发帖有奖】新活动来啦,发帖评公司,最高可得100元京东卡~3935
- 4... 3个月前的我未免对秋招过于乐观了3859
- 5... 大厂们也算是卷起来了。。3592
- 6... 开奖了,A到了398,000!3291
- 7... 挑战全网最孝手孝子3210
- 8... 数字马力 offer 啦!3181
- 9... 求职银行的宝子们,最新的银行笔试题已公开,免费刷!3149
- 10... 好消息是早就oc了,坏消息是一直没开奖2940
正在热议
# 晒一晒我的offer #
9496617次浏览 103765人参与
# 你的秋招第一场笔试是哪家 #
37789次浏览 533人参与
# 签约/解约注意事项 #
298585次浏览 1875人参与
# OPPO求职进展汇总 #
541282次浏览 4437人参与
# 非技术er求职现状 #
20069次浏览 186人参与
# 我的实习求职记录 #
5933897次浏览 82666人参与
# 你想留在一线还是回老家? #
7367次浏览 155人参与
# AI了,我在打一种很新的工 #
18809次浏览 424人参与
# 大疆求职进展汇总 #
393274次浏览 2830人参与
# 许愿池 #
201716次浏览 2483人参与
# 通信硬件公司评价 #
80509次浏览 354人参与
# 设计人如何选offer #
37668次浏览 464人参与
# 工作给你带来了哪些职业病 #
8032次浏览 96人参与
# 人生第一个10万你是多久存到的? #
17003次浏览 206人参与
# 运营来爆料 #
9898次浏览 168人参与
# 安利/避雷我的岗位 #
369628次浏览 4503人参与
# 面试体验感最好的是哪家? #
74198次浏览 730人参与
# 设计人的面试记录 #
70833次浏览 926人参与
# 选了这个offer,你有没有后悔? #
372469次浏览 2944人参与
# 如何判断面试是否凉了 #
2464002次浏览 30653人参与