当前位置: 首页 > 科技观察

金三银四季,阿里工作10多年Java大牛的“心得”,献给迷茫中的你

时间:2023-03-19 20:37:56 科技观察

金三银四季,阿里巴巴在Java工作10多年的“心得”,献给迷茫的你“这四个字背后的含义。工作的第一年,往往一切都充满新鲜感,什么都学,又是进取的一年;WEB行业的知识更新很快,今天一个框架的新版本,明天又是一个新的框架,有时候往往是基于项目,需要不断学习新的东西;因此,很多时候觉得自己用了很多东西!但是真正深入研究的东西并不多。面试是跳槽后需要面对的第一个问题;以及重点不同公司的面试是不一样的,但是有一个共同点:Java基础是必须的,工作第一年可能会问你对String对象创建的理解,常用的框架有哪些等等。;-初三rk,问你Java的内存分配机制是什么,类是怎么加载的等等;-在工作的第五年,我问了你常用的设计模式有哪些,在工作中扮演什么角色,如何独立完成一个模块等等;可以看出这是一个典型的程序员的成长过程:使用Java-----→深入理解Java积累经验-----→独立的设计和分析能力-----→独立的多面手!因此,必须学习:Oracle是最常用的数据库(银行项目等当然需要DB2),掌握存储过程、触发器等的使用;UML项目经常需要写文档,项目经理的基本功,程序员走向设计的基本功;linux系统需要掌握常用的linux命令——在windows操作系统上部署的项目很少。其他的我就不多说了,大家可以补充。在学习上,兴趣是最大的老师;项目驱动也是一个不错的选择。简而言之,你不能不学习。一、积累行业背景行业背景很重要;工作3年后,必须确定自己的行业背景,比如:从事过电信行业,从事过银行项目,从事过ERP行业等。程序员不可能一直写代码。即便是写代码,也要知道业务逻辑,满足需求;比如:你一直在搞流媒体的研究,让你转到一个银行的项目,完了,一切从头学起吧,以前的行业经验就不要了;而且,企业招人的时候,希望找的是容易上手的人,无需培训入行已久的程序员;经常换工作的朋友一定要注意这一点;长期从事一个行业,就可以成为这个行业的专家;我们经常可以看到一个项目组的某个leader,代码写的一般,但是可以和客户顺畅的沟通,控制新需求的引入,bug的修正等等;而客户也愿意和他打交道,因为只有他才能维护那些老项目,他甚至熟悉系统中每个表的结构——你想在这个行业待多久。第二。合理的职业生涯规划什么是职业生涯规划——是你短期或长期的职业生涯规划!大道理不说,简单说。先问你几个问题:你已经工作好几年了,你愿意像新人一样做一个简单的程序员吗?-b。你想继续写代码而不关心其他任何事情吗?-C。一个项目的前期需求、设计、后期部署维护,领导找你,你说我们搞不定,好吗?程序员不是敲代码的机器。第一年不懂的东西太多了。可以听从老板的安排,敲代码,看数据库,测试自己和别人的代码;但是第二年,你还是这样吗?不可能,一年的经验就可以入行了,是时候学习如何进行需求分析,如何设计数据库,如何写各种文档,如何写出更好的代码了?这是对高级程序员的要求!什么是高级程序员?具有分析和设计能力;能够进行技术研究;某行业背景深厚的程序员。所以,一个项目立项后,要积极参与初步设计,和老同志一起思考分析问题,吸取经验!好吧,你长大了!不要以为程序员就是写代码!!!而且,通过一个项目的开发,你需要能够大致统计一个功能的开发时间;比如一个模块有20个小功能点,你开发了80个小时,每个小功能点平均需要2个小时——这时候可以提前评估Workload。当然,每个人的效率和工作质量是不同的,因人而异,但是大概的工作量应该是可以统计的,用来统计一个项目的工作周期;具备以上能力,你至少是项目组的骨干!这个时候你可以带领小弟去做开发,而不是做一个普通的leader。很多公司的项目骨干和项目经理都不是招聘来的,都是培养出来的——工作2年,思维能力好,动手能力强,非常好!OK,这时候项目经理和公司的中层管理人员可能已经注意到你了,他们会给你分配更多的任务来慢慢培养你。是啊,领导突然给他布置了很多任务,他一开始默默接受,后来就开始抱怨了!领导和他谈过之后,他想通了!一段时间后,他基本习惯了,很快就能完成;后来他成了我们的领袖。那些人中的新项目负责人),和领导你的人一起努力学习,努力工作,你很快就会成为领先者!如果你工作多年,是个老手,一定也善于带人,能够扶持小弟!因为只有小弟弟长大了,你们的负担才会减轻,项目才会顺利进行!而且,资深程序员(比如本科生)工作四年左右(一线城市9K-25K)工资已经达到瓶颈。这时候就需要“转型”了——高级程序员只是你的一部分能力,系统分析师、架构师、项目经理才是你应该告诉别人的职位,薪水还能再涨。第三,跳槽要学的技巧很多。跳槽一直都在发生,但是我建议大家在跳槽之前先想想自己为什么要跳槽。不要跟风。看着同事一个个离开,开始盲目面试(期间没有好好准备)。是因为技术原因(影响了自己的发展,偏离了自己规划的轨迹),还是钱?少,少关注。准备不充分的面试完全是浪费时间,也是对自己的不负责任(如果标题很高,我没说)。今天和大家分享一下这次跳槽过程中整理的Java面试大纲。大部分都是面试过程中的面试题。该项目介绍了大部分情况。这是一道面试题。面试官问这个问题主要是为了测试你的概览能力和全球视野。有些人经常抱怨自己每天都在堆积生意,却没有成长。其实很多时候,业务确实是堆起来了,但也不是没有增长。增长与中间件或技术架构无关。比如我们的需求分析能力、沟通协作能力、产品思维能力、抽象建模能力等等都是很重要的硬实力。好的,现在开始正文:澄清项目的作用澄清项目的价值。(为什么要做这个项目,为用户解决什么痛点,带来什么价值?)明确项目的功能。(这个项目涉及哪些功能?)确定项目的技术。(这个项目使用了哪些技术?)明确个人在项目中的地位和作用。(你在这个项目中的角色?)阐明项目的整体结构。确定项目的优势和劣势,以及如果重新设计项目您将如何设计。确定项目的亮点。(这个项目有什么亮点?)明显的技术成长。(通过这个项目,你成长了什么样的技术?)Java基础List和SetHashSet的区别如何保证非重复的HashMap是线程安全的,为什么不是线程安全的(最好画一张图说明在多线程环境下不安全)?HashMap的扩展过程HashMap1.7和1.8的区别,说明1.8做了哪些优化,如何优化?finalfinallyfinalize强引用、软引用、弱引用、幻引用Java反射Arrays.sort实现原理和Collection实现原理LinkedHashMap应用cloneable接口实现原理异常分类及处理机制wait和sleep的区别数组在内存中如何分配Java并发Synchronized实现原理和锁优化?volatile的实现原理?Java的信号量?静态方法中的同步和普通方法有什么区别?如何实现所有线程都等待一个事件执行后才执行呢?中科院?CAS有什么问题,如何修复?synchronized和lock有什么区别?Hashtable是如何锁定的?HashMap的并发问题?ConcurrenHashMap简介?为什么在1.8中使用红黑树?AQS如何检测死锁?如何防止死锁?Java内存模型?多线程下如何保证i++的结果正确?线程池的种类、区别和使用场景?分析线程池的实现原理和线程调度过程?如何调优线程池,如何确定最大数量?ThreadLocal的原理,使用时需要注意什么?CountDownLatch和CyclicBarrier的用法和区别?LockSupport工具Condition接口及其实现原理。对Fork/Join框架的理解。BeanFactory和FactoryBean?春季国际奥委会明白了,它的初始化过程?BeanFactory和ApplicationContext?SpringBean的生命周期是如何管理的?SpringBean的加载过程是怎样的?如果你想实现SpringAOP,你是怎么做的呢?如果你要实现SpringIOC,你会注意哪些问题?Spring是如何管理事务的,事务管理机制?Spring有哪些不同的事务传播行为,它们的用途是什么?Spring中使用了哪些设计模式?SpringMVC是如何工作的?Spring循环注入的原理?SpringAOP的理解,各种名词,它们是如何相互配合的?Spring是如何保证Controller并发的安全性的?NettyBIO、NIO和AIONetty的线程模型的主要组成部分Netty的线程模型TCPsticky/unpacking原因及解决方法你知道哪些序列化协议?包括使用场景以及如何选择Netty的零拷贝在哪些方面实现Netty的高性能分布式相关Dubbo的底层实现原理和机制描述一个服务从发布到被消费的详细过程分布式系统是如何处理服务治理接口的概念幂等性消息中间件如何解决消息丢失问题Dubbo的服务请求失败如何处理重连机制如何处理会不会出错理解分布式事务如何实现负载均衡,可以实现哪些算法?Zookeeper的用途和选举原则是什么?数据垂直拆分水平拆分zookeeper原理及适用场景zookeeperwatch机制redis/zk节点宕机如何处理分布式集群如何实现序列号唯一如何制作分布式锁使用过哪些MQ,如何使用,各有什么优缺点与其他MQ相比,MQ连接线程安全吗?如何保证MQ系统的数据不丢失?列出你能想到的数据库分库分表策略;分页有什么好处优化悲观锁、乐观锁组合索引、最左原则Mysql表锁、行锁Mysql性能优化Mysql索引分类:B+、hash;什么情况下什么索引事务特性和隔离级别缓存Redis使用Data数据,Redis底层如何实现Redis缓存穿透,缓存雪崩,如何使用Redis实现分布式锁,Redis并发竞争,如何解决Redis持久化,优缺点是什么,如何实现Redis缓存失效策略Redis集群,高可用,原理Redis缓存分片Redis数据淘汰策略JVM详解jvm内存模型说说在什么情况下会出现内存溢出或者内存泄漏?Java线程栈JVM从新生代到老年代的晋升过程的判断标准是什么?JVM中FullGC频繁出现,如何在线排查问题?为什么类加载要使用双亲委派模型?有没有什么场景可以打破这个模型?类实例化顺序JVM垃圾回收机制,什么时候触发MinorGC等操作JVM中一个完整的GC过程(从ygc到fgc)是什么OOM错误、stackoverflow错误、permgen空间错误

猜你喜欢