去携程实习了!

你们好,我是二哥呀。git

今天端午节,我带着老婆、女儿、妹妹来青岛了,高铁上,咱们谈起了毕业后去哪里工做的话题。老读者应该知道了,我毕业后去的苏州,从我的情感上来讲,我是很是喜欢苏州的,不只景美,人也美,哈哈。程序员

毕业后去哪一个城市,其实对于咱们程序员来讲,仍是蛮重要的,这在很大程度上决定了你将来的职业发展。github

首先,尽可能选择一线城市,好比说北上广深杭,这里的机会多,薪资起点高,技术紧跟潮流。其次,能够选择省会城市,好比说成都、南京、武汉,薪资相对还不错,技术也跟得上,还能够做为长期发展的根据地,没有意外基本上就在这里定居了。面试

我当时从苏州回洛阳的缘由其实很简单,由于——爱情。加上实习的一年时间,我在苏州了工做了三年半,当时刚涨了一波薪资,签了新的合同,在公司的发展前景也很不错。但为了爱情,必须忍痛离开,异地你懂的。算法

当时对在洛阳的发展实际上是挺悲观的,没想到,这些年,凭借本身的努力,发展的还算是有声有色。我身上的这些变化,老读者应该感觉得很明显,尤为是身边的一些同窗,基本上都以为我特别难以想象,彻底超出了他们的认知程度。数据库

我内心其实对我妹是有规划的,这点她也很清楚,因此她想毕业后去北京作 Java 开发。其实也不必定非要去北京,上海、广州、深圳、成都、杭州这些城市都是可选项。编程

去这些城市,有一个天大的好处,就是起步的薪资会相对较高。这么说吧,一个水平还算不错的程序员,即使是工做了五六年,在郑州这样的二线城市,能拿到一万五的薪资算是表现好的了。对于北京这样的一线城市来讲,状况就彻底不一样了,若是学历 OK,表达能力强,能击中面试官的痛点,起薪拿到两万是没有问题的,若是还有其余优秀的加分项,拿到的薪水会比这个数目高得多。设计模式

退一万步说,即使是拿不到这个数,也会比二三线城市好不少。数组

薪资拿到这个数难不难,固然是有难度的,但只要找到方法,本身肯去努力,就有很大机会拿获得。给你们晒张图,我以前在票圈提到过。缓存

一个读者,也是洛阳的,恰好是我老乡,半年前给我说,准备自学 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 时,转为红黑树,推荐你们看一下这篇文章,美团技术团队出品的。

zhuanlan.zhihu.com/p/21673805

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

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

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

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

github.com/TangBean/un…

其中 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 在面试中常见的知识点。

MySQL 的数据是存在硬盘上的,而 Redis 的数据是存在内存中的,因此读写速度很是快,因而 Redis 就普遍应用于缓存了。除了作缓存以外,Redis 也常常用来作分布式锁,甚至消息队列。

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

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

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

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

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

操做系统中的不少思想和经典算法,均可以在平常开发使用的各类工具或者框架中找到影子。

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

如今想一想,以为挺遗憾的,大学阶段没有把计算机网络这门课学好。当时把全部的重心都扑到了 Java 这门编程语言上,但其实个人专业是计算机网络。

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

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

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

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

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

另一个很现实的问题是,面试要考,尤为是一些大厂,很喜欢考。因此必须玩得 66 的,ACM 的题,或者 LeetCode 的题目,必须刷到本身都感受废了的地步他喵的,BAT 大佬的这份刷题笔记太强了!

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

但要学习的内容我以为仍是很具备普适性的,虽然没有总结得很彻底,可是我以为这些都是很是必须的,从去携程实习的这个读者给出的面试题就能看得出。

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

我是沉默王二,端午安康,你们能够三连支持了!但愿你们多来给报喜呀~~~~

相关文章
相关标签/搜索