面试复盘(北京某小公司)

技术面试经验分享:Redis、线程池与大数据风控项目的考量,
面试者分享了关于项目中使用Redis缓存验证码、线程池优化邮件发送、Kafka用于系统通知、以及HTTPS安全性的讨论,反思了项目理解的不足和未来准备提升的地方,包括算法和编码能力的考察。

北京某小公司一面复盘

先和面试官做了自我介绍,然后他问了我的一些基本情况。然后开始问项目

问:谈一谈项目中有哪些亮点?

我用redis来做验证码的缓存,当用户登录时,刷新得到验证码,验证码会被放到redis当中,key为生成的随机字符串,value即为言验证码内容,在cookie当中也会存储这个字符串,当用户提交表单时,后端会取到cookie的值,然后从reids缓存中根据key取到验证码的值进行判断即可验证验证码是否正确。

问:为什么要把key存放到cookie当中呢,session不可以吗?

可以存放在session当中,但session是存在服务器上的,因为验证码经常被刷新,所以这可能对服务器来说经常刷新不太友好,所以把它存放在cookie当中

问:为什么还要把验证码存放在redis当中呢?直接存放在cookie不可以吗?

因为验证码存放在cookie当时是可修改的,那么就是不安全的,如果用户修改了cookie中验证码的值就会出现错误。

问:那我修改cookie当中的key,不就跟修改验证码一样吗?修改之后你可能在redis当中找不到

。。。确实是这样(当时直接懵了,面完之后想了想这真是一个大问题,看来项目还是没研究透,还需要自己延申思考)

问:还有其他亮点吗?

采用线程池来异步发送注册激活邮件,这可以大大提高响应速度,也不会造成主线程的堵塞。

问:那这个线程是怎么创建的呢,手动创建吗?

这个是由线程池作为管理的,然后我说了说线程池创建函数的七个参数代表什么含义,以及线程池的执行原理。

问:深入问一下,那任务结束后,这些线程(非核心线程)如何回收呢?线程池如何实现的?

这个是由KeepAliveTime参数决定的,他决定了非核心线程的存活时间,比如说我们设置为60s,非核心线程空闲后,60s之后就会给线程池终止。(面试官点了点头)

问:项目中kafka是怎么用的?

主要用到系统通知,当有用户点赞,评论,关注时,就会触发这个机制,生产者负责把时间消息放到队列之中,消费者,也就是被通知人会从消息队列当中获取消息,并把消息落到数据库当中。然后读取数据库将消息发给指定用户。

问:点赞,关注这些你是怎么设计的?

这个是用到了redis作为缓存,因为他有这个持久化机制,而不需要把数据再放到数据库当中,每次都要读取,这样会很消耗时间,因为redis是基于内存操作的,所以速度很快。点赞的key设计为一个字符串,主要是加上当前实体类型,帖子为1,评论为2,再加上实体的id,当用户点赞时,数量加1,再次点赞,减1。关注就是运用到这个有序集合,某个实体的粉丝设计的key的字符串主要是加上当前实体的id,value为粉丝的id,score设置为时间。关注列表也类似。

问:那设想一下如果我要实现查看两个人共同关注的功能,这个场景如何实现?

运用集合的特性,做交集即可得到。

问:实现某个人发布帖子后,他的粉丝列表会收到推送,这个你会怎么做呢?

我觉得可以用kafka吧,当贴子发布后,他的粉丝就是消费者,直接从里面拿取。

面试官说这个性能不太好,你这个相当于是拉的方式,最好用推(面完我查了查,可以用WebSocket来实现实时推送)

问:说一下http和https有什么区别?

http和https最大的区别就是安全性,http的建立过程较为简单,而https的建立过程涉及到了身份验证的等环节,还需要建立SSL连接,所以他的保密性更强!

问:说一下https的建立过程

。。。G,背的八股忘了。磕磕巴巴的说了一些

反问环节:

  • 公司是做什么的?
    • 主做大数据风控

面试官问我薪资要求,我说公司一般给到多少?他说本科生是最低200外加每天25的餐补,你是硕士,可以给你多申请一些,但不会到300。

感悟

项目还是琢磨的不够,八股文有的地方记得也不扎实,需要继续努力!下面会有二面,说要考考算法,看看编码能力(真是搞不懂小公司都面上算法了?)

记于——2024年3月19日23:30

