普通公司员工的编程水平与阿里巴巴有多大差距?

普通公司员工的编程水平与阿里巴巴有多大差距?,第1张

作为一个编程十几年的老程序员,虽然没有进过阿里巴巴,中间换工作时候也拒绝过百度和腾讯的offer,选择了一个更适合自己的互联网公司,编程水平主要决定因素还是和本人基本功有着极大的环境,前几天回答了一个大公司和小公司编码水平谁高谁低的问题,有外在因素影响但主要还是自身,自己没有决心提升自己的编码水平,外界环境再好也没多大意义。

像阿里巴巴这种大公司由于职位安排的比较饱满,正常来讲代码的提交都需要leader的审核通过,在一定程度上能极大的提高代码的质量,在审核机制上会更加严格,并且在测试把关上也会更加严格,普通的小公司在人员配置上可能稍微少一些,会在把关上差一点,严格规范的制度在一定程度上能促进程序员更深层的改进,但本质上还是自身想不想让自己变得更加优秀,愿意不愿意让自己提升的更加快速。

其实提到阿里巴巴这种大公司主要还是人心态问题,觉得大公司一定要比小公司规范,换做经历过大公司的人,还想着在里面自己只是一个螺丝钉,还想着去小型公司让自己发挥的更加彻底,小公司的人又向往着大公司的待遇以及规范。如同没有结婚的人,总想着走进围城,进入的人又羡慕没有结婚的多自由,其实来来回回也就那回事。

曾经也是为了进入大公司舍弃了一个中型公司部门技术经理的职位,现在想象其实很不值当,进入一个成熟的大公司,自己做出的贡献只是沧海一粟,想要向上走特别难,而真正的机会还是在创业公司或者中小型公司,当然这些东西需要亲身体验才能感受到,在年轻气盛阶段很难体味到,就是觉得自己所做的选择是对的,实践辨真知。

希望能帮到你。

以我自身的经历来回答吧!我是做java开发的,在没进阿里之前,我在外面其他公司干了四年。头两年干的最多的事情就是直接把业务翻译成代码,做的最多的事情就是curd。工程化以及结构化设计根本不存在的,什么性能、可扩展性、易用性、可维护性通通不考虑。把功能实现了就可以了,活脱脱的把面向对象的语言使用成了面向过程编程。(因为大家都这样干)主要还是因为刚毕业在这家公司做erp系统,功能可以用就不管了。接下来的两年换了一家电商公司,这也是一个天坑,代码跟 山差不多,我进去做库存的,第一件事情就是熟悉了业务然后进行了重构。前面做这一块的人都差不多走光了,模型抽象,领域分层,模块分层一顿 *** 作下来自我感觉良好。但是叠加了两年的业务以后,妈的差不多也是 山了,为了业务快速迭代牺牲一些也是能理解的。然后我走了[捂脸]。

进入了阿里,我是做中台开发的。这里最喜欢干的就是重复造轮子,干啥都要讲究高可用、可复用、可扩展、可维护、可读性……写代码大抵是这样的一个接口进去写接口一般先上熔断降级开关、分布式锁,然后就是加缓存,接着业务就用领域模型+泛化抽象模型+工厂设计模式+策略模式 这一顿 *** 作下来后,为了支持扩展性还得定制spi扩展点提供扩展。一个业务功能的代码完全是割裂的状态。不过项目跟代码的质量跟之前的公司比确实上升不少。只能说环境的影响很大吧

虽然没有去过大厂,但还是想强答一下,毕竟有不少认识的朋友在BAT工作或工作过。

我的看法是:BAT的牛人多,普通人也多,虽然他们不是每个人都能达到令人仰望的技术水平,但毕竟平台高,所以眼光会变得宽阔;代码要求更为严格,所以普通的程序员也会被逼变得更优秀;身边的牛人多,普通的程序员也会受到影响,提升的更快。

正好今天看到一篇文章,是讲去阿里的面试经历,也分享给大家,看看自己离着【进】阿里还有多大的差距。

Java多线程

线程池的原理,为什么要创建线程池?

线程的生命周期,什么时候会出现僵死进程;

什么实现线程安全,如何实现线程安全;

创建线程池有哪几个核心参数? 如何合理配置线程池的大小?

synchronized、volatile区别、synchronized锁粒度、模拟死锁场景、原子性与可见性;

JVM相关

JVM内存模型,GC机制和原理;GC分哪两种;什么时候会触发Full GC?

