秀逗嘛嘚 level
获赞
53
粉丝
15
关注
5
看过 TA
451
中国科学技术大学
2025
Java
IP属地:上海
2025/Java后端
私信
关注
一笑而过2222:一、线上一面(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. 数据库索引失效场景及行锁升级情况 - 答案: - 索引失效场景:索引列上进行四则运算;索引列使用错误的索引类型;索引列上的字符串使用未设定好的字符串格式。 - 行锁升级情况:未提及明确的升级条件,可参考一般数据库知识,如当锁冲突严重、需要对表进行整体操作等情况下可能升级为表锁。
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务