首页 > 笔经面经 > 非科班转Java开发经验贴

非科班转Java开发经验贴

头像
无情派大星
编辑于 2020-03-30 11:33:28 APP内打开
赞 43 | 收藏 243 | 回复17 | 浏览4804
为期一个多月的春招旅程终于告一段落了,春招过程中牛客也带给了我很大的帮助,所以今天写一个经验贴讲下自己从去年10月放弃考研,转Java开发备战春招,到如今如愿拿到offer的学习历程。

个人背景

  • 末流985大连理工国贸专业
  • 大学前三年除了计算机二级考了Python外,没接触过编程(随便吐槽下Python是我们专业选修,而且不选很难修够分,不知道是哪个神仙老师安排的🤣
  • 去年从6月起复习考研,到10月中旬下定决定转程序员(一入此门深似海🤣
  • 春招中目前拿到了跟谁学、美团、小米的offer

面试经历


  • 华为一面挂(只问了两个算法,一个中等秒做,一个是困难变种,遇到过的最难算法,目前还是不会🤣
  • 腾讯二面挂(也只被问了两个问题,以前的面经中有,这两次面试沉重打击了我的信心🤣
  • 字节二面挂(场景题不会,非科班难于顶住场景题)
  • 跟谁学offer
  • 美团offer
  • 招银面完不知结果
  • 小米收到offer


计算机基础

  • 《数据结构与算法》这本书算是数据结构的入门,非科班第一遍看可能有些晦涩难懂,可以先看一遍中国大学慕课网上的课再看书会好很多
  • 《操作系统》除了课本外也推荐看网课,网课讲解的比较清楚
  • 《计算机网络》除了书和网课外可以看看极客时间的《趣谈网络协议》,这个课程把很多基础的网络知识讲解的很形象
  • linux基本的命令可以看《鸟叔的linux私房菜》,还有极客时间的《Linux实战技能100讲
以上内容虽然是计算机基础,但建议放在学习过程的最后看,因为我觉得非科班在0基础的情况下,一般既没有兴趣,也很难看懂基础知识,而且在学习过程中也不怎么用得上,不如在对编程有所了解,产生兴趣后再来学基础知识。

Java相关书籍

  • 《Java核心技术-卷一》Java入门书籍,刚开始看可能很多概念看不懂,我觉得没必要深究,接着看下去,以后再来查漏补缺最好。
  • 《深入理解Java虚拟机》JVM几乎是必考内容,所以这本书一定要看仔细,尤其是JVM内存结构和垃圾回收的部分,最后还有一部分并发编程的讲解也非常清晰易懂。中间字节码文件结构和参数调优的部分我觉得不用细看,因为没有实际使用经验很难看懂,而且面试过程中也几乎不会被问到。不过常用的参数比如Xms、Xmx这些还是最好有所了解。
  • 《Java并发编程实战》并发编程也是Java常考点,最好能用一本书系统的学习,这本书就把Java并发编程知识讲解的很透彻。不过我建议反着看这本书,比如Java内存模型这种对于volatile关键字以及CAS等为基础的内容居然被这本书放在最后一章🤣,我第一次看书正着看,被前面章节中诸如发布泄露、委托失效等概念搞得头很晕。但第二次反着看这本书就觉得顺序对多了🤣
  • 《Java EE互联网轻量级框架整合开发》这本书结合了springMVC、MyBatis、Redis的内容,非常适合用于进阶知识的学习,很多框架方面的书通篇贴代码,也没有细致讲解很多原理。这本书算是我看过的框架类书中最好的一本了。不过建议框架类的书也是放在最后再看。
  • 《高性能MySQL》前六章,这本书的前六章基本涵盖了一般面试中会问到的数据库知识,尤其是索引那部分。

常见面试考点

以下是我在面试过程中常被问到的知识点以及部分答案,有错的地方希望各位大佬指正🤣
  • String在new和直接赋值时的区别:new是在堆上新建一个对象,直接赋值时指向堆的字符串常量池中(JDK1.7之前这个常量池在方法区中,1.7后被移到堆里,因为JDK正逐渐减少方法区的内存)
  • hashmap是否线程安全,有什么安全的hashmap?:不安全,因为在多线程同时put时或者在扩容时Put都会有线程安全问题。安全可以使用hashtable、Collections.synchronizedMap、ConcurrentHashMap这三类。但前两类都是直接在方法标签上加了synchronized,所以效率很低。而ConcurrentHashMap效率很好,在1.7中,ConcurrentHashMap是用segment数组为每个格子加锁来保证安全性。在1.8中ConcurrentHashMap和hashmap的结构完全一样,但更改了put方法。在计算了哈希值和索引后,先判断索引位置是否正在扩容,如果正在扩容就调用一个协助扩容的函数,如果没扩容再判断是否为空,为空则用CAS的方式放入,不为空则用synchronized锁住格子,判断为链表还是红黑树,分别调用对应方式放入。最后再判断一次冲突长度,大于8则转化为红黑树。
  • volatile作用:保证可见性和顺序性。Java把处理器的多级缓存抽象为JMM,即线程私有的工作内存和线程公有的主内存,每个线程从主内存拷贝所需数据到自己的工作内存。volatile的作用就是当线程修改被volatile修饰的变量时,要立即写入到主内存,当线程读取被volatile修饰的变量时,要立即到主内存中去读取,保证了可见性。禁止指令重排来保证顺序性。
  • ArrayList和LinkedList的区别:一个是基于动态数组实现的,一个是基于链表实现的。动态数组随机索引的特点,读和改快,增删慢,链表增删快,读慢。
  • 手写单例模式:双重锁写法、静态内部类写法、枚举类写法最好都会,至少要双重锁,最常考。
  • 类加载的过程:加载-验证-准备-解析-初始化,这几个步骤每个都做了什么最好要知道
  • 双亲委派机制:启动类加载器-扩展类加载器-应用类加载器-自定义类加载器的顺序,自己写一个java.lang.String会不会被加载?什么时期报错。
  • 三次握手为什么不是两次?
  • time_wait过多怎么办?
  • 进程通讯的方式
  • IOC和AOP的概念和使用场景
  • synchronize和lock的区别,lock接口比synchronize多的3个特性:公平锁、多条件、限时等待的作用和场合,都是可重入锁,可重入锁的原理,为什么默认是非公平锁。
  • AQS和CAS的原理最好能会
  • 流量控制和拥塞控制的原理和作用
  • 两种垃圾判断方式,引用计数法和可达性分析算法的原理和优缺点
  • 两种垃圾回收算法各自的优缺点和6种垃圾回收器的各自特点,G1的特点
  • 线程池的几个参数作用,3种工作队列各自的特点
  • b+树特点和优点
  • 聚集索引和非聚集索引的区别
  • innodb和myisam的区别
  • mysql的一二级缓存
  • redis5种数据结构各自特点和实现原理、适用场合
面试考点很多,随便举了一些,与其撞知识点,不如系统的看书来增长知识,一劳永逸,不过面试前看相关面经还是挺有用的🤣

算法

我觉得这就是我自学的路上最难的部分了,其他都是记忆性的知识点,算法要求就要高多了,我是通过刷题的方式学习的。力扣300多题,剑指两遍。剑指考的频率很高,建议熟练。力扣我觉得其实大概刷200题然后把刷过的再熟练几遍比一直往前刷要有意义一些。顺便吐个槽,我字节面了两次,一次二面挂了,一次一面挂了,总共被问了5个算法,都做出来了,还是没过,我过了的都没怎么问算法,面试真的玄学吧🤣

非科班转开发肯定一开始会遇到很多困难,不过坚持下去相信自己的话一定会有结果的😆😆😆

17条回帖

回帖
加载中...
话题 回帖

推荐话题

相关热帖

笔经面经近期热帖

近期精华帖

热门推荐