JVM里的有几种classloader,为什么会有多种?

什么是双亲委派机制?介绍一些运作过程,双亲委派模型的好处;(这个我真的不会...)

什么情况下我们需要破坏双亲委派模型;

常见的JVM调优方法有哪些?可以具体到调整哪个参数,调成什么值?

JVM虚拟机内存划分、类加载器、垃圾收集算法、垃圾收集器、class文件结构是如何解析的;

Java扩展

红黑树的实现原理和应用场景;

NIO是什么?适用于何种场景?

Java9比Java8改进了什么;

HashMap内部的数据结构是什么?底层是怎么实现的?

说说反射的用途及实现,反射是不是很慢,我们在项目中是否要避免使用反射;

说说自定义注解的场景及实现;

List和Map区别,Arraylist与LinkedList区别,ArrayList与Vector 区别;

Spring

Spring AOP的实现原理和场景;(应用场景很重要)

Spring bean的作用域和生命周期;

Spring Boot比Spring做了哪些改进? Spring 5比Spring4做了哪些改进;(惭愧呀,我们还在用Spring4,高版本的没关心过)

Spring IOC是什么?优点是什么?

SpringMVC、动态代理、反射、AOP原理、事务隔离级别;

中间件

Dubbo完整的一次调用链路介绍;

Dubbo支持几种负载均衡策略?

Dubbo Provider服务提供者要控制执行并发请求上限,具体怎么做?

Dubbo启动的时候支持几种配置方式?

了解几种消息中间件产品?各产品的优缺点介绍;

消息中间件如何保证消息的一致性和如何进行消息的重试机制?

Spring Cloud熔断机制介绍;

Spring Cloud对比下Dubbo,什么场景下该使用Spring Cloud?

数据库篇

锁机制介绍:行锁、表锁、排他锁、共享锁;

乐观锁的业务场景及实现方式;

事务介绍,分布式事物的理解,常见的解决方案有哪些,什么事两阶段提交、三阶段提交;

MySQL记录binlog的方式主要包括三种模式?每种模式的优缺点是什么?

MySQL锁,悲观锁、乐观锁、排它锁、共享锁、表级锁、行级锁;

分布式事务的原理2阶段提交,同步异步阻塞非阻塞;

数据库事务隔离级别,MySQL默认的隔离级别、Spring如何实现事务、

JDBC如何实现事务、嵌套事务实现、分布式事务实现;

SQL的整个解析、执行过程原理、SQL行转列;

Redis

Redis为什么这么快?redis采用多线程会有哪些问题?

Redis支持哪几种数据结构;

Redis跳跃表的问题;

Redis单进程单线程的Redis如何能够高并发?

Redis如何使用Redis实现分布式锁?

Redis分布式锁 *** 作的原子性,Redis内部是如何实现的?

看完了有什么感想,自己和BAT的要求有差距么?

反正我觉得自己想要面试通过是有些困难,很多框架新版本的特性都没有了解过,看来年前还得抽时间学些一下了。

大公司如bat大部分普通程序员,由于做的太专一了,基本上在某一方面做得不错,整体能力差很远,但是自己觉得啥都行。

这么比喻吧,如果说把程序员比作厨师。

普通公司的程序员基本上是各个饭店的大厨,啥菜都会做。

bat是御膳房,程序员什么大菜都见过,但基本上一个大菜也做不了。很多人就是御膳房后勤部切葱花大队的切葱花手

普通公司员工的编程水平与阿里巴巴有多大差距?要说阿里巴巴每个程序员都牛逼得不行那也是扯淡,普通公司牛逼的程序员也不少,这本身就没有一定的定论。

在阿里巴巴这样公司的程序员来说,应该比较幸运的是能够遇到大型互联网软件的开发,比如像架构设计、场景设计等,这对于很多程序员来说应该可以开眼界,参与其中也能锻炼自己。同样的,很多大型软件公司虽然没有阿里这样的场景,但同样也有自己特殊的应用设计、场景在阿里也见不到。

而对于单个程序员的编码水平来说,普通公司与阿里的程序员可能根本就没啥区别。普通公司里也有严格按规范、严格按流程、严格测试等来做软件,进入里面同样可以遇到大牛带领项目、大牛的传帮带等,耳闻目染再加努力实践,这些程序员的水平并不能说就比阿里的程序员差。当然,阿里这样的名气不外乎就是进入时经过了严格的挑选,这些程序员的基础都是不错的,但真正要有水平,那还得除了环境也得要靠自己努力。

