编程导航小米话题讨论

小米

13 参与
分享

快来分享你的内容吧~

点击登录,快来和大家讨论吧~
表情
图片
话题
打卡
综合
交流
文章
问答

小米大气,大家都收到了吗

# 小米实习结束 继续冲击春招 小米长达四个月的实习 结束了 提离职的最后一周 ,对这几个月来的实习经历做了一个总结 发现大概学习到了下面四方面: **一、团队协作开发:** 1. 使用gitlab进行团队协作开发,从而共同管理项目: - 基于issue进行开发 - 本地分支/远程分支的变动与同步 - git命令的熟悉: 熟悉git各类命令并且深入理解其含义 - 了解GitLab中的 Merge Request,Code Review等 - 遵循团队统一开发规范 **二、从0到1了解了实际开发中的前端模式:** - 测试环境/预发环境/生产环境 - 公司内网提供的proxy代理 - 了解Whistle代理等配置操作 - 部署相关的流水线Tags **三、大厂中的需求管理模式:** 熟悉并实践对于需求从评审到落地到全过程 - 产品需求提出并拉齐所有产研人员进行评审 - 技术评审/个人开发周期评估 ==> 确定开发周期 并同步给产品 - 开发环节 有问题可以和各个同事通过开会等方式进行沟通并对齐 - 联调环节 积极和后端进行联调沟通,有的简单需求不需要联调 只是简单的前端需求 - 提测环节 对接测试的同事 按照要求提出提测单 开始测试流程 当然有的时候是产品担当测试 - 跟进缺陷 根据测试同事提到的缺陷 积极跟进进行修复 - 发版前 跟发前端负责人创建的preview分支 并且注意解决代码冲突 而且注意需要让产品也测下 - 发版时 跟同事的需求一起合并到master分支上 注意打Tag进行发版 并且做好准备,对可能存在发版后问题 处理好善后的工作 特殊需求/hotFix 走特定的流程发版上线 当遇到集团因为一些原因进行管控时,要注意一些事项 **四、其它** - 快速上手并熟练使用公司内部的办公工具 能够使用其进行高效沟通 - 熟悉大厂的基本作息规律 一个人能够快速适应并调整 - 了解大厂常见的活动模式,如团建/聚餐/公司活动等等 - 了解大厂绩效考核等标准 - 了解大厂CFR等流程等意义 - 交到了一些好朋友 接下来的寒假需要利用好 有了小米实习的经历 继续冲刺春招

【前端】【秋招】【经验分享】关于我从双非上岸小米实习这件事....

