半年时间,从机械转行 Java,二哥的读者真牛逼!-阿里云开发者社区

开发者社区> 沉默王二> 正文

半年时间,从机械转行 Java,二哥的读者真牛逼!

简介: 半年时间,从机械转行 Java,二哥的读者真牛逼!
+关注继续查看

一个读者,也是洛阳的,刚好是我老乡,半年前给我说,准备自学 Java,还是机械专业的,明年秋招找工作。这不,半年过去了,他就找到了,现在去携程实习去了,薪资水平还不错。


携程和 BAT 这些大厂在薪资上肯定是有差距的,但携程也算是国内能排上号的互联网公司了。考虑到这个读者还是非科班,只花了半年的时间,所以我觉得还是挺牛逼的。


一面的时候他曾给我发消息,说面试官问他 Java 虚拟机栈方面的知识点,没回答上来,我就立马写了那篇 Java 虚拟机栈的文章甩给他,没想到,万万没想到,还真的帮上了忙,二面的时候就回答的很顺利。


其实我也没帮他太多,更多的还是靠他自己的努力!


看到这,肯定有读者按捺不住了,想问二哥,“都问了哪些问题啊,能不能分享一下啊。”那必须滴,二哥已经帮大家问过了。


先说一面的知识点:


Java 的基本数据类型以及占用的内存大小;

Java 内存模型;

线程间通信;

线程池参数以及意义;

MySQL 的锁;

遇到并发问题该怎么办;

字符串常量池以及相关问题;

网络通信协议。

再说二面的知识点:


Spring 的 IoC;

让你写一个类似于 MyBatis 的 ORM 框架,你会怎么写;

数据库并发操作会带来哪些问题,以及如何解决;

MySQL 默认的隔离级别是什么;

数据库索引相关的知识点;

JVM 的相关知识点;

了解过那些设计模式;单例模式口述一下;

快排;

可以看得出,都是非常基础的知识点。我这里有一份 GitHub 上星标 115k+ 的 Java 教程,里面涵盖了 Java 所有的核心知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机,内容不多,只讲重点。


GitHub 星标 115k+的 Java 教程,超级硬核!


1)集合类,面试经常被问到的知识点有: ArrayList 和 LinkedList 的区别,它们在增删改查时的时间复杂度;HashMap 的数据结构,底层是通过数组+链表实现的,当链表的大厂大于 8 时,转为红黑树,推荐大家看一下这篇文章,美团技术团队出品的。


https://zhuanlan.zhihu.com/p/21673805

看完了这篇,面试官再问 HashMap 基本上就可以对答如流了。


2)多线程并发,面试一般都会问进程与线程的区别、synchronized、volatile、锁、ConcurrentHashMap、CopyOnWrite、线程池、CAS、AQS 等等这些知识点。推荐大家看看我之前给大家推荐过的一份小册子,阿里的几位大佬写的,名字叫《深入浅出 Java 多线程》,多线程并发这块要学习到什么程度呢?我来问一个,在使用线程池时,因为使用了无界队列,远程服务异常的情况下导致内层飙升,怎么解决呢?


3)Java 虚拟机,并发编程和 Java 虚拟机应该说是 Java 的知识体系中最重要,也是最难的两块了,也是面试必问的题目。其实学习 Java 虚拟机不只是为了面试,还能帮我们更深入地理解 Java 这门语言,也能为线上排查问题打下基础。关于 Java 虚拟机的知识点,我用思维导图列一下,大家可以按图索骥,去阅读相对应的文章。


image.png


要想学好 Java 虚拟机,必须得啃周志明老师的《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》,目前已出到第三版。如果觉得比较难懂的话,其实可以到 GitHub 上看看我给你推荐的这份读书笔记。


https://github.com/TangBean/understanding-the-jvm

其中 Java 内存管理机制和 Java 虚拟机程序执行需要重点掌握,至于虚拟机性能监控以及故障处理,其实可以放到工作以后再去实践会好很多。


4)框架原理,我建议大家不要对学习框架有任何的抵触,不要总觉得学习 Spring 全家桶很 low,其实不是的,学会了 Spring 全家桶,你就可以上手做练手项目,做了练手项目,你就会感觉学过的那些知识都可以落地了。


学习框架当然不能只停留在会用的层面上,还得懂一些原理,比如说 Spring 的 AOP、IoC、DI 等等,@Guide 哥的《面试突击》解释得很清楚,一起来看一下。


AOP(Aspect-Oriented Programming),也就是面向切面编程,能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。


