前言
蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力、培训、出国、大公司的经历,还有很多很好的朋友。但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员,可惜我错过了,我用这五年时间和很多程序员一样在困惑和迷茫中找不到出路!
路其实一直都在那里,只是我们看不到而已!
以前我一直被公司和技术牵着走,并不是自己在选择技术,而是不自觉地被推到了这个位置上。想想有多少人对于自己将来要从事的职业和技术类型进行过深入思考和比较呢?当我跳出编码后,我开始思考和程序及程序员职业生涯相关的问题,最后发现,影响我们走入今天的困局的竟然是一些我们常常挂在嘴边的话。
貌似这一点适应的行业最广,但是我可以很肯定的说:当你从事Java一年后,重新找工作时,才会真实的感受到这句话。
工作第一年,往往是什么都充满新鲜感,什么都学习,冲劲十足的一年;WEB行业知识更新特别快,今天一个框架的新版本,明天又是另一个新框架,有时往往根据项目的需要来不断学习新东西;所有,很多时候感觉,自己用过的东西真多呀!但是真正深入研究的东西却不多。面试,是跳槽后第一个需要面对的问题;而且不同公司面试的着重点不同;但是却有一个共同点:Java基础是必考的。
工作第一年,可能问你String对象创建的理解,常用的框架是什么等等;
工作第三年,就问你Java内存分配机制是什么,类是如何加载的等等;
工作第五年,就问你常用的设计模式是什么,你在工作中充当什么角色,怎么独立完成一个模块等等;
可以看出——这是一个典型的程序员的成长过程:
使用Java—->深入理解Java积累经验——>独立设计分析能力——>独当一面的多面手!
因此,必须学习:
数据库
最常用的是MySQL了,熟练掌握使用存储过程,触发器等;
分布式
透彻理解分布式架构的好处和优点必然性,适应市场需求,能够去找一些更大的平台发展,提升自己的综合技术能力和薪资。
微服务
微服务化架构并非银弹,它的实施本身就会面临很多陷阱和挑战,涉及到设计、开发、测试、部署、运行和运维等各个方面,一旦使用不当,则会导致整个微服务架构改造的效果大打折扣,甚至失败。
其他就不多说了,大家可以补充。
学习上,兴趣是最大的老师;项目驱动也是不错的选择,总之,不学习不行。
从阿里面试回来给大家分享一下阿里所问到的面试题,不会的朋友不要担心,文末有答案详解!
【阿里天猫、蚂蚁金服面试题目】
分布式锁
1.nginx的请求转发算法,如何配置根据权重转发
2.用hashmap实现redis有什么问题(死锁,死循环,可用ConcurrentHashmap)
3.线程的状态
4.线程的阻塞的方式
5.sleep和wait的区别
6.hashmap的底层实现
7.一万个人抢100个红包,如何实现(不用队列),如何保证2个人不能抢到同一个红包,可用分布式锁
8.java内存模型,垃圾回收机制,不可达算法
9.两个Integer的引用对象传给一个swap方法在方法内部交换引用,返回后,两个引用的值是否会发现变化
10.aop的底层实现,动态代理是如何动态,假如有100个对象,如何动态的为这100个对象代理
11.是否用过maven install。 maven test。git(make install是安装本地jar包)
12.tomcat的各种配置,如何配置docBase
13.spring的bean配置的几种方式
14.web.xml的配置
15.spring的监听器。
16.zookeeper的实现机制,有缓存,如何存储注册服务的
http://17.IO会阻塞吗?readLine是不是阻塞的
18.用过spring的线程池还是java的线程池?
19.字符串的格式化方法 (20,21这两个问题问的太低级了)
20.时间的格式化方法
21.定时器用什么做的
22.线程如何退出结束
23.java有哪些锁?乐观锁 悲观锁 synchronized 可重入锁 读写锁,用过reentrantlock吗?reentrantlock与synmchronized的区别
24.ThreadLocal的使用场景
25.java的内存模型,垃圾回收机制
26.为什么线程执行要调用start而不是直接run(直接run,跟普通方法没什么区别,先调start,run才会作为一个线程方法运行)
27.qmq消息的实现机制(qmq是去哪儿网自己封装的消息队列)
28.遍历hashmap的三种方式
29.jvm的一些命令
30.memcache和redis的区别
31.mysql的行级锁加在哪个位置
32.ConcurrentHashmap的锁是如何加的?是不是分段越多越好
33.myisam和innodb的区别(innodb是行级锁,myisam是表级锁)
34.mysql其他的性能优化方式
35.linux系统日志在哪里看
36.如何查看网络进程
37.统计一个整数的二进制表示中bit为1的个数
38.jvm内存模型,java内存模型
【阿里巴巴核心技术部面试题目】
1.如何把java内存的数据全部dump出来
2.如何手动触发全量回收垃圾,如何立即触发垃圾回收
3.hashmap如果只有一个写其他全读会出什么问题
4.git rebase
5.mongodb和hbase的区别
6.如何解决并发问题
7.volatile的用途
8.java线程池(好像之前我的理解有问题)
9.mysql的binlog
10.代理模式
11.mysql是如何实现事务的
12.读写分离何时强制要读主库,读哪个从库是通过什么方式决定的,从库的同步mysql用的什么方式
13.mysql的存储引擎
14.mysql的默认隔离级别,其他隔离级别
15.将一个链表反转(用三个指针,但是每次只发转一个)
16.spring Aop的实现原理,具体说说
17.何时会内存泄漏,内存泄漏会抛哪些异常
18.是否用过Autowire注解
19.spring的注入bean的方式
20.sql语句各种条件的执行顺序,如select, where, order by, group by
21.select xx from xx where xx and xx order by xx limit xx; 如何优化这个(看explain)
22.四则元算写代码
23.统计100G的ip文件中出现ip次数最多的100个ip
24.zookeeper的事物,结点,服务提供方挂了如何告知消费方
25.5台服务器如何选出leader(选举算法)
26.适配器和代理模式的区别
27.读写锁
28.static加锁
29.事务隔离级别
30.门面模式,类图(外观模式)
31.mybatis如何映射表结构
32.二叉树遍历
33.主从复制
34.mysql引擎区别
35.静态内部类加载到了哪个区?方法区
36.class文件编译后加载到了哪
37.web的http请求如何整体响应时间变长导致处理的请求数变少,该如何处理?用队列,当处理不了那么多http请求时将请求放到队列中慢慢处理,web如何实现队列
38.线程安全的单例模式
39.快速排序性能考虑
40.volatile关键字用法
41.求表的size,或做数据统计可用什么存储引擎
42.读多写少可用什么引擎
43.假如要统计多个表应该用什么引擎
44.concurrenhashmap求size是如何加锁的,如果刚求完一段后这段发生了变化该如何处理
45.1000个苹果放10个篮子,怎么放,能让我拿到所有可能的个数
46.可重入的读写锁,可重入是如何实现的?
47.是否用过NIO
48.java的concurrent包用过没
49.sting s=new string(“abc”)分别在堆栈上新建了哪些对象
50.java虚拟机的区域分配,各区分别存什么
以上所有面试题答案
文章中配套资料——https://docs.qq.com/doc/DWExwWWlwaWdiSHh2