## 前言 Hello,编程导航的各位朋友们大家好,我是3Katrina,今天是我入职小米的第三天(其实才上了一天班,国庆带薪休假hh),这篇文章想给大家分享一下我的一些个人上岸经验,在此之前,先给大家看看我在米子的一些入职照片吧😁 ![c30be4e5ad75690c8a16672d8cff55f.jpg](https://pic.code-nav.cn/post_picture/1887425009758822401/U08pGhlqRrZkCCOx.webp) (公司很不错,环境没得说,福利待遇也很好,还给实习生发了17000的mac,我的同事,导师也都是很友善的人,我相信后面的实习肯定是一个不错的过程!) 下面就正式聊聊我在准备秋招几方面的一些浅见。 <br> ## 关于前端基础学习 先聊聊这个,因为在准备秋招前,前端打牢基础还是十分重要的,它决定了你的秋招的上限。 关于基础学习的话,其实有很多种方式: - 自学b站、慕课... - 自学文章,写文章总结... - 自学书籍,计划多少天读完一书,总结... - 报培训班,适用于自律性稍差一点的同学...... 你可能不知道自己适合哪一种 怎么学。那我觉得你可以先去看下 前端的学习路线,这里我就不展开,你随便一搜“前端学习路线”,其实网上有一大堆 ,例如鱼皮之前分享的学习路线我觉得就很适用于大部分普通人。 上面提到的这些学习资源,不论是免费的还是有偿的,都是互联网时代我们随手可得的知识珍宝,关键在于你能否有一定的执行力,能否长期地坚持下去,这才是最重要的 当然 如果你真的没有办法 做到坚持学习,或者自己不想规划,那你可以考虑报个培训班,只是报班需谨慎,注意甄别,最好找那种身边的人已经上岸了的机构。 **这篇文章我重点想讲解的其实不是前端的基础学习,而是秋招的准备**,前端的技术栈和知识虽然很复杂,但其实重要的、常见的都是那些我们能在网上学习到的,所以大家到最后都能掌握得差不多,我想着重和大家聊的是我个人的秋招准备,当然我能力还是很有限的,下面只是我个人的一些见解,也欢迎大家对我提出意见! <br> ## 秋招准备 之简历 在秋招中,简历就是你的入场券,就算你的面试表现再好,技术掌握地再深,没有一份 优秀的简历,你就会少很多很多机会,特别是大厂,除了字节这种秒捞的,基本上都会对你的简历进行一个不断地筛选,如果你在网申当中,简历不够出色,不能得到hr的青睐,那么你很可能简历初筛都过不去。 关于如何写好简历,其实网上也有大笔的分享,包括鱼皮的分享,都很好,大家可以去看看 我这边讲几点我的看法 - 不要自己在原始的word上编辑简历,很麻烦,很不好排版,而且没有办法做到云存储,我推荐网上找个正规的简历网站制作你的简历 就花杯奶茶钱的事,也可以去咸鱼买一些简历网站的临时账户,实在不舍得就用一些免费的,他们提供了大量的模板,绝对是比你自己编辑要好的 - 简历中只留重点,这意味着你需要删除一些不重要的内容,怎么删呢? 1. 个人技术 模块 只把自己掌握的深的写上去,例如webpack和vite这种东西,你在没有掌握它的实现原理的情况下,只知道特性,那你就没必要写上去了,要么你就去看掘金点赞最多的几篇文章,好好了解下webpack和vite的 原理 差异 操作,再加上去。 3. 介绍项目特点时 不要写的天花乱坠,一句话介绍就行了,注意简历是简介,你就一句话介绍你项目中的某个特点,不要扯一大堆没用的,在中大厂里面,面试官是什么人,人家啥没见过,实际上你的项目在他的眼里就是个玩具,你只要写一个简单的介绍,他看到你这个特点的介绍 觉得有可问的地方,自然对这个介绍进行提问,而不需要你大费周章写一大堆 你这个特点是咋实现的,就算你写了 人家该不感兴趣还是不感兴趣, 4. 还要一点还是关于项目特点的表述,你可以放一些真实的优化数据上去,例如你使用了XX性能优化技术将XX时间优化到了XX秒,前提是你需要做好准备,在面试时能够接得住拷问,你这东西是怎么测出来的?你怎么评估你的性能?你会performance和lighthouse的使用吗?如果你不能接得住这些问题,那你就不要写,一句话介绍,既简洁 还不会给自己挖坑,多好呢 - 简洁,简历上尽可能少出现换行,要么你就调整字体和间距,要么你就精进你的表达,hr不会仔仔细细地去看你简历上的每一个字,他们一天要看那么多份简历,也看不过来,你简历的简洁的美观 我觉得在这个内卷到爆的时代我 其实优先级也可以往前放 还有很多点关于简历的修改,我认为是大家都能注意到的,我只是聊聊我个人 在简历中想给大家提出的意见 大家如果有修改简历的需求可以私信我 我也可以分享我自己的简历给大家参考 <br> ## 面试迭代 **多面试**:面试是一个迭代的过程,一定要多面,在初期的时候 有面试就接,尽管你发现岗位要求和你的技术栈不太相符,但那不重要,这是一个锻炼的过程,随着你面了越来越多的面试之后,你会发现你的面试能力在不断地提升。 (反正面试又不要钱,多面面 没什么不好的,就是要注意 如果boss上接受了面试邀请就记得要面,如果你爽约了的话,boss平台是会记录你的爽约的,这会导致后面企业不会优先查看到你的简历 机会会更少) **多记录**:在这个过程中,我推荐可以以公司的薪资作为 标准,记录总结自己的面试成长: 用手机记录着 每周/每天 面试的信息,一开始先面日薪100 - 200的,面了一两周了发现 自己面的还可以了,去面200-300的,这样子不断提高,不断接近自己的目标。在轻松拿下100 -200的offer之后,你就会有正反馈 从而能够更好地帮我们去跑赢秋招这场马拉松。 **多复盘**:有时候在面试时可以录音,然后面完了之后去复盘,比如,回答问题的语速是否合适,对某一个知识点的掌握是否足够深刻, 其实我认为可以把面试 当作是高考前的每次月考,多考月考保持题感,而多面面试保持手感,考完复盘,面完复盘,它们是一样一样的,只不过高考一年只能考一次,月考就算考的再好也只看高考的成绩,每次月考只是在模拟高考场景;而咱们求职时的面试的每一次面试都是真正的流程,它可以无限面,小厂,中厂,大厂多的很,多投多面,说不定某一次面的好你就直接拿下了offer了,而且一些大厂还有复活赛,相当于可以无限复读 无限次高考!这样想的话,是不是感觉更轻松些了呢? **给大家看看我记录的部分面试吧:** ![eed84d56fb2a580a4a6d5b17f935dbf.jpg](https://pic.code-nav.cn/post_picture/1887425009758822401/gmA6tuwZCmgelmLw.webp) <br> ## 保持一个好的心态 这点拿出来单独说说吧 大家需要保持一个好的心态 不要老是被网上的一些文章给带跑偏的,说什么前端已死,后端已凉,少看点这类传播焦虑的文章和帖子,多让自己接触正能量 而且 只要能力够强,双非一样能进大厂,只要你里有目标,每天有规划,每天能完成规划,并且你肯记录,肯复盘,那这件事情就是可以办得到的。 多接触一些积极的,你想想你们学校计算机学院 有几个人是 自己在正常在学呢,要么就只会是跟着老师学一些无用的东西,要么就是啥也不学,所以学计算机的人很多,但是大部分都是不会去真正地学的,而你能进入到编程导航这个平台,就说明你已经超过很多人了,至少我认为你的自学能力是尚可的,所以别怕放手去干就完了! <br> ## 分享下我自己的秋招准备 在`八月份到十月份`的这段时间,我个人 每天花在秋招准备的时间大概是平均8-10h,八月基本上面试的不多,小厂练手为主,都在背八股和推算法,所以在八月末的时候,常见的八股我都已经背过了,力扣也刷了200多道题,包括简历上的项目准备也做的差不多了。到了九月份,我每天除了面试以外做的事就是 **投简历、复刷算法、再精进八股**,接下来详细讲讲这三件事: - 首先就是投简历:大厂的简历我会一周投个几家,分个两三周全部投完,网上搜 互联网top50公司,然后分别进入它们的官网,投就完事了,有的很多会被简历初筛挂掉,有的能够进入面试流程,没关系,用乐观的心态看待它就好,大厂那么多,面试机会肯定会有的,而且只要你的简历没问题,投递方式正确,那肯定会有不止一场的大厂面试邀约,在这么多次面试中,你只要有一次表现好,就能拿下,至于其它的面试,你表现得再差也不影响,你是有很多机会的。 如果这一两周 实在没有大厂面试安排,也可以投几家小厂练练手,保持面试的手感。 + 然后是复刷算法:我详细大家很多人在准备秋招时会发现,有些算法 前半个月刚刷过,过了半个月再刷就做不出来了,没错我也一样,所以没办法,算法这东西我即使在七八月份的时候 全过了一遍(代码随想录+hot100),但是没办法 太容易忘了,所以还是得复刷 - 精进八股:八股我同样在七八月份已经将常见的八股搞得很熟了,我会分为几个板块去记忆,在我的脑海里构建一个知识系统:js,css,工程化,react框架,ai....... 但是这些模块其实 有一些问题还是需要深挖,这是我在九月份每天做的事,你需要注意我说的是精进八股,而不是复习八股,因为八股这东西 你漫无目的地去复习他,我个人认为意义不大,面试有不会的再去看就好了。而每天精进八股的性价比其实是更高的,举个例子来说把,React Fiber,我之前在背React Fiber的时候实际上是只知道关于它的基础理解:我只知道他是React16后推出的新的模式,能够解决组件深时的卡顿问题,然后背了些词藻:双协调机制、Fiber树、高优先级任务等等.....但是我其实并不知道这些词藻代表的详细过程和解释,所以在九月份的时候,我就会去掘金上找文章看它们,这样的话:一方面,我能了解这些词藻到底代表着什么过程和含义,另一方面,通过对他们进行理解,又对我之前记忆的 ReactFiber 加深了印象,让我脑子里的知识系统中对这一知识更深更广了。 > 我认为准备八股的过程中就是让你脑子里的知识系统更广、更深,在面试官提问时,你能更快地去联想到脑子里的知识系统的不同模块的储备 > 我也强烈建议大家建立一个文件夹,里面放各种各样的文本文件,存放着前端各个模块的知识点,然后不断去完善这个文件夹,复习时就以看这个文件夹的内容为主,我知道网上有很多已经分好模块的知识库,但我个人还是建议 你在自己电脑中建一个你自己的。 <br> **我的面试过程** 接下来讲讲我是个人是如何应对每一次面试的吧! 1. 自我介绍,自我介绍 一定要提前准备好,将它背熟来,准备的模板可以参考[这篇文章](https://juejin.cn/post/7067707781716901901?searchId=20251003113936DD8F3920B7148C29242F),在每次面试时,自我介绍也不要完全看起来像背的,我觉得可以稍微富有感情一点 进行自我介绍,自我介绍是面试中最开始的环节,一个好的自我介绍决定了面试官对你的第一印象 2. 答问环节:首先你应该按照我刚刚说的方式 在脑海里建立一个知识系统,在每次面试官问问题能够大概想起来是知识系统中的哪个模块,然后回答问题时可以按照下面的一个框架去回答,这个框架能够适用于大部分问题,让你有理有据地回答: - 它的概念是什么 - 它的 本质/原理 是什么 - 它有什么应用 - 它的优缺点是什么 - 有哪些方法可以解决它的缺点 3. 在回答的过程中,你不要被面试官牵着鼻子走,你可以主动去将面试官的提问推到你擅长的领域,比如面试官问你React有哪些优点,你对react fiber又比较熟悉,你就可以在回答这个问题时多讲点关于fiber的性能优化,面试官一听 你小子会fiber,那我就来多问问,然后你就可以开启你的show time了!把你之前总结的关于fiber的 知识全部一番输出,放心一般情况下面试官是不会打断你的,你可以一直讲,一方面可以拖延面试时间,另一方面可以加深面试官对你的印象。 > 总之一句话,面试是当面展示,你不要被面试官 牵着鼻子 而是要主动去控场! <br> **我是如何坚持的呢?** 通过上面我的讲解你会发现我每天做的事情其实很枯燥,也蛮累的,那么我是如何坚持下来的呢? 首先就是现在已经大四了,秋招的压力会push我,使我不得不硬着头皮学下去,因为我想要在春招找一个满意的校招工作的话,现在秋招就必须先有一段实习,因为我之前是没有实习过的,因此自然会有压力,就会让我去不断地学 当然学的过程中也需要注意适当的休息,我的休息是分为两方面的 - 周一到周五我会学8-10h,周六周天我会少学几个小时,会跟朋友吃吃饭或者自己刷刷手机,给自己一个休息缓冲的时间。 - 平常的学习过程中,我不可能是连续学8h的,我使用的是类似于番茄学习法的方法:学个45分钟休息10-15分钟,起来走走,看看窗外的风景,听听歌,让大脑放松,所以一个下午5个小时,实际上我有效的学习时长大概就四个小时多一点点,这样子的方式对我个人而言还蛮有效的,学的时候就能够有充足的效率去学,大家也可以根据自己的情况调整 秋招过程中,我身边有几个和我一起学前端的朋友,他们也在准备着秋招,所以我和他们组成了学习搭子: - 我们会相互记录面试,相互为对方提出意见:很多时候,我们自己在面试的过程中是无法察觉我们自己的问题,往往在面试官眼中看到的问题,我们自己没有办法意识到,但是在他人眼里 说不定就能发现。 - 我和我的学习搭子们会相互鼓励,相互输出正能量,其实在秋招的过程中,我一天基本上都会学习8-10h,有了身边人的鼓励,学起来会相对不那么痛苦。 所以大家如果有条件,身边有一起学习的同学,最好一起拉过来准备秋招,有了学习搭子其实秋招的路会好走很多,当然如果暂时找不到或者你觉得自己一个人学更有效率,也是完全没问题的/ 最后,其实最主要的还是自己的内心,俗话说有志者事竟成,你有一颗向上的心的话,才是最重要的,学不下去时可以想想上岸后的日子,或者可以适当放松下,有决心的同时,放平心态去做 就好了。 <br> ## 最后 这篇文章其实不是一鼓作气写完的,我这两天 国庆经常出门玩,所以有空下来的时间了,才会写一些,所以想到什么就些什么了。其实自己也没有资格去谈一些 攻略 之类的,只是分享下我个人的一些经验,很多地方 是可以存在异议的,因为这些只是我个人的学习方法,最后,感谢大家的观看,祝大家国庆快乐,祝愿大家能够拿下自己满意的offer!