但大公司程序员与小公司的程序员还是有一些差异的。小公司人员可能接触的项目基本不大,而像万金油那样啥都接触到一些能搞一些,但深度却不够。比如小公司的程序员今天搞Java编码,可能下个项目就去搞PHP,再下个项目又去搞python等,今天是程序,每隔两个月可能又是下个项目的设计者、Leader等有可能。但恰恰在某一项编码上却又不像某些大公司的程序员那样一个萝卜一个坑儿,又专又精。

另外小公司的开发流程及规范都不够,有些甚至是只要搞出来能运行就可以,所以章法上不像大公司一样规范。甚至有些都没有严格的测试就到客户那里去上线,让客户去当小白鼠,做一个败一个。

所以作为程序员最好是能开始到大公司去学习锻炼规范的软件开发那是很有益的。至于是不是阿里倒不一定,能进入阿里当然好。而说到编码水平,绝大部分还是要靠自己的努力,特别是培养思维能力、基础知识、见多识广、多加实践与交流,对自己编码能力提升是必不可少的。天赋程序员确实有,但绝大部分程序员要说天赋都谈不上,大部分也就是上面几项用了更多的时间吧。

能力上,bat的程序员远超小公司程序员;不要相信那些什么小公司的程序员什么都要做所以咋样咋样,大公司就只是一颗小螺丝钉,自欺欺人而已;大公司的程序员天赋就强于小公司的程序员,技术靠的是天赋+努力,天赋远远重要于努力,你不信那就是你傻

在阿里三年的老人说一下。主要是能够获取和见识到小公司不能给你的经验,场景和挑战

说到电脑的编程,对于学计算机的人来说真的是一件非常头疼的事情,每天的编程工作都要面对各种各样的字母,各种各样的特殊符号,一般人看见也就只能一懵一懵的。每个程序员之间也都是有技术好技术低的,并且程序员在选择公司的时候也面临很大的困难。

现在 社会 上找工作的人都有一个普遍的现象,在小公司工作的人都想去大公司,在大公司工作的人想去中小企业工作。每个程序员都想得到一个展现自己的机会,让自己所学的知识有所用武之地。能力较强的程序员就去了大公司,能力有点差异的就去了中小企业,但是这两者在各自公司的发展并不一样。

在中小企业工作程序员有可能会在公司有更大的发展空间,在大企业里面有着许多优秀的程序员,就像是阿里巴巴,有可能在这个团队里面自己的能力不能跟好的发挥。有一点要清楚,技术高的人在一起会越来越优秀,他们各自有各自的特点,都会互相学习互相进步,前进的动力也大。普通公司的程序员自我提升的空间较小,没有像阿里巴巴这样的公司程序员水平高。

大企业对程序员的要求也很高,这些程序员所要面对的困难也非常大,逼迫着自己去提升自身的能力,如果两个技术相匹配的程序员一个去普通企业,一个去阿里巴巴这样的大公司,在工作一段时间后,在阿里巴巴工作的程序员要远远超过普通公司的程序员。虽然大公司的程序员想去中小公司,但是对他们更是一种较大的损失。

更多优质内容,请持续关注镁客网~~

大公司的程序员,在代码专精度方面确实超过小公司程序员。他们往往在技术的某一方面钻研颇深,在代码实践上做得细腻完美无可挑剔。小公司程序员在专精度上不如bat程序员,因为大环境使然,无法让一个程序员只负责某一模块的代码,他们往往一个人当两三个人用,常常遇到的复杂业务用现有框架和技术无法解决,需要自己结合多个技术框架和知识点才能解决复杂的业务。

所以都是程序员,环境和平台造就了程序员代码风格和侧重点不同,但就工作态度和对技术的专注程度来说,大公司的程序员无疑是有更优异的条件来养成这些良好习惯的。作为程序员,一生还是应该去大厂体验不同的企业文化和更高素质的从业人员,自身的见识和深度也会有所不同。

单纯从技术上来说,大公司是小公司没法比的,

大公司系统要更加复杂,研究的东西更加深入。

比如高并发,大数据,

小公司没有那么大流量和数据量根本没办法研究,

大公司一个系统N台机器,

为了节省资源就要研究怎么使机器能力最大化,优化代码,优化逻辑。

小公司可能一两台机器就能支撑一个系统,只要没bug就能正常运行。

非技术层面的就看公司的业务能力了。

