专栏名称: 安琪拉的博客
喜欢蹲草的纯粹技术人,用心分享一些互联网的技术
目录
相关文章推荐
秋叶PPT  ·  夸爆!WPS官方接入DeepSeek,自动化 ... ·  昨天  
跟我学个P  ·  除了DeepSeek,这个AI工具做的PPT ... ·  2 天前  
跟我学个P  ·  用DeepSeek为《哪吒2》做了份PPT, ... ·  3 天前  
51好读  ›  专栏  ›  安琪拉的博客

读者问题集锦

安琪拉的博客  · 公众号  ·  · 2021-05-19 17:50

正文

近期的收到读者的一些问题,懂的我都尽量回答了,有些问题没回答可能是真的不知道,当然不知道我也尽量找认识的大佬请教, 或者当时在 忙, 。列了几个比较有代表性的问题。

  1. 关于架构方面的问题?对于当前项目架构升级


先说一个前提:对业务开发而言,技术是了为业务目标服务的。

项目不是架构越复杂,技术栈越高大上越好,合适就好。

比如业务就几十的QPS,搞个弹性扩缩容、自适应分布式限流意义不大。

有些读者跟我说,自己的项目没有高并发场景,说实话,真正高并发的系统能有几个,也就头部互联网公司的一些对C的系统,但是可以从别的方面看系统的难点和亮点。

- 有的业务QPS 虽然 不高,但是业务流程复杂,如果系统设计能把流程清晰且结构化的表达,模块之前划分清楚、模块内部封装的干净也是很值得说的。

- 有的业务对稳定性要求高,停机损失严重,所以如果能把稳定性做好,保障系统稳定运行也是值得说的。

如果系统有高并发的需求或者需要做高并发的技术规划,可以看一些高并发系统设计方面的资料,但是这块实践很重要,因为真实环境会有各种各样的问题,远比书上的复杂。

关于稳定性打算单独写一篇文章介绍一下,主要是讲讲蚂蚁这边是怎么为双11、双12、五福等大促做准备的。

主要涉及到蚂蚁的LDC架构、如何做容量评估?如何做业务域压测和全联路压测、弹性扩缩容、请求 洪、 合并、缓存防击穿、缓存预热、限流等等。


  1. 关于offer选择

字节 vs 腾讯?

腾讯的岗位找朋友打听了一下,字节这个读者自己详细的问了一下HR,这里不说太具体信息,说说offer选择的原则( 涉及读者的 隐私 )。

  • 业务前景,这个 工作越久 越会觉得重要,好的 业务 能让你无论 是技术积累还是薪酬 比别人快好几倍; 同一个公司做不同业务差别也会很大,比如做淘宝交易系统和做公司内部流程系统,同样一行代码,前者可能服务上亿人,后者公司内部员工几百人,前者高频,后者低频。没有看不起内部流程系统的意思,但是你要知道你的代码服务的人越多,越有价值,重要程度越高,想清楚了这点也就知道应该选什么业务做。

  • 直系Leader,有时候甚至比第一点还重 要,在职业初期很重要,如果你的Leader牛逼而且愿意培养新人,对于刚进入职场的小白来说真的是最大的幸运,你要是聪明好学还勤快,Leader升到类似P10、P9的岗位,带着你也能跟着升到P7、P8,进步最快的方式就是向优秀的人的学习。

  • 前面二点总结起来就是:跟对人,做对事。

  • 技术栈  这位读者刚开始纠结选Java还是Go,语言 其实 没那么重要,更重要的是技术素养,比如我做业务用Java,JavaScript 和 Python 某些场景也会用。越到后面, 语言或者技术栈只是实现 想法 的工具,工具无所谓好坏,哪个好用用哪个。

  • 钱  这个非常重要,读者可能会决定这还用你说嘛,谁都知道要搞钱。那 为什么把这个放在最后,因为在 职业前期 ,相比前面几点,这个相对而已没那么重要。 除了SP、SSP,大部分应届进大厂薪资差距不会特别大。如果能做个好项目,跟对好老板,起飞只是早晚问题,我身边的认识的一个朋友,因为毕业就进了核心团队,就跟了个好老板(当时也是很多选择),毕业2年升P7,毕业5年提名P8,今年8基本是稳了。

  • 上面总结就是,路要选择对,路走对了,就不怕远,这句话很多人熟

  1. 要不要报培训班?



这个我觉得要看个人情况,之前写过一篇专科如何逆袭进大厂,里面介绍了我们组的秀哥,双非大学,大学专业学的是制药,通过自学进阿里。

秀哥属于自制力非常强的,我们老板说他 每天 下班回家就是学习,一直持续了大 半年。

如果觉得自己没那个自制力,或者完全没有项目经验,或者正好学的是自己项目中需要(有应用场景可供实践),可以补齐自己短板的,是可以报一个。【补习班的老师看到请后台联系我,自觉把广告费打给我】

但是本身就是从事开发,做的项目也还不错,其实深入研究自己项目,把项目技术栈研究透传,性能优化好可能更合适,当然适当选择一些体系化的课程也是可以的,但是但是但是( 说三遍 )一定要实践(不然你学完很快就忘了)。


4 . 面试题,500w数据存Redis?

遇到这种问题,一定不要急着回答。

多问一句,这个实际应用场景是什么?(除非只是单纯为了考你)

首先要搞清楚面试官想考你的是什么?Redis数据结构还是程序设计?

回到这题,从二个方面考虑

- 如果是程序设计,可以把500W数据Reduce拆分成n个分组,多线程并发写;

- 如果是考Redis相关技术,可以用Redis 的 管道技术( pipeline ,通常Redis命令是客户端发送一条指令需要阻塞等待Redis服务端的响应,但是 管道技术可以 在服务端未响应时,客户端继续向服务端发送请求,最终一次性读取所有服务端的响应。提高了redis服务的性能,如果存500W数据有时间要求很适合。

当然上面二个可以结合起来一起用。


5. 线程池CachedThreadlocalPool 为什么叫Cached?

这个问题我之前也没仔细研究过,后来看了源码注释大概清楚了。

上面是 newCachedThreadPool 的定义,简单说一下:

- 核心线程数为0,最大线程数为 Integer最大值;

- 空闲 线程的 超时时间是60秒(60秒不执行任务 线程 销毁)

- 任务队列为SynchronousQueue 这个阻塞队列没有存储空间,这意味着只要有请求到来,就必须要找到一条工作线程处理它,如果当前没有空闲的线程,那么就会再创建一条新的线程。

new Cached Thread Pool叫 cached的原因是他缓存了线程(复用线程),其他线程池也会缓存线程,但是区别在于cachedPool没有让任务排队,来一个任务,要么复用已有线程处理,要么新建一个线程处理。

可以类比Redis,后面我都把 new Cached Thread Pool 简称为cachedPool

- Redis 缓存的是数据, cached Pool







请到「今天看啥」查看全文