day199-day212 面上小米了!!! 秋招以来 每天都很累 基本上天天准备➕面试 9h+ 前前后后面了有20多场面试 也面了五六场大厂 有一面挂的 有二面挂的 终于能在秋招中旬 拿下米子的offer 成为米子的前端开发实习生

小米服务端一面(凉经)

#### 个人背景: Bg: 双非本9硕 项目:刷题平台 + BI(自己扩展了一些功能) #### 问题: - Spring AOP 的实现原理?(要具体的流程) - 分别说说 JDK 动态代理和 CGLIB 动态代理? - 在 Spring 中是如何用使用代理的? - 所有的类都可以被代理吗?比如哪些类不能被代理? 这还行 - Treemap内部使用的是什么排序方式? 很好,这个确实没看😅 - 为什么用 Redis Bitmap 实现签到? 如何做的优化?还行 - 如果用户量到达百万级别甚至更大,Redis Bitmap这个数据结构占用内存会怎样?此时你会怎么设计? - JD Hotkey实现原理? 大概说了一下流程,没细问 - Elasticsearch 和 MySQL 的一致性?分别可以用在什么场景?给了我一个场景让我设计,想不起来问的啥了😅 答上来了,结合自己的业务场景说了一下。 - Redis 的分布式限流除了 Ratelimiter 还有什么?给了一个业务场景让设计,大概内容好像是 如何在不重启服务的情况下,根据配置动态的调整限流策略? - 给你一个联合索引(a,b,c),非叶子结点和叶子结点分别存储什么?为什么叶子结点使用双向链表? 嗯,答的感觉还行 - 为什么使用IO密集型线程池?参数怎么设置的? 这感觉还行 - 接着问 为什么使用ArraBlockingQueue?不使用LinkedBlokingQueue? 扯了扯ArrayBlokingQueue更适合当前资源受限的场景,且必须要制定队列大小,LinkedBlockingQueue默认无界之类的。 - 又是一个线程池业务场景给你设计 内容想不起来了…只记得我没答上来 - 如果一个接口响应时间从 50ms 飙升到 500ms,如何排查(CPU和内存是正常的情况下)? - 项目中只使用了 RabbitMQ 的消息存储吗?有没有使用消息传输?如何用的?还行 这个还挺顺畅的 - 问了个策略模式?还行 #### **总结:** 暑期第一面也是第一挂(投的太晚了 三月中间身体原因,投了很多大部分都在流程中),基本上都是根据简历上的点逐点来展开问的,感觉场景题还是有点棘手,确实没碰到过,还要加强一下,八股正常背,但还是别死背。理解了更好记,更能开阔思路。 真的已经好久没面试过了,确实有些紧张,脑子有点乱说实话。好好复盘 菜就多练! 另外,个人感觉面试官挺好的,最后反问给我说了很多,很感谢!