IoC(Inverse of Control),也就是控制反转,是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。DI(Dependency Injection),也就是依赖注入,原来叫 IoC,能让人更加直观和清晰地理解其背后所代表的含义。


如果还不理解的话,可以看看《码农翻身》,里面讲的更生动一些。


5)数据库,面试中最经常问的就是 MySQL 和 Redis。关于 MySQL 的学习,我之前也推荐过学习资料,书的话就是《SQL 必知必会》和《高性能 MySQL》,在线学习网站的话,就上 MySQL Tutorial,内容还是非常全面的,下图是 MySQL 在面试中常见的知识点。


image.png


MySQL 的数据是存在硬盘上的,而 Redis 的数据是存在内存中的,所以读写速度非常快,于是 Redis 就广泛应用于缓存了。除了做缓存之外,Redis 也经常用来做分布式锁,甚至消息队列。


像 Redis 的内存淘汰机制、持久化机制、缓存穿透、缓存雪崩等等是面试中经常被问到的点,学习资料的话,推荐看一下老钱的《Redis 深度历险:核心原理与应用实践》。


6)计算机基础的相关知识,这就包括操作系统、计算机网络、数据结构与算法等等。


操作系统,也就是 Operating System,是管理计算机硬件和软件资源的程序,是计算机的基石,像 Unix 是用 C 语言写的。记得大学阶段,最经常用到的一个快捷键就是 Ctrl+Alt+Delete,为了调出 Windows 的进程管理程序,看哪个比较占内存就把它给强制结束掉,免得打游戏的时候电脑卡死,嘿嘿。


操作系统负责的工作有:管理设备、文件读写、控制进程、管理内存等等,算是所有软件中的老大,掌握着生杀大权。推荐的学习资料有《现代操作系统》、《深入理解计算机系统》,两本用来压泡面或者垫显示器的神书。


套用 @Guide 哥在他的知识星球里说的一段话就是:


操作系统中的很多思想和经典算法,都可以在日常开发使用的各种工具或者框架中找到影子。

比如说 Redis 和操作系统的高速缓存就很像,Redis 是用来解决程序处理速度和访问 MySQL 速度不对等的问题,而内存就是用来解决 CPU 处理速度和访问磁盘等外存速度不对等的问题。


现在想想,觉得挺遗憾的,大学阶段没有把计算机网络这门课学好。当时把所有的重心都扑到了 Java 这门编程语言上,但其实我的专业是计算机网络。


像下图中的这些计算机网络的相关知识点也是面试中的常客:


image.png


像《TCP/IP 详解,卷 1》是讲解网络协议的经典书,不过学习难度比较大,可以看一看《图解 HTTP》以及《网络是怎样连接的》这两本书,有大量的图片穿插,阅读起来就不会那么枯燥。


数据结构与算法,@程序员吴师兄画过一副思维导图,里面几乎涵盖了所有数据结构和算法书籍中都会讲到的知识点。




常见的数据结构有数组、链表、栈、队列、哈希表、二叉树、堆和图;常见的算法有递归、排序、二分查找、哈希算法、贪心算法、分治算法、回溯算法和动态规划等。


可能很多时候,我们会觉得数据结构与算法不重要,不如直接学习 Java、学习 Python 更直接一点。但我想说的一点是,学习数据结构和算法能让我们学到一种思想:就是如何把现实问题转化为计算机语言来表示(来自《码农翻身》的作者刘欣大佬)。


另外一个很现实的问题是,面试要考,尤其是一些大厂,很喜欢考。所以必须玩得 66 的,ACM 的题,或者 LeetCode 的题目,必须刷到自己都感觉废了的地步:他喵的,BAT 大佬的这份刷题笔记太强了!


最后,二哥必须要说的一点是,月薪两万只是一个数字,每个人的情况都是不同的,不同的城市,不同的公司,不同的面试官,不同的学历,不同的面试表现。


但要学习的内容我觉得还是很具有普适性的,虽然没有总结得很完全,但是我觉得这些都是非常必须的,从去携程实习的这个读者给出的面试题就能看得出。


另外,二哥要强调的一点是,一定要实战能力强,到了实习的时候能独立地把安排的活给完成了。


我是沉默王二,端午安康,大家可以三连支持了!希望大家多来给报喜呀~~~~


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
26776 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10017 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13818 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9154 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
4653 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4488 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7344 0
+关注
沉默王二
微信搜索「沉默王二」,回复关键字「00」获取硬核计算机基础资料。
1084
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载