前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跨专业转CS拿下百度java后台开发的干货分享

跨专业转CS拿下百度java后台开发的干货分享

作者头像
牛客网
发布2018-12-24 11:18:40
9090
发布2018-12-24 11:18:40
举报
文章被收录于专栏:牛客网

人们总以为时间是一个小偷,偷走了我们所爱的一切。但,时间是先给予再拿走,每天都是一份礼物,每小时,每一分,每一秒。——《爱丽丝梦游仙境2》

自我介绍

本人是某985硕士,专业是控制理论与控制工程,有幸拿到了百度的offer,以后也打算入职狼厂了,岗位是JAVA开发。从7月底一直到9月底一直忙的不可开交,也拿到了一些offer,7月底到8月底基本上是提前批面试,冷不丁就从某地的一个面试电话就来了,怪吓人的。9月一整个月基本上就是秋招,笔试面试不断。拿到了一些offer吧,下面就和大家分享一下我的一些算的上经验的东西吧。

一.基础知识学习心得

1.1 java基础

对于java基础来说,说先要选对教材吧,首先是java基础,我看的是《JAVA从入门到精通》,这本书基本上涵盖了java的所有基础知识点,从基本面向对象的概念,到java的语法和一些小的练习,再到java的核心技术,接口、抽象类、多线程、反射、异常处理、IO编程和一些窗体应用程序的开发等,最后是一些高级应用,包括数据库的应用等。这些都是JAVA的基础。

谈到JAVA,每本书都会写到它是平台移植性,为什么呢?就是存在JVM这么一个神奇的东西,关于JVM,书籍我看了两本,一本叫做《深入理解JAVA虚拟机》和《深入理解JVM&G1 GC》。前一本比较基础,关键是要了解JVM的内存模型,一些关键的名词和加载机制要理解,比如什么是双亲委派模型,类加载的流程是什么样的等等;另外一个就是JAVA的内存回收机制,一些常用的回收算法要熟悉,还有包括GC的种类。那么第二本书就是讲到了G1这个回收器,这也是经常会问到东西。不过JAVA 11之后出来了一个ZGC最好也了解一下,网上有很多软文的,这是我面试知乎的时候面试官提到的,也是去了解了一下。

在大多数的应用软件中,其实我们更多的还是会关心程序运行的效率问题,那就不得不说一说并发编程,这也是面试经常问道的。我推荐的两本书就是《JAVA并发编程的艺术》和《JAVA并发编程实践》,里面介绍的很全面,从线程、线程池、线程安全,相关java线程安全集合类和一些并发应用开发的技巧。其中诸如比较常见锁、死锁问题还有JAVA相关的关键字的描述都很清晰,也是作为JAVA开发人员的基础知识。

因为JAVA是纯面向对象的语言,很多时候我们在去面试的时候,我们通常会去面试一种叫做后端开发工程师或者是服务器端工程师,如果你是JAVA方向,那么J2EE这方面的就一定要了解。我看的有两本书,一本叫做《Spring3.X 企业级实践》和《聊聊架构》两本书,前一本主要讲述了框架的一些东西,那么里面有一些名词必须要明白,尤其是什么是IOC和DI,什么是AOP,什么是SSH,什么是SSM,什么是MVC模式,什么是ORM等等,这些都是大方向的问题,里面还会牵扯到很多技术问题,这就需要平时的读书和积累了,比如拦截器和过滤器是什么之类的问题。另外一本书,就是架构,里面主要是一些微服务架构之类的,微服务这个东西虽然比较火,但是面试的时候谨慎,容易把自己拉进坑里,千万别再面试官面前秀操作,到时候反而会打乱自己的节奏。除非是真的亲自做过项目,否则只需知道一些名词就好,例如Spring Cloud,Spring Boot之类的了解即可。

那么说到了架构开发和软件开发,那么基本的软件开发的知识要知道,首先是数据库及其DBMS的使用。我主要看三本书,分别是《数据库原理》,《必知必会MySQL》和《MySQL技术内幕》。数据库理论的话,包括了常用的关系型运算,数据库的设计范式,基本SQL语句,数据库的表,视图,事务,索引,触发器和存储过程,索引和事务着重看。关于MySQL,其实最主要的无非三个,第一数据引擎,MyiSAM和InnoDB经常被问到,第二MySQL中索引的使用,除了常见的聚簇索引、联合索引,还要知道什么时候倒排索引之类的比较冷门的第三就是MySQL事务的一些操作,锁机制等等。

1.2 软件工程及其相关的知识