双非硕,拿到小米实习是否要去?感觉时间很紧张。。。

### 个人情况 25届 双非本硕、科班、零实习,假如能去小米后端日常实习,还有必要去实习吗?(小米还不确定能不能转正,学校在长沙,小米实习在北京,往返比较麻烦) 1. 简历上的项目是伙伴匹配+OJ项目(没时间学新项目了),想去小米实习一周后,在简历上包装一下实习经历,再继续投简历(感觉没好实习,双非没啥好机会)。 2. 秋招10月中旬才开始投,只拿了两个安卓框架/应用开发的offer,都比较拉(1w出头一点点,965、上海/湖南),也通过了两三个Java后端开发的面试(深圳/长沙/北京),跟拿到offer了差不多(谈薪没谈好等等)。 3. 接下来,主要是论文盲审+春招,中间可能入党考试啥的,要是能转正,我愿意一直实习到入职,个人是米粉。 ### 期望帮助 1、请问25届现在还推荐去日常实习吗?(不确定能不能转正,之前有个字节日常实习笔试,现在暂时没消息) 2、去小米实习的话,最快也要下周才能开始,现在春招已经开了,请问各位大佬我是现在继续投简历,还是等去小米实习一周以后,包装完再投呢?(目前只投了部分公司) 3、如果只实习一周的话,不知道能不能包装好实习经历,感觉一周学不了多少?请问到时候能不能考虑包装成我是2月份实习入职的啊? 4、还有简历上的项目,推荐换吗?

