大厂竞争这么激烈,为什么还是挤破头都要进,小厂不香吗

很多贩卖焦虑的人士一直在宣传35岁淘汰论,但我知道的几个35+从大公司出来的程序员,他们并没有被淘汰,依然混得不错。

大厂竞争这么激烈,为什么还是挤破头都要进,小厂不香吗_第1张图片

通关地图

很多人很排斥大企业,经常说的一句话就是“面试造火箭,进厂拧螺丝”。

的确如此,大厂由于分工非常明确,工具非常完善,使得大多数岗位的活非常没有技术含量,就是按照一个标准继续往下做就好了,没有惊喜也不大会有改变。我自己亲身体验过,我在阿里两年,就写了两年业务,今天功能A,明天功能B。

我之前一直觉得在这两年当中,我应该什么都没有学到,所有的技能都是靠我自己业余自学的。我也一度有些后悔,觉得当初自己是不是选错了,不应该去阿里。但我来了新加坡不久之后就完全颠覆了这个看法,因为我发现我并不是什么都没有学到,有点像是冰山理论,我看到的只有水面上的一点,大部分都藏在水下。

什么意思呢,我就用拧螺丝举个例子好了。比如你在一家造航母的大公司当中做一个螺丝工,今天拧拧这个螺丝,明天拧拧那个螺丝。有一天你受不了离职了,到了一家小船厂。你一进去就发现小船厂的厂房顶太低了,现在造小船还好,有朝一日要造大船的话就不够用了。过了两天,你又发现现在拧螺丝的扳子不对,耐久度非常差,只能拧某一个型号的螺丝。又过了两天,你发现建造的船设计也有问题,居然不是流线型……

你在来小船厂之前你以为你只是拧了两年螺丝,什么都没学到,其实你已经看到了通关地图。我现在有的时候也还是会后悔,但我后悔的不再是当初的选择,而是后悔当时有机会的时候,没有把通关地图看个仔细,导致遗漏了不少。

大厂竞争这么激烈,为什么还是挤破头都要进,小厂不香吗_第2张图片

大佬云集、资料丰富

当初我在阿里认识一个非常非常资深的前辈,他在阿里十来年了,但因为各种原因级别不是很高。我当时问他,既然你对现状如此不满,为什么不想着离开寻找更好的机会呢?

他沉思了片刻跟我说,他说我现在在这里虽然待着不顺心,但是我接触到的人都是非常优秀的。我遇到问题,还可以和你们讨论讨论。我如果出去了,我要是再遇到问题,可能连一个讨论的人都没有。

我当时听听只是觉得有道理,现在再回想起来,感受非常深刻。三观、格局、能力,能够进入大公司的,这三个方面一般都不会太差。别的不说,就拿个人能力而言,我出国以后见识了许多各种海外名校的同事,和当初阿里的同事相比说真的也不过如此。我也不知道是不是我的偏见,但就我感受下来,国外的工程师格局相对偏小。

除了优秀的同事之外,大公司里往往还有丰富的内部文档和资料。我当时在阿里内部看到了很多优秀的文章,也有很多优秀的技术沙龙和分享。现在想起来两年下来,也没有去过几次,文章和资料看得也不算多,现在想想颇为遗憾。别的不说,就拿推荐领域而言,近些年质量不错的论文往往都来源于大公司尤其是国内的大公司,以阿里、华为和头条为主。除了公开的论文,公司内部还有很多技术相关的资料和文档,这些真的可以说是有价无市,非常珍贵。

不断学习提升

都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。

技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家

Android相关的书籍包括《Android权威编程指南》、《Android开发艺术探索》等,进一步的还可以去阅读Android相关源码,配合《Android源码设计模式解析与实战》等书籍,对阅读源码大有裨益。

那么如何构建完整的知识体系,深挖Android技术?

《Android架构视频+BAT面试专题PDF+学习笔记》

以下分享一下我6年来具体的学习路线及笔记文档,希望能帮助到有心提升技术的朋友!

