其实Java开发和其他岗位开发区别在于 语言 和 项目 。 前半部分是 基础
, 应该是开发必备的。 后半部分语言和项目可能有出入。
还有一点就是, 先去拿到一个满意的Offer对你后期面试的 自信心 的提升是很大的 , 所以怎么说呢 , 对于零offer的人来说 , 每次面试的紧张程度都是很高的, 尤其是大厂的4轮起步的面试吧, 哎 , 加油吧. 就是自信就完事了, 真的 别紧张 .
还有一点介意的就是, 不管大公司小公司, 要多投, 多面试, 多总结 , 因为面试不花钱的, 只是花你的时间,你要是觉得你的时间比一次面试的时间宝贵, 当我没说, 而且多面试, 你会总结出一些问题, 发现一些问题,也会掌握一定的面试技巧, 没有人一次面试就可以拿到一个满意的offer的.
还有需要一个 好的简历 , 怎么说呢, 看你用不用心吧, 其次就是要有自己的亮点, 反正我不喜欢那种包装简历的, 实打实自己做的, 写上去就行了. 还有别在意项目大小, 在于你心中的地位这个项目对于你, 你对他的了解 , 掌握 , 感受 ,新心得吧 .
最后一个介意, 作为开发者, 一定要有自己的 Github 账号(网慢,打不开, 自行解决, 方式多种 , 记住一定要用.), 以及经常玩 , 比如上传一些项目哇 , 比如简历上写一些链接. 还有就是写自己的 博客, 记住博客对于你的提升特别大 , 真心的 .
废话不多说, 开题了吧 .
计算机- 基础
我是非科班, 基本对于计算机基础, 可能看的重,看的轻,但是对于开发的话, 理解计算机基础对于后期的发展很重要。 就是底层理解了, 就可以打通你的任督二脉了。
计算机网络。
OSI 七层模型 , 必须全部掌握 , 核心是 网络层和传输层,必要的应用层也必须掌握。
也就是说 , 理解计算机网络分层协议, 每一层的作用。 同时比如各种协议的作用是什么。
核心的我说一下, IP (ARP , ICMP), TCP , UDP , 比如字节等做流媒体的会问 , RTP , RTCP 哇, 基本会问这些,可以核心的去看一下,
TCP 比较重要, 要理解他的所有机制。
HTTP 也是非常重要, 也要理解他的所有机制。
HTTPS , TLS/SSL 掌握是最好了, 加分项。
Http2.0 、 1.1 、1.0 掌握三者区别更好了, 解决了什么问题,哈哈哈。
我这里留了一个 up博主, CodeSheep 的一篇计算机网络掌握的东西,你可以B站找一下。
数据结构
基本的数据结构, 都需要了解 ,数组(核心),链表(核心),队列,栈,树(核心),图(考的不是太多)。 因为不是做人工智能的。
这些是你算法的基础。
计算机组成、 操作系统
看自己能力吧, 了解还是很有必要的。
操作系统的话, 了解一些 进程 , 线程如何创建和管理, 进程间通信哇。
对于后端来说, 线程和进程需要深度理解. 比如 线程的调度算法 , 线程的启动流程 , 反正线程和进程是重点.
组成原理, 我觉得我了解的不多,所以不多说了,怕误导人。 后面面试我再总结吧。
可以把Linux操作和理解也可以学习一下。不同平台的和内核,其实很多实现有差异,比如网络,内存等哇。
算法
核心吧 , 我觉得大厂 、中等厂 、 校招基本必考 ,其实你发现算法好的人,敲代码确实牛逼 . 还有就是对于考察算法这个环节 , 并不是求出答案就行了, 一般笔试可以这么做 , 但是跟HR面试的话, 一般要求看你的解法可能多样化 , 看你的了解程度 , 从一开始的高时间复杂度, 高空间复杂度 - > 高时间复杂度 -> 继续优化复杂度 -> 最后得出最优的算法. 反正记住算法核心的思想 , 千万别被背题目 , 要多总结和做一些技巧上的总结吧.
算法篇分为 算法(核心) 、智力题 (也有很多是这种题目,主要是看你的反应能力吧,我觉得智力题,门槛算低的了,很多其实就是数学题)、 概率论(吐槽,很多都是,排列组合问题,概率题,牛客的笔试一堆是这些)。
算法 : 推荐刷 LeetCode (各种题型10道左右吧 , 别顺序刷 , 看自己不会的吧.)
必须掌握的 : 9种排序算法(有些可能不太理解为啥这么写,我觉得画图是最好的方式), 字符串操作 , 数组题目 ,链表操作 (全翻转,部分翻转), 树的遍历等这些要滚瓜烂熟 , 特别是递归的思想(DFS的思想), 这些是基础。
进阶 :DFS题目 , 二分(有序数组)/分治和归并思想的算法 , 回溯算法 , 贪心算法 ,DP (优化一些重复行操作等问题, 就是复杂度低. 有点像dfs,但是带有记忆化,常见的还有就是要求递推表达式吧(一定要有规律).),
大家可以看看我做的lc练习题 , 我做的题目也比较经典 , github.com/Anthony-Don…
这个是我博客的一些算法, 瞎写了点, 等你练多了, 我觉得你就懒得总结了. 小儿科吧, 哈哈哈 : anthony-dong.gitee.io/tag/BsE8X7H…
这个算法, 我一直练着 , 也看了一个视频课程, 是极客时间的算法40讲 , time.geekbang.org/course/intr… , 链接就是这个,看视频主要是觉得, 理解别人的思维, 可以转变一下自己的思维。
Java篇 (语言篇)
Java基础 (核心)
Java语言掌握程度, 我懒得说 , 集合类的掌握(太基础了, 常问的 , 最后说出亮点 , 比如你觉得它哪里做的不好)
多线程(高并发问题,我觉得我真不知道这里咋说,无语, 这里推荐一下我学习多线程总结的博客地址 : anthony-dong.gitee.io/tag/ujp75i9… ) , JUC 包 (核心其实是 AQS , 可以说出你使用的场景最好, 解决了什么问题 ,可以看看《Java并发编程》这本书,还有就是BlockQueue) , 网络IO编程 (核心是NIO吧, 其他的比如OIO,AIO我感觉没必要 , 有次问我Java的NIO网络编程的BUG是啥,如何解决)。
还有就是 , Java的反射机制,还有就是动态代理, 其次就是使用场景了, 别局限于Spring的IOC和AOP , 说出其他的就是加分项。
Java的其他序列化机制, 语法机制 , 比如泛型问题、 拆箱装箱问题、各个Java版本的迭代的 , 比如还有特殊的Java关键字的含义和作用, 都需要理解和掌握。
设计模式
常见的掌握就行了, 说出你的使用场景 , 最好了,
JVM (核心)
我感觉基础吧。 《深入理解Java虚拟机》 (第三版 , 周志明) 这本书, 不读个 2-3遍 我觉得对不起, 你学了JVM 。
主要是这本书里的东西 全部掌握吧。 我不了解的不多 , 核心主要是 JMM (Java内存模型) , 类的加载机制, GC问题, 以及GC的算法 , Java的内存分配逻辑。书读多了,自然这些就理解了。
字节码技术 ? , JNI问题? ,内存泄漏排查? , JDK的工具使用 ? , 如何定位OOM的问题 , 如何查找出因为哪个地方内存没有被释放 ? 如何定位死锁? 如何定位CPU出现100%的问题 ? 如何线上记录发现这些问题? ,很多吧, 我不说了 , 看能力。
MySQL (数据库)
掌握一个数据库, 我就是MySQL, 掌握一个数据库引擎 , 我学的是 Innodb 。
掌握使用, 大厂一般不考, 写SQL .但是也会有场景题目。
掌握Innodb的基本原理, 核心是索引如何实现的, 底层的一些知识吧, 掌握了其实就理解了, 什么B+树 , 什么索引匹配哇, 索引机制 , 核心是围绕着索引, 所以你要理解索引的流程。
了解 MySQL 的主从机制, 其实就不错了, 分库分表我觉得不多 ,可以了解一下。
了解MySQL 的日志机制 和 Innodb的日志机制, 指的是记录的,
了解如何定位 慢查询, 也就是分析为啥出现较慢的现象, 最好逻辑清晰 。
了解 数据库操作的执行流程, 比如某些关键字是如何执行的. 比如where , limit , 等吧.
MySQL提供的的事务的四大隔离级别哇 .
MySQL 锁的机制, 比如行锁是如何实现的 , 等等吧, 事务一般都是加锁操作么 .
Spring提供的事务的七种传播机制。
Redis (缓存)
了解本身提供的数据结构以及底层数据结构实现最好了, 比如zset 实现,跳表 , 经常被考的 。
了解如何解决分布式缓存问题, 也就是缓存不一致的现象。
理解如何解决, expire的问题。
理解他的工作机制 , 比如单线程为啥好 , 还有他的持久化机制 , AOF , RDB的区别。
集群,要是你懂, 我真的点赞 , 当时知道的越多越好了. 哈哈哈哈.
消息队列 (中间件)
我核心掌握的是 kafka 和 rocketmq
了解主要实现机制, 是必备的。 掌握一种起步。
了解kafka为啥快, 还有一些问题, 自行百度, 比如他的 rebalance机制。
了解kafka的可靠性实现. / rocketmq也是 如何保证可靠性
了解rocketmq的一些事务机制 。
了解加入MQ后 , 保证事务的基本特性 , 原子性如何实现, 比如订单写入数据库了, 但是消息发送的时候失败了, 创建订单和消息发送是一个原子性操作, rocketmq是如何实现(其实就是两阶段提交)。
其实分布式事务是最恶心的, 别被自己带沟里
Zookeeper 等也是优秀的中间件, 可以深入学习 , 比如人人都说的分布式锁, 分布式协调等.
框架
Java-Web的理解
这个就是深入理解Java的 Servlet 吧. 比如 Servlet , Filter, Listener , Context等哇.
还有就是 Request 和 Response , 还有就是Cookie/ Session的理解吧. 其实就是对于Http的理解.
还有就是 Servlet容器 , 比如Tomcat的理解吧.
spring系列的
spring基本思想和原理哇,SpringMVC的基本原理和思想, 进阶到 SpringBoot ,了解SpringBoot的启动机制和流程 , 最后学习微服务涉及到的SpringCloud
ORM框架
Hibernate(JPA) , Mybatis(实现原理和一些常见问题) , 这俩二选一 , 不过推荐后者. 两者都会更好.
Dubbo系的微服务 、 SpringCloud系的微服务 (加分项)
Springcloud系列的 , 比较入门简单 ,我这里有个官方文档的链接 www.springcloud.cc/spring-clou… , 封装都是现成的 ,上手简单, 比如 gateway/zuul , config ,stream(比如统一了mq) , sleuth(围绕着zipkin) , 注册中心(eureka,consul(go实现)) , 熔断器(hystrix ),负载均衡 ribbon ,
他的RPC地实现。
高并发三大利器, 缓存, 限流, 降级 哈哈哈哈
dubbo系列的, dubbo的RPC ,sentinel (降级限流) , nacos (注册中心+配置中心) , seata(分布式事务)
地址就是 github.com/alibaba/spr… , 不一定走整合spring-cloud系列的。
微服务这块是一个加分项目, 不回也罢, 随意了。 看能力吧,不一定说才是最好的结果, 有的时候说给你是挖坑。
还有就是 微服务的利与弊 , 基本必考。
还有一些框架我没说, 我学过的 Google的框架, Guava,Guice。 携程的Apollo ,还有比如权限框架(Solr,Spring系, Auth2) ,任务调度的quartz等等。
Netty 加分项 (我核心掌握的这个)
其实就是深入理解和使用罢了。 想学习的 极客时间有一个课程不错, 基本覆盖的挺全的, 但是切记, 一定要多敲。 多看别人的代码, 而不是他写的Demo, 可以看看比如Dubbo框架 , 或者 reactor-netty框架的源码, 好好看看。
RPC 框架
Dubbo协议的 Dubbo框架, Google的GRPC(核心是Protobuf协议) , Http协议的 RestRpc,DubboX , Twitter和Facebook都有他们的可以了解一下。
掌握和掌握流程实现最好了, 和一些问题。
分布式带来的一系列问题 , 和解决方案。
可以了解和掌握。
其他掌握的
比如其他语言 (C++, Golang , Scala), 其他领域(大数据, 算法 , 人工智能) 也可以说说。
有疑问加站长微信联系(非本文作者)