昨晚在群里收到一位鱼友的上岸报喜,双非本上岸小米 👍🏻 其他同学也一起加油哦~

很多小伙伴想要小米一面的面经,因此他来啦~ # 1. 堆和栈的区别? - 堆 是JVM中 几乎所有对象存放的地方,会存放 创建的对象实例和数组。为什么说是所有的对象,是因为有些对象直接是在栈上分配,就是一些经过JVM逃逸分析之后,未被外部方法所引用的对象; - 堆也是一个JVM进程中所有资源共享的区域,因此会存在线程安全问题,JVM的垃圾回收的区域也主要是在java堆中 - 栈是 每个线程运行时 所需要的内存空间,栈由多个栈帧组成,对应着每次方法调用时所占用的内存 - 栈帧里面保存着方法的返回值、局部变量、返回地址;当前执行的方法被称为活动栈帧 - 虚拟机栈是线程私有的,因此是线程安全的 # 2. 堆和栈谁的效率高? - 申请速度快:栈是**程序运行前**就已经分配好的空间,所以运行时分配几乎不需要时间。 - 而堆是运行时动态申请的,相当于将分配内存的耗时由编译阶段转嫁到了机器运行阶段,将分配过程从编译器搬到了运行的代码中。 - 于是动态分配的速度不仅与分配算法有关,还与机器运行速度有关。(栈是编译时分配空间,而堆是动态分配(运行时分配空间),所以栈的申请速度快) - 存储寻址速度快:**栈的物理地址空间是连续的,而堆未必**,查找堆的链表也会耗费较多时间,所以存储寻址速度慢。 - CPU硬件操作速度快:cpu有专门的寄存器(esp,ebp)来操作栈,堆是使用间接寻址的,所以栈快。 # 3. 介绍一下快速排序的原理 **快排思想:** - 通过筛选一个基准元素,将待排序列分隔为两个子序列; - 然后对子序列进行排序,使左子序列的元素小于基准元素,使右子序列的元素大于基准元素 - 之后继续对子序列进行排序,直到使整个序列有序 **流程:** - 先为序列 设定一个 基准元素,一般是选择第一个元素,然后设置两个前后指针 - 先从右指针开始,如果右指针的元素 小于 基准元素,则将该元素 移动至 左指针位置,然后左指针 - 如果右指针的元素 大于 基准元素,则该元素不动,右指针--,继续判断该元素是否 小于 基准元素 - 若右指针的元素移动到 左指针,然后左指针 ,继续判断该元素是否 大于 基准元素 # 4. Java中线程有哪些状态? **六种状态**: 1. **初始(NEW)**:新创建了一个线程对象,但**还没有调用start()方法。** 2. **运行(RUNNABLE)**:Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。 3. **阻塞(BLOCKED)**:表示线程阻塞于锁。 4. **等待(WAITING)**:进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。 5. **超时等待(TIMED_WAITING)**:该状态不同于WAITING,它可以在指定的时间后自行返回。 6. **终止(TERMINATED)**:表示该线程已经执行完毕。 # 5. 在Java中怎么去保证多线程运行安全? **三种保证线程安全的方法:** 1. **synchronized** 关键字,实现一个 同步代码块 或 同步方法 2. **Lock锁机制**, 通过创建Lock对象,采用lock()加锁,unlock()解锁,来保护指定的代码块 3. **AtomicInteger原子类**,juc包下的保证原子性的操作类 # 6. 什么是AOP? - AOP 是一种 **面向切面编程** 的思想,让我们能够在不修改源码的情况下 **给程序动态地进行功能增强**,实现功能解耦 - 可以针对于方法切面,去做一个功能的动态增强 - AOP 是基于 动态代理去实现的,因此我们可以针对 方法(切面)进行 前置、后置、环绕、异常通知 **AOP使用场景:** - 记录日志 (调用方法后记录日志) - **权限控制** (调用方法前校验是否有权限):OJ项目中使用了 @AuthCheck - **监控性能** (统计方法运行时间) - **事务管理** (调用方法前开启事务,调用方法后提交关闭事务 ) > Spring的事务中底层也是基于AOP动态代理去实现的,采用的是Cglib动态代理实现的,通过 **继承被代理类** > 所以事务失效的原理其实和AOP息息相关,例如事务的异常在方法内部手动捕获,就会造成事务失效,需要向上抛,才能被aop捕获; > 例如 非public方法事务失效,因为cglib代理是继承被代理类去实现的,需要重写父类需要被增强的方法,如果父类private就不能代理 > # 7. 在SpringBoot的启动类当中,有用到哪些注解? - ComponentScan 默认扫描该类所在包及其子包 - SpringBootConfiguration 里面的注解其实就是 Configuration 配置注解 - EnableAutoConfiguration 自动配置的核心注解 - **@AutoConfigurationPackage** - **@Import({AutoConfigurationImportSelector.class})** 其内部就是读取了 **该项目和该项目引用Jar包** 的 classpath 路径下 `META-INF/Spring.factories` 的 配置类 然后这些配置类会根据 **条件注解所 指定的条件来**判断 是否将该类加载进 Spring容器 - Spring 2.x 自动配置文件 是在 `META-INF/Spring.factories` - Spring 3.x 是在`META-INF/spring` 文件夹内 的一个 **autoconfigure** 中 例如 `org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration` 其中会根据 `@ConditionalOnxx` 来判断是否要加载 某个类进容器 ```java @AutoConfiguration @ConditionalOnClass(RedisOperations.class) @EnableConfigurationProperties(RedisProperties.class) @Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class }) public class RedisAutoConfiguration { @Bean @ConditionalOnMissingBean(name = "redisTemplate") @ConditionalOnSingleCandidate(RedisConnectionFactory.class) public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); return template; } @Bean @ConditionalOnMissingBean @ConditionalOnSingleCandidate(RedisConnectionFactory.class) public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { return new StringRedisTemplate(redisConnectionFactory); } } ``` # 8. 说说事务的特性? - 原子性:对数据库进行的一组操作视为原子的,要么全部成功,要么全部失败 - 一致性:数据库总是从一个一致性的状态转换到另一个一致性的状态 - 隔离性:一个事务所做的修改操作在提交事务之前,对于其他事务来说是不可见的 - 持久性:一旦事务提交,则其所做的修改会永久保存到数据库 # 9. MYSQL 的索引不适合用在什么场景中? 首先可以先明确,什么时候适合使用索引? - 对于查询比较频繁的字段,改和删的操作比较少 - 经常作为查询条件的字段 - 字段的区分度比较高 因此不适合用在: - 增、删、改操作比较频繁的字段 - 字段的区分度比较低,例如isDelete # 10. L322 零钱兑换 给你一个整数数组 `coins` ,表示不同面额的硬币;以及一个整数 `amount` ,表示总金额。 计算并返回可以凑成总金额所需的 **最少的硬币个数** 。如果没有任何一种硬币组合能组成总金额,返回 `-1` 。 你可以认为每种硬币的数量是无限的。 **示例 1:** **输入:coins = `[1, 2, 5]`, amount = `11` 输出:**`3` **解释:11 = 5 5 1 **示例 2:** **输入:coins = `[2]`, amount = `3` 输出:**-1 **示例 3:** **输入:coins = [1], amount = 0 输出:0 ```java public int coinChange(int[] coins, int amount) { int[] dp = new int[amount 1]; Arrays.fill(dp, amount 1); dp[0] = 0; for (int i = 1; i <= amount; i ) { for (int j = 0; j < coins.length; j ) { if (i >= coins[j]) { dp[i] = Integer.min(dp[i], dp[i - coins[j]] 1); } } } return dp[amount] == amount 1 ? -1 : dp[amount]; } ``` #求职# #面试# #实习#