目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。

知识要点:

1、Java序列化、泛型、反射

2、虚拟机底层原理

3、Android内存原理

4、Java高并发原理详解

5、编译时技术掌握与实战

6、JDK高级动态代理

7、高级数据结构与算法

8、Java IO操作

大厂竞争这么激烈,为什么还是挤破头都要进,小厂不香吗_第3张图片


s://blog.csdn.net/A_pyf/article/details/114339121)Android R Frame Work源码与UI


在Android中,Framework泛指系统架构层。Framework的中文意思是“框架”,在软件开发中通常指开发框架,在一个系统中处于内核层之上,为顶层应用提供接口,被设计用来帮助开发者快速开发顶层应用,而不必关心系统内核运行机制,通常Framework都会隐藏main函数等应用程序必须的组件,开发人员只需把精力放在功能代码的实现上。说简单点,Framework具体的工作也就是为android应用开发的开发人员提供了一系列的服务和API的接口。

UI其实并不是单纯指用户看到的效果。因为在Android开发中,每个控件背后都有一套深层次的体系在支撑,自然而然,会UI不单纯指的是会自定义控件,我们还应该知道自定义控件背后的执行流程,包括从Activity的创建,XML的解析,到每个控件的测量、布局、绘制。当然在中间还夹杂着比如动画、事件分发机制、嵌套滑动机制等知识点。还有谷歌提供的一些UI框架也使我们要掌握的对象,比如Jetpack组件库、Material Design等。

知识要点:

1、FrameWork源码解析

2、Android常用组件深入解析

3、UI的深度剖析与自定义

4、Jetpack全家桶

5、Android R

6、RXJava响应式编程框架设计

大厂竞争这么激烈,为什么还是挤破头都要进,小厂不香吗_第4张图片

360°全方位性能调优


性能优化是针对整个app开发而言的。一个好的项目被开发出来,不单是产品要好,开发者也需要知道,为什么我开发的这个app能够在绝大多数的手机运行,为什么用户在使用的时候绝大部分的手机不会出现bug。我们的apk文件可以优化到很小的,比如你做一个项目,打包之后可能是10m,但是经过优化之后可能就只有8m,甚至更小。另外,我们做的项目安全性如何?我们凭什么断定我们做出来的app安全性好。这都是性能优化中会涉及的。

1、设计思想与代码质量优化

一个app的性能好不好我们需要从两个层面努力。第一个层面:从写代码的时候就需要注意,让自己的代码是高性能高可用的代码,这个过程是书写高性能代码;第二个层面:对已经成型的代码通过工具检查代码的问题,通过检查到的问题来指导我们进行代码的删改,这个过程被称为调优。

如何写出高性能的代码呢?那就需要我们具备深厚的代码功底,这就是代码的基础,如:数据结构达到可以根据应用场景写出符合当前场景的特殊结构,比如google针对Android平台特征研发了sparseArray替代HashMap。另外,对常用的算法有自己独到的见解,leetcode上有刷个上百道题,这样差不多可以达到精通最常用的排序查找动态规划等算法的能力。再者,高效的算法以及节省内存的数据结构如果配合优秀的符合应用场景的设计模式,那么,这些就为高性能的代码提供了实现依据。

另外一个就是对写好的代码进行调优,那么调优的方向就是使用Profiler工具进行测试和检查,看哪里有性能消耗大的操作,然后分析对于代码的问题。调优的方向就变成了如何对内存调优,对耗电调优,对网络流量调优,当然,还有对启动速度,页面切换效果与速度,开机白屏体验,闪屏方面的原因等进行分析和调优。最后再加上一个屏幕适配相机适配。

2、程序性能优化

启动速度与执行效率优

化布局检测与优化

内存优化

耗电优化

网络传输与数据储存优化

APK大小优化

3、开发效率优化

分布式版本控制系统Git

你可能感兴趣的:(程序员,架构,移动开发,android)