第二是软件工程及其相关的知识,尤其是BAT大厂很多时候也会问到其中的一些问题。这里推荐系统的看《软件工程——实践者的研究方法》和《UML面向对象建模与设计》这两本书,前者主要讲述了软件工程的系统知识,诸如软件工程的基本概念,软件开发方法,软件开发原则,质量管理,软件测试方法,文档的撰写,这其实也是我们开发人员的基本功吧。第二本书主要是在进行软件设计,尤其是在设计数据库之前,需要进行建模分析,UML是经常用到的方法,其中UML中的基本符号,还有用例图、序列图、通信图、类图等,因为UML在设计模式的一些教材中也会用到,所以了解一下是很有必要的。

1.3 设计模式

说到设计模式,这也是基本功,其中最常用的教材就是《Head First》了吧,23种设计模式,分为三大类,7大软件设计原则,这些都是必须要了解的。其中,单例模式、工厂模式、装饰模式、享元模式、建造者模式、适配器模式、代理模式、模板方法模式要重点掌握,因为这几个在J2EE和基本的JAVA开发中经常用到。

1.4 数据结构与算法

第三就是数据结构与算法,作为笔试和面试的重头戏之一吧,那么基础就是最好结合视频看看,单纯看书有点枯燥,视频和书籍的话就比较多了,这个仁者见仁的,所以大家只要认真学习,肯定会有效果的。这里链表、栈、队列、树这几种数据结构要熟练掌握,图了解一下,但是关于图引出的BFS、DFS这两种策略要会,因为回溯法和分支界定法会用到,另外排序算法要了解,几种常见的排序算法及其变种一定要熟练。

1.5 计算机网络和操作系统

第四就是计算机网络和操作系统相关的知识点,这也是我们会忽略的一部分,尤其是基础,因为互联网公司这些东西必须要知道啊,碰到最多的就是TCP、UDP、http、https之类的关键词了吧,至于这几个之间的区别要是说不上来就真的说不过去啦。至于操作系统,通常会结合主流的操作系统比如Linux或者windows系统来学习,我记着有面试官问我Ubuntu系统开机都做了些什么操作,所以除了LINUX系统命令之外,关于整个操作系统的进程、文件、设备管理之类的也要了解。

1.6 大数据

最后就是一些大数据方面的知识,从数据分析平台和服务来说,Hadoop,Spark,Kafka,Hive,Hbase等可以做适当了解;数据存储来说,除了RDBS之外,Nosql也要知道,比如Redis,MonoDB等;数据分析和挖掘算法来说,我们虽然不是算法开发,但是这一部分我把它就做课外知识,但是也是要有所了解,要不然以后和技术大牛聊天儿也比较尴尬。这里面就牵扯到机器学习的分类、聚类、降维和回归四个方面,从此衍生的诸如深度学习、自然语言处理之类的算法,有些名词咱们至少要听说过嘛。

以上就是我学习的一个大概的知识体系,总之语言其实的是次要,开发的框架和思路才是最重要的,还有就是编码能力!

二. 面试常见问题