个人看法,

在 Mysql 5.6 之前版本中 , 如果要修改一个表的ddl信息 ,需要锁表 。

具体步骤如下:

下面是Mysql官方文档对于DDL *** 作的总结:

http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html

http://dev.mysql.com/doc/refman/5.7/en/innodb-create-index-overview.html

可以使用 Alter 语句支持 DDL 特性 ,比如可以用 LOCK = NONE 无锁变更。

percona是一个开源产品 , 是管理Mysql的工具。

PT-OSC(Percona Toolkit Online Schema Change)

https://www.percona.com/doc/percona-toolkit/3.0/pt-online-schema-change.html

Percona Toolkit 包含很多 mysql 管理的功能 ,现在要说的是 online-schema-change上

PT-OSC 原理是建表 ,使用触发器同步数据 ,然后原子性rename。

这样可以支持在线无锁,不停机Online-DDL 。

具体步骤如下:

Percona 有一些限制和缺陷 ,根据它的原理 ,原表不能存在触发器 ,这玩意是唯一。另外原表必须存在PK或者UK。另外就是触发器的问题了,触发器带来性能开销,并且无法停止,那我就不能控制我同步的开关和速度。

但是gh-ost说它可以。

https://github.com/github/gh-ost

go-ost基于bin-log同步 , 基于binlog肯定都是伪装成一个replica。

由于使用单线程回放binlog来替换触发器,所以增量DML回放效率不如触发器,因为pt-osc的增量回放并发度是与业务DML并发度相同的,是多线程的。

相对于percona的优势是:

因为出的太晚了 ,然后percona 和 gh-ost等等开源产品已经大规模实践了,Mysql就更加没什么实践案例和经验了,大家就不太愿意尝试或者迁移了。

大厂来说基本上都是平台封装了,类似idb ,会把无锁变更细节屏蔽了,只需要提工单就可以了 ,但是底层基本上也是建表同步rename个思路。

小公司的话,可以使用percona 、 go-ost 等工具。

MySQL 8.0 Online DDL和pt-osc、gh-ost深度对比分析

Mysql Online DDL

pt-online-schema-change

gh-ost

MySQL5.6在线表结构变更(online ddl)总结

 你要的全在下面:数据库已经有4代了产品很多。

DBA课程更新内容大纲:

序章 DBA职业体系与数据库产品趋势

What is DBA?

DBA成长体系与职业方向(0-30W-50W-100W-???)

数据库发展历史,产品迭代趋势与职业学习方向

第一部分 OLTP数据库-MySQL(约1天)

MySQL基础入门

MySQL数据库简介

什么是数据库?什么是OLTP?

为什么学习MySQL?MySQL产品迭代

一二线大厂MySQL主流版本功能使用与特性介绍(5.1,5.6,5.7,8.0)**独家**

MySQL部署与管理体系

5.7,8.0版本企业规范部署,启动

MySQL管理体系讲解

MySQL产品架构分析与基础管理

MySQL基础架构解析(一条SQL是如何执行的)

MySQL启动过程

MySQL连接的生命与使命

MySQL表结构实现原理

MySQL开发应用(约1.5天)

MySQL       SQL基础应用

声明式式语言与SQL语言

SQL语言应用场景与sqlmode

MySQL开发工具选择与使用

MySQL字符串类型与字符集

MySQL语句类型介绍(DDL,DCL,DML,DQL)

SQL之查询基础

SQL之聚合与排序

SQL之数据更新

SQL之复杂查询

SQL之集合运算

MySQL       SQL高级处理与开发

函数开发与应用

存储过程,触发器,事件

表分区管理及企业级应用场景

Online DDL解析与开源生态OPS

窗口函数讲解及应用场景

MySQL JSON开发及应用

一二线大厂MySQL企业级开发规范详解**独家**

MySQL核心技术

MySQL       InnoDB索引实现原理及执行计划分析(约0.5天)

索引介绍

1.      索引的由来

2.      表和索引结构

3.      表聚簇与索引行

4.      表行与索引组织表

MySQL索引介绍

InnoDB索引B+ tree的索引设计

聚簇索引与二级索引

InnDB索引插入过程

数据类型对索引应用的使用影响

执行计划介绍及结果剖析

索引优化基础实战演练

企业级索引优化实战案例(亿万级QPS的索引优化与索引上线)**独家**

MySQL InnoDB存储引擎技术内幕与深入讲解(约1天)

Mysql存储引擎介绍与功能特性

