面经-综合面/hr面
面经-综合面/hr面
- 概述
- 1.大学期间遇到的困难,怎么解决的
- 2. 大学期间印象最深/最难忘的是什么
- 3. 大学里面担任了什么职务没?做了什么工作?
- 4. 大学最大的遗憾是什么?
- 5. 对自己的未来规划
- 6. 对自己的评价
- 7. 自己的优缺点
- 8. 对公司的认识,为什么选择公司
- 9. 对公司有什么要求没/有什么想向公司提的
- 10. 最喜欢的课程以及原因
- 11.有没有遇到一些复杂的,比如说当时你一时间没想通,然后最终一步一步把它解决的这种情况
- 12.有没有遇到一些命题或者知识点,你觉得不正确,然后去搜集资料,去证明它确实是有问题的,或者跟别人讨论之后达成了一致的经历
- 13.有没有思考过,比如HashMap为什么要先用数组,链表再用红黑树,那他为什么要这样设计,我能不能不这样设计。你有没有产生过类似的疑问?
- 14.在你的学习过程中,是什么驱动着你把事情做好
- 15.你觉得为了找到一个好工作你需要具备什么能力?或者你有没有对职业生涯、职业有过具体了解?
- 16.专业技能力哪一块你觉得学的足够好?
- 17.并发场景没处理好会遇到什么样的问题
- 18.学习技术的过程中,学习的步骤是怎么安排的,定义三个点
- 19.成长经历、实习经历中或者做项目、学术方面等,有没有从这些经历中反思,得到什么启发或者结论,最终应用到你的工作学习中去了
- 20.团队中意见不合,是怎么解决的?
- 21.当你的项目、课程与会议时间冲突,你是怎么解决的
- 22.团队合作中的优势和短板
- 23.有没有关注岗位前沿技术的发展(Java后端)
- 24.有没有对学过的知识进行复盘
- 25.有没有出现压力情况,如何解决的
- 26.遇到问题,如何解决的
- 总结
概述
本篇文章是为总结了常见综合面/hr面问的问题,本篇文章中的解答只是参考,是根据我自己总结出来的回答,希望各位铁铁在看完之后根据自己的情况写出自己的标答。最后预祝各位offer满满,如果觉得写的还行,记得点赞关注收藏哦!
1.大学期间遇到的困难,怎么解决的
(1)单点登录,第三方登录
在XX项目中,项目要求支持多种登录方式,如账号密码、手机验证码以及微信扫码登录,并且要在分布式环境下实现统一认证。这意味着我们需要整合不同的认证机制,同时确保在复杂的分布式系统中,用户认证信息能够准确、安全地传递和验证。不同登录方式所涉及的技术和流程差异较大,例如账号密码登录需要对用户输入的信息进行加密验证,手机验证码登录涉及到与短信平台的交互以及验证码的验证逻辑,微信扫码登录则需要与微信开放平台进行对接,处理授权回调等复杂流程。而且在分布式环境下,各个微服务可能部署在不同的服务器上,如何保证用户在不同微服务之间的无缝切换和认证信息的一致性是一个巨大的难题。
解决办法:
为了解决这些问题,我深入研究并采用了SpringSecurity整合OAuth2.0和JWT的方案。
首先我针对账号密码登录方式,配置了一个DetailsService,用来对比用户输入的用户名以及密码是否与数据库中一致,为了安全,我在存储用户密码的时候使用BCryptPasswordEncoder加密算法对用户密码进行加密存储。进而更安全的保护用户信息,此外,SpringSecurity提供了一系列过滤器来处理认证和授权流程我根据项目需求对这些过滤器进行了细致的定制。例如,我们调整了UsernamePasswordAuthenticationFilter的配置,使其能够更好地适应我们项目中账号密码登录的业务逻辑。我们设置了该过滤器的认证成功和失败处理器,当认证成功时,会执行一些后续操作,如生成JWT令牌;当认证失败时,会返回相应的错误信息给用户。同时,我们还对其他相关过滤器进行了调整,如ExceptionTranslationFilter,用于处理认证过程中可能出现的异常情况,确保系统在出现问题时能够给出合理的反馈。
然后为了实现第三方登录,我在微信开放平台注册应用,填写了应用的相关信息,包括应用名称、应用描述、回调地址等,然后拿到AppID和AppSecret在项目中进行配置。当用户选择微信扫码登录时,系统会引导用户到微信授权页面。用户在微信授权页面上同意授权后,微信会返回一个授权码。我们在项目中配置的OAuth2.0客户端会立即使用这个授权码向微信授权服务器请求获取访问令牌和用户信息。然后我们对返回的访问令牌和用户信息进行验证和解析,确保其准确性和完整性。
在用户成功登录后,无论是通过哪种登录方式,我们都会生成一个包含用户信息和权限的JWT(JSON Web Token)令牌。JWT是一种轻量级的、基于JSON的、用于在网络应用之间传递声明式信息的开放标准。我们通过自定义的方式设置JWT令牌中包含的用户信息和权限字段。如果JWT令牌验证通过,微服务就可以根据令牌中包含的用户信息和权限来处理请求,从而实现了在分布式环境下用户认证信息的准确、安全传递和验证,保证了用户在不同微服务之间的无缝切换和认证信息的一致性。
(2)断点续传
我当时在开发媒资模块,上传课程视频文件的时候,有一次测试上传大视频文件,莫名其妙的上传失败了,我以为是自己编码的原因,查看了自己的代码以及文件大小设置,也查看了视频仓库是不是视频上传完成,但前端显示错误,最后发现都没有问题,然后我又尝试了一次上传,发现上传成功,我就觉得很莫名其妙。然后我就在跟我们指导老师反映了一下,然后他也查看了我的代码,梳理了流程,说可能是网络原因。然后我就想能不能将这个接口做的更完善一些,虽然大体功能实现了。然后我就在网上查找了一下。有很多的方法,然后就发现有个技术能够解决我这个问题,同时能够实现不连续上传,就是断点续传技术。
断点续传就是将文件分块传输,每次传输前检查自己有没有上传,上传到了哪个部分,并会校验块上传是否成功。上传完毕之后,在服务端进行合并,最后校验文件的完整性。
(3)异步编排
就是我在开发过程中会进行单元测试,来校验自己写的接口是否能够正确使用,当时我写的订单生成接口,我发现要等4-5秒才能够响应,我觉得非常影响用户的体验感,然后发现有些这个方法中,有些查询与上下文无关,我就想能不能将无关的部分让其异步查询,提高响应速度。然后我用chatgpt搜索了一下发现可以用异步编排来解决。我就用了completeableFuture类来解决这个问题,他提供了非常多的方法来解决异步编排。对于有关联任务需要上一个任务的结果才能查询等等,或者等待所有任务完成才继续等等,能够大幅提升响应速度。
(4)视频编码问题
考虑到用户在进行视频上传可能会格式各种各样,需要对用户上传的视频统一管理,那么就需要对视频进行转化,例如将avi文件转化为MP4文件,我们通过商论决定使用ffmpeg来进行视频转码,采用原因主要是使用比较简单,方便整合项目模块中,其次,有很多开源项目使用,例如qq影音、暴风影音。
(5)消息不丢失-rabbitmq
为了消息不丢失,我对rabbitmq进行 手动ack加消息与消息队列持久化。
publisher -> rabbitmq confirmCallback 确认模式
publisher -> rabbitmq -> queue returnCallback 未投递到 queue 退回模式
publisher -> rabbitmq -> queue -> consumer ack机制
2. 大学期间印象最深/最难忘的是什么
1.作为XX 第一次策划和开展XX活动的经历让我印象极为深刻。
2.接着说怎么做的,介绍流程
3.具体收获/为什么难忘
3. 大学里面担任了什么职务没?做了什么工作?
自大学以来,一致直担任班级里的团支书/班长/…,主要负责策划开展各类活动/班级会议/集体学习等等。
再就是经常关心同学们之间的思想、心理、学习的动态。
维护班级的团结,解决班级矛盾等等。
4. 大学最大的遗憾是什么?
这就随便说啦,但是注意别暴露自己的缺点,比如说没有得过奖,没有过四六级…
说平常一点,或者真有也可以说说。
5. 对自己的未来规划
1.最先就是积累自己的经验吧,虽然再大学期间也参与了很多项目的开发,但是有很多知识是只有实际在生产中才会遇到的问题。
2.其次逐渐深入到源码层次,学习其中的设计精髓,并让自己能够更好的明确自己项目出问题的位置。快速给出解决方案。
3.逐步参与到软件架构。开源组件的定制中,并拓宽自己的知识领域,
4.再长期就是向架构师方面发展。可以负责公司大型项目的整体架构设计和技术选型。
需要具备深厚的技术功底、广阔的技术视野和丰富的项目经验。能够根据业务需求和技术发展趋势,设计出具有前瞻性和可扩展性的系统架构。
6. 对自己的评价
1.热爱软件开发技术,积极乐观,面对困难迎难而上,抗压能力强,即使困难无比巨大,不放弃不气馁,始终相信有解决的办法。
2.具有良好的沟通能力和组织管理能力,在大学期间一直担任班级的团支书,积极解决同学之间的纠纷,积极开展各类活动引导班级成员参加。
3.具有较强的自主学习能力,面对陌生的知识和新的技术,能够积极翻阅官方文档、网络查找等方式去积极的了解。
4.有上进心,敢于拼搏,善于抓住机会,始终相信量的积累会促成新的质变。
7. 自己的优缺点
1.适应性能力强,能够很快适应周边环境
2.踏实能干,对于自己下定的目标或者接收的任务都能按时解决
3.勤奋好学,愿意在自己感兴趣的专业领域深耕
4.乐于助人,与他人和谐相处
5.有领导和团结他人经验,开学至今担任班级团支书,策划和举办了很多的活动
缺点:
1.做事不喜欢分心,在过于专心于某件事的时候,不喜欢被人打断。
2.爱玩
3.选择犹豫症
4.有点固执,对于一件事情,假如交由我来做,我会坚持将这个事情做完,
8. 对公司的认识,为什么选择公司
认识到网上搜一搜就行。
为什么选择公司?
1.为校招应届生提供了专业、全面的培养体系,包括线上学习平台、新员工培养计划、导师全程带教、专业技术与技能培训以及领导力培养项目等,帮助应届生快速适应工作环境,提升专业能力和综合素质,实现从校园到职场的顺利过渡
2.发展、晋升空间广阔,在安克可以实现自己的个人价值
3.注重员工的个人发展和团队合作
9. 对公司有什么要求没/有什么想向公司提的
1.我想询问一下,就是我这个岗位的要求和职责,让我能够根据自身情况安排时间。
2.我想了解一下,入职三个月后,公司期望我能达到什么水平
10. 最喜欢的课程以及原因
我更喜欢偏实战类的课程,比如课设之类的,能够通过自己动手实践,实现自己想要的功能或者需求。我认为我自己在实践中收获是最大的。我也有做好笔记的习惯,对于出现的问题,怎么解决,我都会有所记录,让自己以后遇到同种问题能够快速解决。
11.有没有遇到一些复杂的,比如说当时你一时间没想通,然后最终一步一步把它解决的这种情况
文件上传, 以为直接简单的读取, — 断点续传—优化–滑动窗口–后续发现多个视频上传比较慢,就采用了分布式任务调度的策略,使用xxl-job这个分布式任务调度平台。让我们视频上传的任务可以充分的利用CPU,实现并行工作,提高工作效率。这个地方也还有一个小问题就是怎么保证任务不重复消费的问题。因为我们在接收到任务时,会存入到一个未处理任务表中。然后xxl-job的执行器就会在这个表中查询。但是就会有任务重复消费这个问题。我们采用了作业分片方案以及在数据库加一个是否处理字段来解决。处理完后会修改字段为已完成
12.有没有遇到一些命题或者知识点,你觉得不正确,然后去搜集资料,去证明它确实是有问题的,或者跟别人讨论之后达成了一致的经历
有的,比如之前我们老师在讲知识点的时候,举了一个例子来验证这个知识点,同时也让我们在下面计算结果,但是后面发现老师计算的结果跟我的结果不一致,然后我就自己在下面又利用公式验证了两遍,也让同学尝试了一下,发现是老师计算错误了。
一般我对于一个新的知识点。对于我有疑惑的地方都会先去验证这个知识点是否正确以及弄清楚错误的地方在哪里,虽然这种会耗费很时间,但是也让我对这个知识点掌握得更深。
或者说书本上有讲述错误的地方,这种是有的,我之前就看到书上有错误的,勇敢说就行。
13.有没有思考过,比如HashMap为什么要先用数组,链表再用红黑树,那他为什么要这样设计,我能不能不这样设计。你有没有产生过类似的疑问?
1.数组 :按索引寻址快,空间连续,使得 CPU 缓存能够更有效地利用。
2.链表的插入操作相对简单,动态扩缩容。
3.链表存在瓶颈,当链表过长,查询效率就会达到O(n)。 自平衡二叉查找树 ,查找效率O(logn)降低树的高度。
HashMap 这种数据结构设计是综合考虑了性能、空间利用率和操作复杂性等多方面因素的结果
14.在你的学习过程中,是什么驱动着你把事情做好
1.好奇心跟求知欲
2.制定好计划跟目标
3.目标达成后的成就感
15.你觉得为了找到一个好工作你需要具备什么能力?或者你有没有对职业生涯、职业有过具体了解?
1.扎实的编程技术,
2.了解主流的框架,熟练使用,
3.自主学习能力,计算机技术更新迭代快,应当有较强的自主学习能力,适应企业不断变化的技术需求
4.团队协作能力和语言沟通能力。
5.有较强的动手实践能力。
有过,
1.初期,我了解到计算机领域有多种职业方向,如软件开发、系统分析、数据库管理、网络工程、人工智能等。对于软件开发,又细分为前端开发、后端开发、移动开发等。以后端开发为例,通常需要掌握编程语言(如 Java、Python 等)、数据库知识(如 MySQL、MongoDB)和服务器相关技术(如 Linux 服务器管理、容器技术)。
2.从初级慢慢往高级前进。
16.专业技能力哪一块你觉得学的足够好?
我觉得我对并发模块学的还算不错,对于并发的基础概念以及常见的并发容器concurrenthashmap、countdownLatch、semapfore都有所了解。能够根据项目需求对线程池进行定制,也在时刻关注并发模块技术的变化,比如jdk1,7提出的forkjoinpool线程池,这个线程池采用了分治的思想,他将一个大的任务分解成多个任务并发的处理,对于计算密集型任务,能够极大的提高计算效率,当时我用普通线程池和forkjoinpool对200万数据进行排序最终发现效率提升了两三倍。我认为主要的原因就是他会自动设置线程数量,并且还有工作窃取算法,当自己队列任务执行完毕,回去其他队列窃取任务执行。
17.并发场景没处理好会遇到什么样的问题
1.数据一致性问题,
2.死锁
3.恶性资源竞争。
18.学习技术的过程中,学习的步骤是怎么安排的,定义三个点
1.理论知识的学习,理论是基础
2.当理论巩固不错,就会投入到实践中
3.进行复盘总结,找出自己存在的不足之处。
4.对自己不足的地方在进行巩固练习。
19.成长经历、实习经历中或者做项目、学术方面等,有没有从这些经历中反思,得到什么启发或者结论,最终应用到你的工作学习中去了
1.行动前要做好计划,合理安排时间
2.防范于未然,要做好补救措施
3.要做好总结
20.团队中意见不合,是怎么解决的?
1.先安抚各自情绪
2.倾听各自的意见,找出不和之处。
3.找出折中方案,如果没有解决办法,在网上查找,或者询问老师。
21.当你的项目、课程与会议时间冲突,你是怎么解决的
1.评估优先级,制定计划表
2.各方之间进行协调
3.做好补救措施。
22.团队合作中的优势和短板
1.我具备良好的沟通能力。在项目初期,我积极与团队成员沟通,了解项目需求和目标,共同制定项目计划。在开发过程中,我与团队人员密切沟通与协作,及时解决出现的问题。例如,在实现订单服务时,我与前端开发人员沟通接口规范,确保数据的准确传递和页面的正常展示。
2.我有较强的责任心和执行力。我会认真对待每一个任务,按时高质量地完成交付。
3.注重防范于未然,我会思考每个每一步可能产生的异常或者错误,即使进行预防。
4.我还善于团队协作和知识共享。我积极参与团队讨论,分享自己的经验和见解,同时也虚心听取他人的意见和建议。在项目中,我与团队成员共同探讨技术难题,寻找最佳解决方案。
短板
1.在项目压力较大时,我有时会过于专注于自己的工作,对团队成员的进展情况关心不够。
2.对于时间紧迫的未处理的任务容易出现慌张情绪。
23.有没有关注岗位前沿技术的发展(Java后端)
1.在云计算与大数据方面,Java 因其跨平台性和丰富的生态系统,在这个领域的应用愈发广泛。未来可能会继续优化其在大数据处理和分析方面的性能,并提供更多与云计算服务集成的工具和框架。
2.微服务与容器化技术的兴起,也为 Java 后端开发带来了新的机遇。通过 Java 的模块化编程能力和丰富的生态系统,能更方便地实现微服务的开发和部署。同时,它也支持多种容器化技术,如 Docker 等,方便实现容器化部署和管理。
3.在人工智能与机器学习领域,Java 也在不断加强支持。通过集成深度学习框架和机器学习库,可以更便捷地实现各种复杂的机器学习算法和模型。
4.像分布式系统方面,如 Dubbo、Zookeeper 等技术帮助构建高性能、高可用的分布式系统。消息队列技术如 RabbitMQ、Kafka 等也在不断发展和优化。
我在学习过程中,会关注相关技术博客、参加技术社区的讨论,还会阅读一些官方或者权威的技术书籍和文章,以了解这些前沿技术的最新动态和应用实践。同时,也会关注一些实际项目中的应用案例,思考如何将这些前沿技术运用到实际工作中,提升开发效率和系统性能。
24.有没有对学过的知识进行复盘
我一直非常重视对所学知识的复盘。
就拿我现在来说,我认为对于一项技术仅仅了解使用是远远不够的,所以现在我在花时间在学习一些开源框架的源码,来学习其中的精髓,梳理其中的逻辑,在学习过程中,我做了详细的笔记,方面后面的复习,也会找相关博客文章来解答我在学习过程中的疑惑。同时我也会定期对自己做过的笔记包括我在做项目中学到的技术以及遇到的困难的解决办法进行定期的复习。
25.有没有出现压力情况,如何解决的
压力是经常有的,比如我在大三做项目期间,因为学校教学安排在大三有很多课程,所以课程压力、项目进展压力等等当时都非常的大,但是我每周都会为自己根据课程和项目进展安排计划,每天安排自己要做多少事情,有明确的要求,当然也有课程与工作与项目有冲突的地方,通常我会先在时间进行规划,在对冲突的进行协商,最后按照优先级进行取舍。当我压力太大的时候,我会挑空闲的时间适当的放松,到户外打打羽毛球、跑跑步等等。让自己得到放松。
26.遇到问题,如何解决的
1.我会保持冷静,对问题进行全面的分析,分析出现问题的原因。例如,在遇到一个程序运行错误时,我会仔细查看错误提示信息,尝试理解问题出现的原因和可能的影响范围。
2.我会利用各种资源来寻找解决方案。这可能包括查阅相关的文档、书籍,在互联网上搜索类似问题的解决方法,或者向老师、同学、同事请教。
3.我会根据找到的解决方案进行尝试和实践。有时候,可能需要多次尝试不同的方法才能最终解决问题。在这个过程中,我会记录下每一步的操作和结果,以便后续总结和反思。 如果问题仍然无法解决,我会重新审视问题,思考是否有遗漏的信息或者其他可能的解决途径。同时,我也会保持耐心和坚持,不轻易放弃。
4.在问题解决后,我会进行总结和复盘,思考从这个问题中学到了什么,是否有更好的方法可以避免类似问题的再次出现。这样可以不断积累经验,提高自己解决问题的能力。
总结
恭喜铁铁已经看到结尾啦,看完之后记得去总结自己的哦,这样到时候面试才不会想不起来。最后祝大家面试包过!!!