计划赶不上变化,上周本来已经订了昨天周日飞往北京的机票,去的是一家中厂国企,包住宿。 中途周二小米约面,周三一面,周四二面,周五上午oc,下午offer(这么快的原因是我在二面的时候说我已经买好了去北京的机票,希望可以加快进度,还说了我是米粉[流泪]),现在人已经在武汉了,明天去小米武汉总部第一天入职。 这几天人都是懵懵的,本来已经研究好了北京公司的位置、宿舍、环境,也幻想好了会遇到的挑战和困难,结果中途跳出了一个小米,本来我已经放弃了春招冲进大厂的想法,秋招再战(可见上帖),真的是计划赶不上变化,我也觉得有很大的运气成分在里面,但还是需要继续努力,要继续备战秋招不能够松懈,也希望星球里春招不如意的小伙伴能够不要灰心,有时候转机就在下一个路口。#求职# 经验 职场

小米二面来啦~ 不知道是不是凉经 ┭┮﹏┭┮

<html> <head></head> <body> <div class="content ql-editor"> <p>面试时长30分钟</p> <p>1.上来三道算法题 1.找第K大元素 2.环形链表 3.环形链表找环形链表的头结点(这里面试官要我说方法,这里好像说错了) 三道算法对了两道 最后一道错了 ┭┮﹏┭┮</p> <p>2.自我介绍</p> <p>3.八股文拷打 (跟一面一样问的不是很多)</p> <p><br></p> <p>多线程方面的八股文</p> <p>3.1 主线程等待子线程执行完毕有哪些方法</p> <p>我:这里没回答上来 ┭┮﹏┭┮ (多线程这还要去多多了解看一下源码)</p> <p><strong>面试官</strong>:拒绝策略有哪些,能细说一下吗?</p> <p>我:回答了<span style="background-color: rgb(255, 255, 255); color: rgb(31, 31, 31);">AbortPolicy,DiscardPolicy其他两个没有回答上来 ┭┮﹏┭┮</span></p> <p><br></p> <p>mysql方面的</p> <p>3.2 索引失效有哪些</p> <p>我:<span style="color: rgb(51, 51, 51);">1.在进行索引列上进行运算操作 2.索引不加单引号 3.索引头部进行模糊匹配 4.组合索引未满足最左匹配原则 5.or会使索引失效(只有左右两侧都有索引才不会失效)</span></p> <p><br></p> <p><strong>面试官</strong>:在RR隔离级别下执行sql语句会不会加锁</p> <p>我:针对<strong style="font-family: inherit; font-size: inherit;font-style;font-variant-ligatures;font-variant-caps; color: rgb(48, 79, 254);">快照读</strong>(普通 select 语句),是<strong style="font-family: inherit; font-size: inherit;font-style;font-variant-ligatures;font-variant-caps; color: rgb(48, 79, 254);">通过 MVCC 方式解决了幻读</strong>,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据,是查询不出来这条数据的,所以就很好了避免幻读问题。</p> <p>针对<strong style="font-family: inherit; font-size: inherit;font-style;font-variant-ligatures;font-variant-caps; color: rgb(48, 79, 254);">当前读</strong>(select ... for update 等语句),是<strong style="font-family: inherit; font-size: inherit;font-style;font-variant-ligatures;font-variant-caps; color: rgb(48, 79, 254);">通过 next-key lock(记录锁+间隙锁)方式解决了幻读</strong>,因为当执行 select ... for update 语句的时候,会加上 next-key lock,如果有其他事务在 next-key lock 锁范围内插入了一条记录,那么这个插入语句就会被阻塞,无法成功插入,所以就很好了避免幻读问题。</p> <p><strong><br></strong></p> <p><strong>面试官</strong>:普通读会不会加锁?</p> <p>我:不会加其他锁,但mysql会自动加上意向锁</p> <p><strong>面试官</strong>:意向锁有什么作用?</p> <p>我:<strong style="background-color: rgb(255, 255, 255); color: rgb(48, 79, 254);">意向锁的目的是为了快速判断表里是否有记录被加锁。</strong><span style="background-color: rgb(255, 255, 255); color: rgb(44, 62, 80);">如果没有「意向锁」,那么加「独占表锁」时,就需要遍历表里所有记录,查看是否有记录存在独占锁,这样效率会很慢。</span></p> <p><strong style="background-color: rgb(255, 255, 255); color: rgb(44, 62, 80);">面试官</strong><span style="background-color: rgb(255, 255, 255); color: rgb(44, 62, 80);">:意向锁的互斥怎么理解?</span></p> <p><span style="background-color: rgb(255, 255, 255); color: rgb(44, 62, 80);">我:可以把他理解为读写锁的互斥。</span><strong style="background-color: rgb(255, 255, 255); color: rgb(48, 79, 254);">意向共享锁</strong><strong style="background-color: rgb(255, 255, 255); color: rgb(38, 38, 38);">(</strong><strong style="background-color: rgb(255, 255, 255); color: rgb(44, 62, 80);">IS 锁)</strong><strong style="background-color: rgb(255, 255, 255); color: rgb(48, 79, 254);">和意向独占锁</strong><strong style="background-color: rgb(255, 255, 255); color: rgb(38, 38, 38);">(</strong><strong style="background-color: rgb(255, 255, 255); color: rgb(44, 62, 80);">IX锁)</strong><strong style="background-color: rgb(255, 255, 255); color: rgb(48, 79, 254);">是表级锁,不会和行级的共享锁和独占锁发生冲突,而且意向锁之间也不会发生冲突,只会和共享表锁(</strong><strong style="background-color: rgb(255, 255, 255); color: rgb(200, 73, 255);"><em>lock tables ... read</em></strong><strong style="background-color: rgb(255, 255, 255); color: rgb(48, 79, 254);">)和独占表锁(</strong><strong style="background-color: rgb(255, 255, 255); color: rgb(200, 73, 255);"><em>lock tables ... write</em></strong><strong style="background-color: rgb(255, 255, 255); color: rgb(48, 79, 254);">)发生冲突。</strong><strong style="background-color: rgb(255, 255, 255); color: rgb(38, 38, 38);">SS兼容,SX,XX不兼容</strong></p> <p><strong>面试官</strong>:查询语句时使用order by 进行排序要不要对排序字段建立索引?</p> <p>我:如果是进行id或唯一主键进行查询可以建立索引,因为这样可以直接查询出数据,不要进行回表查询。如果是多个字段也可以使用联合索引。但如果项目不考虑效率这方面。可以不建立索引。因为在数据库中索引太多也不是好事,要维护索引等(这里回答一下索引的优缺点)</p> <p><br></p> <p>springboot方面</p> <p>3.3 在springboot中有什么注解比较了解?</p> <p>我:@AutoWrite和@Resouce(说了一下区别和作用),@SpringbootApplication(里面的@EnableAutoConfiguration说了一下自动装配,Spi方面)还有Aop的一些注解好作用</p> <p><strong>面试官</strong>:理解过@Resouce的源码吗?</p> <div class="ql-code-block-container"> <div class="ql-code-block"> 我:我回答了里面的元注解 </div> <div class="ql-code-block"> @Target({TYPE, FIELD, METHOD}) </div> <div class="ql-code-block"> @Retention(RUNTIME) </div> </div> <p><br></p> <p>面试官:还有其他的理解吗? (没看过里面的源码 ┭┮﹏┭┮)</p> <p><br></p> <p>面试官:有使用过JVM的命令吗 比如JSP,JMP,有没有对内存进行过分析 (这里也没回答上 ┭┮﹏┭┮)</p> <p><br></p> <p>redis方面</p> <p>3.4:对reids有什么了解,在项目中用它做了什么功能?</p> <p>我:在项目中我使用reids做了分布式登录(说了一下细节),使用了布隆过滤器(说了一下布隆在项目的作用和如何实现),缓存预热(说了一下Aop+定时任务进行预热)等,解决缓存穿透,击穿,雪崩问题(这里回答了一些其他解决方案)</p> <p><br></p> <p><br></p> <p>在实习或项目开发过程中有没有遇到过疑难点怎么解决?</p> <p>我:这里拿API项目的API签名认证和网关进行了回答</p> <p><br></p> <p>反问:面试官有没有什么技术方面的推荐?对于今天的回答方面有什么要改正的?(后面这提问要看面试官来问不然可能会给自己挖坑)</p> <p><strong>面试官</strong>:mysql和spring这方面掌握和回答不错,但可以把spring的一些源码进行一些更深层次的了解。线程,jvm这里表现的不是很好(这里的题目没怎么回答出来),可以再去巩固和学习一下。面试官真的很温柔!</p> <p><br></p> <p>面试结果什么时候出来?- 这周内会回复的</p> <p><br></p> <p>通过这次面试我也知道了自己的一些不足(线程池,线程这方面还要多去了解,源码还需进一步去学习)</p> <p><br></p> <p>希望小米的二面能通过把!!!!</p> <p><br></p> </div> </body> </html>

下载 APP