我在这里总结一些面试经常会问到的问题,其中分为四大类,第一类是JAVA基础相关,第二类是计算机知识类,第三类是场景题,第四类就是智力题。总结的肯定不全面,而且是我经常会被问道的问题,拿出来供大家分享。(详细的一些问题可以看我牛客的帖子,https://www.nowcoder.com/discuss/123094)

2.1 JAVA基础类

JVM的内存模型,什么时候双亲委派模型?

JAVA的垃圾回收,标记算法和复制算法的区别,用在什么场合?

GC、G1和ZGC的区别

为什么老年代堆不想年轻代一样分成两个区?

JAVA多线程实现机制有哪些?

JAVA中的锁

设计模式相关问题

JAVA线程池有哪些参数,如果自己设计一个线程池要考虑哪些问题?

常见集合类的区别与联系

Spring框架的实现用到了哪些关键技术

SSH中每个职能部件都是什么,实现什么功能?

JAVA API中线程安全的类有哪些?

JAVA网络编程中,BIO、NIO、AIO的区别和联系

重载、重写和重构分别是什么含义?

jsp的内置对象有哪些,servlet的工作流程。

2.2 计算机基础类

TCP和UDP的区别,TCP三次握手和四次挥手,为什么要这样?

http和https的区别,http1.x和http2.0的区别,SSL和TSL之间的区别

数据库中索引的数据结构

B+树和B树的区别,和红黑树的区别。

联合索引的特点,倒排索引的特点

简述1NF到BCNF

数据库的无限极分类问题

redis的缓存处理算法

redis集群相关

mysql数据引擎相关

这里还有很多,以上应该是在面试中出现频率很高的了。

2.3 场景设计题

用10亿个URL,如何找出我们所希望得到的100个URL

新浪微博好友关注的后台表的设计

设计一个抽奖系统

。。。

这里其实考察的就是知识使用的灵活性,遇到的时候冷静分析,注重积累,一般面试官也不会为难的。

智力题其实智力题也是面试的一些重头戏,通常会考察咱们分析问题能力,一般题。

其实智力题也是面试的一些重头戏,通常会考察咱们分析问题的能力,一般仔细分析分析也应该没什么问题。

三. 手写代码问题

手写代码是面试的时候95%会出现的状况,其实主要还是平时的积累,多刷题,没有别的方法,常用的书就是《剑指offer》了吧,我是把剑指offer刷了1遍,leetcode的题目做了100多道,重点关注leetcode的中等题,如果一个题目你能在10分钟就能有完整思路,30分钟内能够AC,那考到的概率一般不大(除了ACM大神,哈哈!),当然如果一个题目思考了1天,看了解答也是毫无头绪,那就放弃吧,因为秋招时间紧,而且很容易出现厌学情绪。在手写代码方面呢,链表数组类问题属于简单难度的,二叉树和树相关的问题属于中等问题,动态规划类问题一定注意状态方程执行条件,回溯一定注意递归停止的条件要完整。下面列咱们必须要烂熟于心的一些手写代码的题目

归并排序、快速排序、堆排序,有的时候会考到多路归并和鸡尾酒排序。

链表翻转,判断链表是否有环并找到环的入口,单链表的第一个公共节点,链表的部分翻转

二叉树的前序遍历、中序遍历和后序遍历递归版本,前序和中序遍历的迭代版本,二叉树的层序遍历,二叉树的深度、高度、叶子节点的个数,很多二叉树的问题都可以用递归的方式求解。

最大子数组的和,最大子数组的乘积,字符串的公共前缀,上升子序列之类的动规的基本问题,还有约瑟夫环、荷兰旗等等这些基础的实际问题也要多用手写一写。

记住一点,用IDE调试和实际用手写真的有区别,所以常规的题目还是用手写一写。

四. 面试技巧

关于面试的一些经验技巧,我想谈谈自己的心得。我在秋招季参加了20多加公司的面试,有一天参加了5个公司的面试,那天差点没晕过去。一共收到了10个公司的offer,3个sp,相信很多大神和大佬也收到了很多offer,下面就来讲讲。

着装。咱们虽然不像产品、运营那些岗位会注重外形,但是穿着整洁大方是很有必要的,我之前又看到过穿拖鞋和短裤去面试的,面试官确实没什么好印象,我面试不管公司有没有名气,规模大小,都穿正装,这样自己也会有自信,也是对对方的尊重。

面试的时候心态很重要,不要被任何因素影响。不要因为自己的老铁或者闺蜜面试失败就产生畏缩心心理,也不要因为没通过某个大厂的面试就心灰意冷,面试没通过不是你不优秀,这是你不适合这个公司的这个岗位,而且,失败是成功的母亲,面试中不会的问题在网上及时看看帖子或者软文之类的,及时弥补,会对自己有很大帮助。你会发现面试时候能学到只是不必自己平时学到的少。

面试的时候在手写代码时候,尤其是DP问题,很多时候转换方程不会写,那么我们就先写一种方案,因为通常面试官没说让你写最优代码,那么你写出来一种,也是一种解答。通常面试官会慢慢引导你写出最优代码,不要慌张。当然了如果基础代码没写出来,那是会有点问题的。

关于项目。其实项目是好处也是坑,如果项目聊得不好的话,哪怕是自己做的,面试官有可能也会怀疑这个项目的真实性。另外,其实咱们干开发也应该有一些机器学习和算法的知识储备,如果项目中有的话。我不止一次的遇到了让手推算法公式的面试官了,哈哈。

如果你挺到了hr面,那么一定要真诚并且谦虚的介绍自己,如果问道现在手头上拿到了几个offer,那么我通常是肯定回答(如果有的话),并且把现目前手上拿到的最好的说,因为这样显示出你很优秀,如果对方真的很想要你,那么肯定会在薪水和待遇方面和现目前这个offer持平或者给你个sp之类的。毕竟hr小姐姐小哥哥还是很温柔的一般情况。

关于提前批,我有血的教训,一定要慎重,不要着急赶着提前批,我阿里提前批四面挂了之后,再没机会了就。所以要结合实际,当然提前批确实可以积累很多经验,但是提前加入面试的压力中,战线拉长,那么很容易崩掉的,所以一定要找到一个很好的解压方式。像我压力大了就去跑个10km,哈哈。

五.结束语

以上就是我的一些面试心得,希望能给正在准备明年春招和秋招的你们一点点帮助,以上都是我的个人观点,如果有错误的地方,及时批评指正。当然有喜欢跑步或者跳舞的朋友,也可以一起交流交流,哈哈。给大家分享一下我的座右铭:一切都会有的,一切都是时间问题。

祝各位好运,加油!

END

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.12.04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档