力扣官网刷题
如果你想找到一份较好的工作,你就加紧锻炼你自己各方面的能力,对于技术点的掌握,所谓的算法,数据结构,设计模式
我们大多数的开发人员都是相对欠缺的,为什么了?因为
- 实际工作中很少用,我们都是面向业务编程,基于功能交付,早起硬件昂贵,时间空间转换不到位都可能把系统跑出问题,现在硬件非常便宜,基本不用太多考虑算法问题;
- 我们属于应用工程师,不是算法工程师,系统工程师
1. 了解对方
公司到底需要什么样的人
从工作价值上来看一般包括以下两点:
- 个人工作结果质量好,价值高:要体现相应的依据,可以是对比的数据,或商业结果
- 赋能别人做出成果:带领团队去提升并完成更多更复杂,更有价值的工作
只从当前的技能和经验来考察应聘者,其实是不完整,不靠谱
应聘者的职业素质模型
自下而上的过程:动机,潜力,技能,经验(社招)
如果是校招:动机,潜力,技能
-
经验
经验的时长,不一定跟能力强弱直接挂钩,同样的工作重复100遍和重复10遍,能力基本没有增强 你创业3年(做了3个0到1的过程)还不如创业1年的人(做了一个0到100)
-
技能
做事的能力,体现专业性,技能是可以让你基于已有的经验,运用新的工具、技术进行铲除,形成新的经验,技能的高低表现在
- 产生技术方案的能力, 比如在分布式系统架构的订单编号,使用雪化ID和分库分表的技术方案,或者使用分布式锁的一个技术方案。
- 执行技术方案的能力
-
潜力
其实就是学习和创新能力
-
动机
做事的内心目标、意愿和态度
一切为了钱
动机的表现:自燃型,点燃型,阻燃型
想要面试成功,就需要先弄清楚面试过程
1、确定职位空缺,提前预知工作的难度和方向
-
填补空缺
招聘新的人员对原有岗位进行替换,接替原有工作岗位的内容,工作内容相对比较固定
-
新增职位
新的人员要承担之前团队没有做过的工作内容或职责
对方邀你面试时给你打电话时可以提前了解这个岗位招聘的目的是什么 ?如果是新增职位,那它的产出是怎么算的
项目处于什么阶段
还需要提前了解:正式员工还是外派员工(外包),出差多少次,每次多长时间
2、简历收集和筛选的过程
- 内推,一定要好好利用,待遇一定要说,例如您想找一个高开的工作,但他只能提供初开的薪资,就不合适了。
- 公司的官网
- 招聘网站
- 社交平台
- 猎头公司
简历的相关内容:邮件标题不要只有简历两个字,至少要有应聘职位,姓名
简历打开因为对方的一个工具差异,是乱码或文档格式不一致,导出成PDF
简历邮件可能会被自动归入垃圾邮件,使用一些正规的邮箱,邮箱名正常一些
3、面试中是谁决定你的去留
HR,技术面试官,部门负责人来对你进行考核
- 录用
- 不录用
- 候选
4、签Offer,定薪水
HR或部门经理会给出这个职位的薪水,选最高的0.9,例如20~25k ,那就要25*0.9 = 22K
5、入职试用期,不能放松警惕
一定在这个阶段保持一个良好的工作纪律和正向的工作输出
面试官的面试逻辑是什么?
观察
在面试官提出问题后不要直接回答,建议提出对这个问题认识的一些疑问,并在获取疑问过程中来进行信息的澄清,并阐述自己对这个问题的理解是否到位。
不要急于给予答复,会观察你是否是一个真正会去思考问题的人
提问,选择最有效的问题
- 作为面试官不知如何提出有效的问题
- 作为面试官不清楚候选人是否真正明白了自己的问题
思考问题背后的意图
无论是面试官还是候选人,都需要思考你提出的问题目的是为了考核什么具体的内容
思考题
1、为了完成这个任务,你用到了哪些新的技能或者工具
2、你是如何用这些新技能或工具完成任务的
3、你如何和同事合作的?举例说明
4、在这个任务/项目中,你最有成就感的地方是什么
5、你认为完成这个项目的关键因素是什么
这些问题是考察你是否善于总结review和复盘的能力
2. 你是否真正了解自己的职业规划呢?
现在的你,到底该不该换工作?
有几个明确的指标
-
物质保障水平
-
精神满足水平
-
能力发展通道
这个是工作中最不容被察觉的部分,是决定着你将来的物质保障水平和精神满足水平
你真的想好自己的职业规划了吗?
大方向不要变,让前期的积累给后期起作用
- 我的愿景是什么?
- 我当下是什么样子?
- 我要做什么,才能从当下走到愿景?
我们在思考愿景的时候,首先是心理愿景,其次是职业愿景,最后是能力素质资源愿景
- 心理愿景就是想要什么
- 职业愿景就是做什么
- 能力素质资源愿景能做什么
程序员后来都去干什么了?
软件团队一般就是编写软件,为用户提供服务
T型人才:纵向有技术深度,横向有技术广度,对新技术有敏锐的嗅觉,关注新技术 引领发展的方向
程序员的三个发展方向:
- 业务:关注用户和价值,有同理心
- 技术:关注技术和逻辑实现,发展为T型人才,同理心很差
- 管理:关注过程,质量,交付结果,整合资源,降低风险,核心目的是产品兜底,达到基础目标,你定的目标是啥,最后完成的就是啥
技术只是一个载体,它是要实现业务价值的。
3. 如何让你的简历更受青睐
项目经验的结构化写法
- 为了某某问题,某某目标:突出复杂度
- 我采用了某某方法、技能、流程:突出解决问题的能力和创新性
- 达成了某某成果、实现什么意义:突出你的能力提升和你的工作贡献
技能编写方面,不要用太多内容干扰面试官的视线,要舍得删减
- 如果已经有了高级的技能,同类技能中低级部分就不要写了
- 重复的技能经历,尽量找出不同点用一句话概括
- 职位描述中没有提到的技能,如果不是很熟练就不要写了
- 如果你的工作年限比较久,可以把早期哪些比较简单的项目去掉
- 如果简历里没有强制要求自我评价,就不要写
- 按领域分类有结构性,如数据库的写在一起,框架, 缓存,搜索引擎,运维部署的写
如何让你的简历没有硬伤
-
一定要避免内容不真实,对于自己掌握的技能做一定的夸张,并在项目中做了一些包装
造假和夸张的问题在于,你抬高了面试官对你的期望,导致面试的时候被别人扒干净了,在试用期时大跌眼镜,最后差评走人
-
内容一定要客观,不要自己给自己一个主管评价
-
切记页面太花哨
-
不要有笔误
-
内容不要有导致歧义和误解的地方
-
尽量避免职业发展不衔接
-
换工作不要太频繁:1年一个工作就算频繁了,一个工作2年以上就比较正常了
如何让你的简历有亮点?
- 有没有参与过开源项目,star数量多少
- 是否发表什么技术论文
- 获得过什么国家专利
4. 经历没有亮点可讲?
你需要做一份比较详尽的履历
比如下面这些可能是亮点,但不一定禁得住面试官推敲
- 在大公司工作过
- 10年工作经验
- 参加过日均10亿访问量的大项目
- 日最高PV是多大,一般是在什么时间段
- 这个系统的整体服务节点有多少,配置多大
- 数据层如何架构,缓存层如何架构
- 数据库单表最大是多少行
如何找亮点?
转换角度找价值
可以这样分析:我为谁,解决来什么问题?
你的工作价值是什么?这个就可以从公司,客户,团队和自己的角度去寻找了
- 公司的角度:你的项目,为公司贡献了多少收入?降低了多少成本?完善了哪些产品和服务?对公司的品牌竞争力有什么影响?
- 客户角度:客户对你的工作的满意度?你的工作为客户解决了什么问题?
- 团队角度:你的工作完成了项目目标了吗?你的加入对团队有什么资源配置上的影响?你对团队的人员建设有什么帮助?
- 个人角度:做完这个项目,你最大的成就是什么?哪些是你值得自豪的?这些成就和自信是源自无止,还是精神,还是成长?(老人做新事,新人做老事,如果你一直在做老事,也无法改变,可以换个角度思考如何把这些事情做到极致)
找到价值后要进一步分析自己的工作和这个价值之间的关系,把两者联系起来,你就会发现尽管工作事琐碎的是简单重复的,但在全局看还有不可或缺的一环
量化结果找提高
可以这样分析:我在哪些方面做了什么提高
对于现状分析后,制定各方面的目标,然后进行提升,提升的结果如何,你是如何做到的,在这里体现了哪些技能和经验上的亮点?
复盘过程找创新
可以这样分析:我的做法可以有什么与众不同的点
回顾挑战找动机
可以这样分析:我解决了什么挑战
过去你在工作中有没有什么时候,你做事非常紧张,这个时候就表明你碰到挑战了,就可以把这个挑战找出来,仔细分析:
- 哪些方面造成了挑战和压力:是工作量,还是工作难度?
- 难在哪里?是技术还是沟通还是陌生的业务?
- 你做了什么?才缓解了这些压力?
- 这些挑战过后,心里有哪些满足感?
- 如果接下来还有这样的挑战,你会继续挑战吗?
亮点具象化的一些例子
- 我做的这块降低了20%的硬件运维成本
- 我负责的日志监控,为60%的线上错误成果报警并第一时间解决,降低了系统的故障率
- 我指定的新人业务培训文档,使新人一周内就可以开始核心工作了
- 我遇到了产品安全性的问题,团队有缺少这方面经验,我的做法是……,实现是什么结果…….
5. 面试紧张怎么办?
-
调整期待
改变你对于结果的期待
-
提高能力
- 第一是面试的能力
- 在你的公司找一些技术非常好的同事,和他沟通你对项目的总结,让他对你的能力进行一下评估
- 可以到同学或以前同事的工作让他对你进行一下综合的评价
- 第二是职位要求的能力
- 第一是面试的能力
-
充分准备
- 减少面试问题的不确定性:和约你面试的联系人提前了解面试的细节和情况
- 减少环境影响的不确定性:提前到公司,允许的情况下提前去趟卫生间
- 自己的状态要保持好:前一天不要熬夜
-
面试过程中
- 当问题不清楚时,一定要当面确认清楚
- 不要说假话,说假话自信心会下降
- 如果忘词或声音颤抖,就直接告知面试官,你比较紧张,说出来了反而不紧张了
6. 面试问答环节
如何做好自我介绍
一定要体现你的优点和长处,而不是泛泛而谈,所以最好提前准备一下
- 经历概括
- 经验和技能
- 表达风格和气场
- 简历内容之外的信息
要具备真正能够将技术讲明白的能力
如何将技术阐述清楚
- 内部的设计维度
- 技术本身实现的目标是什么
- 实现原理
- 优劣局限
- 技术的演进趋势
- 外部应用维度
- 使用这个技术上你都遇到哪些问题
- 你在使用过程中的最佳实践,方法论
- 这个技术的市场应用趋势
表达方式上如何说清楚:
- 一定是结构化的表达:这个技术有以下几点,第一,第二,第三
- 可视化
- 举例子做类比
- 对比
7. 如何认识自己的优缺点
- 面试的时候为什么会问你优缺点,考察的是什么?
- 看你的自省自知能力
- 看你和职位的匹配度
- 完善或印证对你的评价
- 如果面试过程中被面试官问住了怎么办?
- 考验你的记忆
- 考验你的分析
8. 面试官让你提问,如何问?
- 多问很将来工作相关的内容
- 从问题中能体现你和这个岗位的匹配程度
9. 应聘者如何谈薪资
薪资方面的影响:
- 薪水
- 成就感
- 成长
薪水的构成
- 月薪/年薪
- 年终奖
- 股票、期权
- 福利
10. 架构师/研发负责人面试过程中的问题
-
RabbitMQ的消息ACK/NACK,NACK后消息是回到队首还是队尾
nack回到队尾
-
kafka的消息确认应答机制
-
kafka为什么会比其他消息队列快
kafka采用顺序写磁盘的机制,提高磁盘的利用率;采用 pagecache 页缓存机制,读取文件数据OS先到pagecache,有就直接拿走,没有就向磁盘发出请求,获取数据后先放到pagecache,然后再给需要的请求,写数据的时候先判断pagecache有没有,没有先写入pagecache,然后再从pagecache刷入磁盘中。采用zerocopy机制,只需数据从磁盘文件复制到pagecahe的一次,省去中间内核pagecache和应用程序的用户缓冲区来回复制数据的过程,降低上下文切换的过程,让数据更快的读取到。
-
消息的可靠投递方案如何设计
有两种方案:1.消息落库进行状态标记保证可靠性投递,消息状态:发送中,发送失败,发送成功,对于没有发送成功的消息进行轮询操作,然后重试发送,重新发送需要考虑异常重发次数,超过最大次数,转人工补偿;
2.消息延迟投递,做二次确认,回调检查,消息发送端要接受broker返回的
-
一个高并发的业务系统如何架构
分布式部署,动态扩容服务实例,使用分布式缓冲层redis(主从哨兵模式或者集群模式)提高数据读取的响应,降低数据库压力,数据库可以使用主从复制,进行读写分离,当数据量大到千万级别,考虑进行分库分表。
-
springboot的事件机制是什么
-
springboot的事务传递机制是什么
@Transactional 注解,本地数据库事务的传递,默认是REQUIRED,如果当前没有事务就新建一个事务,有就加入当前事务
-
gateway如果出现网关假死情况如何处理
-
nginx用过哪些插件,除了负载均衡还使用过nginx哪些功能
-
redis的持久化机制有哪些区别是什么
默认持久化机制是RDB,aof需要手动开启,RDB记录的是keyvalue数据本身,aof记录的是key的set的每一次命令,就是set的操作指令,是一种追加内容的方式记录,所以相同数据量的情况下,aof的数据文件比RDB的数据文件大得多,不过有重写机制保证aof的数据文件不会太大。如果开启了aof,redis只会加载aof。aof的恢复速度比较慢,aof会每秒同步一次,
-
redis的主从集群如何配置,数据复制的原理是什么
-
redis的哨兵是如何监控,选举,和互相通信的
-
redis的cluster是如何进行节点新增和删除的
-
ElasticSearch的集群如何搭建,搭建后主从分片如何分布,主从分片的数量如何设置
-
logstash传递给ES的数据量如果非常大的情况如何处理
-
分库分表如何解决数据量大的情况下查询优化的问题
-
雪花ID为什么不容易重复,什么情况下会重复
当你服务器时间回调的时候,雪花ID可能会出现重复
-
pagehelper的分页机制是什么
-
eureka是AP还是CP
-
Hystrix的降级和熔断的区别,分别使用在什么场景
-
JVM如何进行调优,需要优化哪些参数
-
JUC并发包你都用过哪些工具类
-
线程池如何设计和使用
-
GC垃圾回收机制
-
系统导致内存溢出的原因有哪些,如何解决
-
Java反射的原理
-
系统导致CPU过高的原因是什么,如何解决
-
HashMap线程是安全的吗?他是如何解决查询和存储效率问题的
-
Java里k-v数据结构如何保证设计成线程安全的
-
DDD领域驱动如何将业务拆分成微服务
-
MySQL索引实现的原理是什么
-
MySQL的主从复制的配置和实现逻辑是什么
-
MySQL的CPU飙高如何处理,一般是什么原因导致的
-
一个电商系统从0到1开始设计,如何适应当前业务发展并预留扩展
-
MyBatis和JPA的区别
持久化框架都有一个对象来操作数据库,mybatis的是sqlSession,jpa的是EntityManager,DAO层最终的实现类是SimpleJpaRepository,它里面封装了一个EntityManager对象操作数据库;jpa使用命名查询和@Query注解自定义sql语句,mybatis使用的是xml 文件和@Select注解自定义sql语句;jpa有缓存机制,会把find查询到的对象在EntityManager缓存起来,所以修改了对象后要清除缓存重新从数据库读取对象,jpa提供了@Modifying
-
前后端分离后数据是如何交互的,中间需要注意什么
-
平时业务开发中最常用的设计模式有哪些,是怎么用的
-
你研发团队在项目开发过程中任务如何拆分的
-
任务的时间是如何评估的
-
项目进度有风险如何处理