InnoDB引擎源代码目录结构与存储引擎文件组织

InnoDB存储引擎核心架构介绍及解析

InnoDB数据存储结构

InnoDB事务详解及ACID特性解析

InnoDB 日志管理机制Undo与Redo

InnoDB事务与隔离级别

InnoDB MVCC及锁机制

MySQL日志管理与实战(0.5)

General log详解

Error log详解

企业级Binary log with Data pipeline **独家**

企业级Slowlog场景应用**独家**

MySQL备份恢复与迁移(0.5)

备份工具介绍与使用场景解析

一二线大厂过万数据节点备份策略**独家**

一二线大厂Mysqldump核心原理与企业级实战演练**独家**

一二线大厂Xtrabackup核心原理与企业级实战演练**独家**

Enterprise Backup企业级生态工具介绍与应用

MySQL主从复制深入(约1天)

主从复制简介与简单搭建

主从复制工作原理解析

主从数据一致性方案讲解(半同步,全同步)

MySQL主从复制实战

1.      延时复制

2.      过滤复制

3.      多源复制

MySQL GTID复制

企业级主从复制故障分析与处理方案

亿级QPS MySQL节点故障转移实战案例**独家**

MySQL高可用架构(1天)

一二线大厂过万集群规模高可用架构MHA+BLB企业级实战**独家**

Mycat,DBLE企业级实战

MySQL企业级优化与实战(约1天)

打造高性能MySQL

企业级MySQL参数优化实战**独家**

企业级T0级别故障案例解析**独家**

阿里云数据库产品(RDS与PolarDB)(选修二选一) (1天)

企业级RDS介绍,使用与故障案例(百度云RDS 运维DBA分享或交流)**独家**

企业级PolarDB业务场景解析(阿里团队PolarDB P7交付架构师分享或交流)**独家**

第二部分 NoSQL

Redis核心技术(2天)

Redis产品介绍与应用场景简析

Redis安装,部署,使用

Redis数据类型详解与应用

Redis集群架构讲解与实战(哨兵,cluster)

千亿级Redis集群参数优化实战**独家**

千亿级企业级Redis核心案例讲解与业务场景解析**独家**

MongoDB核心技术(2天)

MongoDB产品介绍与应用场景简析

MongoDB安装,部署及架构解析

MongoDB数据类型与运维管理

MongoDB集群架构讲解与实战

企业级MongoDB参数优化实战**独家**

BAT千万元级别故障案例分享**独家**

ES核心技术(2天)

ES产品介绍与应用场景简析

ES安装,部署及架构解析

ES日常运维管理

第三部分 NewSQL(4天)

NewSQL-TiDB(仅学此一个+MySQL至少20K起步) TUG核心成员-PingCAP官方认证讲师 **独家**

TiDB产品介绍与分布式数据库技术应用讲解

TiDB集群部署与日常管理

TiDB集群监控详解与指标应用

TiDB核心架构深入讲解与Raft协议深入浅出**独家*

企业级TiDB-DM理解与应用**独家*

1.      58同城亿级流量Mysql热迁移TiDB**独家**

2.      DM集群多源同步复制场景最佳实践(官方认证,业界唯二)**独家**

TiDB企业级业务开发最佳实践**独家**

TiFllash核心架构讲解与实战**独家**

TiDB打造HTAP实时数仓平台架构设计**独家**

Cloud TiDB(K8S上云实战)**独家**

TiDB4.0热升级5.0集群(简介:我司与Pingcap官方{开发30人,交付专家7人,项目经理4人}封闭测试与在线升级全案例解析6.23日项目完结,官方认证业界目前第一的业务场景与投入)

NewSQL-TDengine(1天 选修)

TDengine产品介绍

TDengine单机版与集群部署与管理

TDengine架构体系详解

TDengine企业级参数优化与实战

TDengine业务开发规范与业务场景实战

第四部分 企业级大规模数据库集群运维开发实战(35W+年薪提升)**独家**

数据运维产品架构设计思路(0.5天)

什么是数据运维平台

企业级数据运维平台架构解析

数据运维平台企业级原型设计实战(0.5天)

数据库运维自动化工具开发(Shell,Python)(2天5选2,下期轮换)

MySQL亿万级流量运维平台开发

Redis亿万级流量运维平台开发

ES亿万级流量运维平台开发

MongoDB亿万级流量运维平台开发

TiDB亿万级流量运维平台开发


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8677658.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存