<think>好的,我现在需要处理用户关于获取2025年北京Java开发岗面试经验的需求。首先,用户提到了系统级指令,要求所有数学公式用$...$格式,独立公式用$$...$$,但根据用户的问题内容,可能不太需要数学公式,不过还是得注意如果有的话。然后要确保中文回答,生成相关问题,引用正确。 用户的问题是想了解2025年北京Java开发岗的面试经验、总结、常见问题和技巧。现有的引用内容里有关于Java面试的知识点解析、面试准备、简历优化、JDK、JRE、JVM的解释,以及京东的面试经验。我需要结合这些引用来组织回答。 首先,我需要确定用户可能关心的内容。2025年的情况可能会有变化,但核心知识点如Java基础、JVM、框架、算法等可能仍然重要。引用中的资料提到了技术硬实力、简历优化、软实力提升,这些都可以作为回答的结构部分。 接下来,我需要确保回答结构清晰,分点说明,帮助用户逐步解决问题。可能需要分为准备阶段、技术准备、项目经验、软实力、公司研究、模拟面试等部分。同时,引用中的内容如引用[1]提到的技术知识点解析,引用[2]提到的简历优化和软实力,引用[5]的JDK/JRE/JVM区别,引用[3][4]的京东面试经验可以作为例子。 然后,常见问题部分需要列出可能被问到的问题,如JVM原理、集合框架、并发编程、框架原理等,引用中的资料可以提供支持,比如引用[5]的JDK部分可以用于解释基础问题。 技巧部分可以包括提前到场、逻辑表达、主动提问等,引用[2]中的软实力提升和面试经验总结可以作为参考。 最后,生成的相关问题需要与用户的问题相关,比如技术趋势、大厂面试特点、算法准备、项目经验等,确保问题有针对性,并且参考已有的引用内容。 需要检查是否有数学公式需要处理,但根据当前问题,可能不需要,所以可以忽略。确保所有引用标识正确,比如引用[1]、[2]、[5]等放在对应的建议后面,自然添加。 可能还需要注意用户提到的2025年,虽然资料引用是之前的,但可以建议关注技术趋势,如云原生、AI工程化,引用中虽然没有直接提到,但可以结合现有内容合理扩展。 总结下来,回答的结构大概是: 1. 面试准备阶段:技术复习、项目复盘公司研究 2. 常见技术问题:基础、JVM、框架、算法等 3. 高频问题举例:结合引用内容 4. 面试技巧:软实力、模拟面试等 5. 相关问题生成 需要确保每个部分都有引用支持,比如技术复习引用[1][2],项目经验引用[3][4],JDK/JRE/JVM引用[5],技巧引用[2][3][4]等。 现在开始组织内容,确保符合用户要求的结构,引用正确,语言自然。</think>### 2025年北京Java开发岗面试经验与技巧总结 #### 一、面试准备阶段 1. **技术复习与拓展** - **Java核心基础**:重点复习集合框架(如`HashMap`原理)、多线程与并发编程(`synchronized`、`ReentrantLock`)、JVM内存模型与垃圾回收机制(引用[5]中提到的JDK/JRE/JVM区别)[^5]。 - **框架与中间件**:深入理解Spring Boot启动流程、微服务架构(如Dubbo或Spring Cloud)、消息队列(Kafka/RocketMQ)的使用场景[^1]。 - **算法与数据结构**:刷题需覆盖动态规划、二叉树遍历、链表操作等,可参考LeetCode高频题目[^2]。 2. **项目经验复盘** - 突出项目中复杂问题的解决方案,例如高并发场景下的性能优化或分布式事务实现。建议使用STAR法则(情境、任务、行动、结果)描述项目亮点[^3][^4]。 3. **公司研究与岗位匹配** - 针对目标公司(如京东、字节跳动等)的技术栈提前调研。例如,京东可能关注电商场景的解决方案,金融类公司重视数据一致性与安全性。 --- #### 二、常见技术问题示例 1. **基础问题** - *“HashMap的扩容机制是什么?如何解决哈希冲突?”* - *“Java中synchronized和ReentrantLock的区别?”* [^5] 2. **JVM与性能调优** - *“如何分析线上服务的Full GC频繁问题?”* - *“JVM内存模型中,方法区与堆的区别?”* 3. **框架与设计模式** - *“Spring AOP的实现原理?动态代理和CGLIB的区别?”* - *“如何设计一个分布式ID生成器?”* [^1] --- #### 三、面试技巧提升 1. **软实力展现** - **沟通逻辑**:回答技术问题时采用“总-分-总”结构,例如先概括原理,再分点阐述细节,最后总结应用场景[^2]。 - **主动引导**:若被问到不熟悉的问题,可关联已掌握的知识,如:“我对该技术了解有限,但类似的场景中我采用过XX方案……”[^3]。 2. **模拟面试复盘** - 通过Mock Interview练习高频题目,录制回答过程并优化表达节奏。引用京东面试经验中提到的“四面”流程,提前适应多轮压力面试。 3. **简历优化建议** - 使用量化指标描述成果,例如:“通过线程池优化,接口响应时间降低40%”。 --- #### 四、2025年技术趋势关注 - **云原生与Serverless**:熟悉Kubernetes、Service Mesh等技术。 - **AI工程化**:了解Java在机器学习模型部署中的应用(如DJL框架)。 - **数据湖与实时计算**:学习Flink、Iceberg等工具的原理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无所畏惧的man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值