字节电商后端日常实习一面凉经
正常流程应该是一个半小时 但我八股背得不好 五十分钟就结束了
简单的三百字不到的自我介绍 实习经历没让我展开讲
让我用几个关键词概括一下自己 我讲了两个以后想不出新词了orz 没想到会有这种环节
- 耐心:编程涉及调试和解决各种问题,耐心能够帮助程序员在面对挫折时保持冷静,逐步找出错误原因。
- 细心:代码中的小错误可能导致重大问题,细心能够帮助程序员在编码和审查时注意到细节,从而减少bug。
- 逻辑思维:程序员需要具备良好的逻辑思维能力,以便将复杂问题分解为可管理的部分,并有效地设计解决方案。
- 好奇心:程序员应具备强烈的好奇心和学习意愿,主动探索新技术、工具和方法,以不断提升自己的技能。
- 沟通能力:程序员通常需要与团队中其他成员、客户或利益相关者进行交流,良好的沟通能力有助于清晰表达技术问题与需求。
- 团队合作精神:编程往往是团队协作的结果,程序员应具备良好的团队合作能力,以便在团队项目中有效协作和分享想法。
- 坚持性:编程过程中可能面临许多挑战和挫折,坚持性帮助程序员在困难时期保持动力,不轻易放弃。
- 时间管理能力:程序员需要合理安排时间,以便在项目截止日期之前完成任务、平衡工作与学习。
开始问项目,先介绍需求(之前保研面试有准备过 所以讲得挺顺)
我项目没什么亮点,结果我在那讲层次化架构讲了半天 然后聊到耦合性,高内聚低耦合
高内聚指的是一个模块或类内部的各个成员(方法和属性)之间紧密相关,模块有明确的责任,只处理与其职责相关的任务。
低耦合指的是系统不同模块或类之间的依赖关系尽可能少,模块间的交互通过公开的接口而非直接引用。这使得更改某个模块时,不会对其他模块产生很大影响。
优点:
增强可扩展性:如果需要在系统中添加新功能或修改现有功能时,良好的内聚和低耦合可以使得不同模块容易扩展而不会导致系统崩溃。 提高可维护性:高内聚使得模块功能明确,容易理解和修改。低耦合则确保当某个模块发生变化时,最小化对其他模块的影响。 促进代码复用:当模块高内聚且低耦合时,可以更容易地在不同的项目或不同的上下文中复用这些模块,从而减少重复代码和开发时间。 降低复杂度:清晰的模块分层能将复杂系统拆解为更易管理的小单元,使开发者能专注于局部细节,从而减少整体复杂度。
聊mysql相关操作,比如为什么用视图,为什么用触发器,数据库有哪些范式,几种隔离级别和事务的几个特性吗
问登录注册流程是什么,就讲了一下redis
用户登录以后,为了避免频繁查询数据库,可以把用户信息存进redis,用map结构
为了维护数据一致性,采用事务机制,把数据库更新和redis删除放进同一个事务里,如果两个有一个没成功,就rollback回滚。都成功才commit
通常是先更新数据库,再删除缓存
问到session和cookie=》session保存在服务器,cookie保存在用户本地(浏览器),每次登录的时候浏览器会自动将相关的 Cookie(包括 session_id)带上然后传给服务器服务器收到请求后,从请求头中提取 Cookie,包括 session_id。然后,服务器使用这个 session_id 在其会话存储(如内存、数据库或其他数据存储)中查找相应的会话信息,确定用户的身份和状态。
问密码为什么要加密 如何加密 我只想到哈希(因为这是不可逆的),它包含:md5,SHA,Argon2,bcrypt等
然后是抛开项目问八股,先问进程和线程
进程是资源分配的基本单位,线程是调度的基本单位。进程的通信需要共享内存,消息队列,socket,管道等方法。线程的上下文切换开销较小,但一个线程崩溃可能会造成整个进程崩溃。
对应关系:一个用户级线程映射到一个内核线程,多个用户级线程映射到一个内核线程,多个用户级线程映射到多个内核线程
java的反射
问了DNS=》用于根据域名找到服务器地址
最后手写代码是两个长数字相加,力扣上有,比较简单 字节的IDE可以自动补全 不然我可能会忘记stringbuilder怎么用
问了string buffer builder的区别,string是不可变字符串,buffer builder是可变字符串,其中buffer是线程安全的,可以用于多线程环境
最后反问 没问什么(因为知道已经凉了)就只拜托他们面评手下留情一点
#面经##我的实习求职记录#