专科学生自学Java半年,直接拿下12K的offer,运气真的也是很重要!
前言
通过这个故事我希望学弟们不要像我一样,等到临近毕业后才醒悟要学习知识学习技术的重要性,能趁早尽量要趁早,过去应该做的事情没有去做,后面都需要你加倍补回来。
我是一个二本院校,专业是机械工程,当时以为考上了大学就可以高枕无忧放开了玩,可以说我整个大学期间都是打LOL过来的。到了大四才发现,同学们都陆续去找了实习,有的做机械工作,有的在大三的时候就自学了Java或者web前端技术,然后他们通过秋招找到了一份实习的工作,实习的工资基本都在5K左右。从那个时候我开始慌了,但还是没有具体的行动,一直拖到了去年的8月份,也就是大四的上学期,这个时候学校已经要求我们实习,很多就到了毕业的时间。
从去年8月份我开始自学Java,因为要面临就业,我这个机械专业的很多同学都是转行学习的软件开发,他们说这行发展的比较好,信息软件技术以后的空间会更大,各种薪资待遇也都不错。有的人建议我去学Java,说Java的岗位需求是最大的,一二三城市都可以就业。我从去年8月份自学Java到现在就业一共是用了7个月左右的时间,现在是在重庆的一家软件公司做产品的维护,技术部大约是50多人。薪资是12K,五险一金。我觉得自己还算幸运,毕竟大学荒废了那么多时间,临阵磨枪毕业还能找到一份月入过万的工作,真的是运气爆棚。所以我想告诉大家什么时候学习都不晚,但一定是越早越好。
给学弟的忠实建议:
出了社会才知道钱能挣屎难吃,在学校混日子过来的人,没有一个不后悔的。当你有一天在这个社会生存都成了问题的时候,你会发现自己所有的一切都是灰暗的,穷生奸计富长良心,我体会到了这句话的含义。所以奉劝那些还在上学的学弟们,抓紧在学校的日子学会一个顺应这个时代发展的技术,选择一个有发展空间的行业,毕业后能找到一份不错的工作,可以让自己有较高的起点,然后不断的向上发展。
Java心得
1、 千万别自己一个人闭门造车
不要认为自己可以解决所有问题,学习编程很抽象,尤其是在刚开始学的时候,很多时候你是无从下手的,所以我建议大家一定要懂得借力,找一些学的比较好的同学,或者你认识的朋友带带你,有人真的是事半功倍,效率会提高非常多,25套面试资料+Java核心学习笔记共享!
JavaOOP面试题
- Object类常用方法有那些?
- java中是值传递引用传递?
- 形参与实参区别
- 构造方法能不能重写?能不能重载?
- 内部类与静态内部类的区别?
- Static关键字有什么作用?
- final在java中的作用,有哪些用法?
- String str=”aaa”,与String str=new String(“aaa”)一样吗?
- 讲下java中的math类有那些常用方法?
- Char类型能不能转成int类型?能不能转化成string类型,能不能转成double类型
- 什么是拆装箱?
- Java中的包装类都是那些?
- 一个java类中包含那些内容?
- 那针对浮点型数据运算出现的误差的问题,你怎么解决?
Java集合/泛型面试题
- 集合类存放于 Java.util 包中, 主要有几 种接口
- 什么是list接口
- 说说ArrayList(数组)
- Vector( 数组实现、 线程同步)
- 说说LinkList(链表)
- 什么Set集合
- HashSet( Hash 表)
- 什么是TreeSet(二叉树)
- List 和 Map、Set 的区别?
- 数组和链表分别比较适合用于什么场景,为什么?
- 说说ConcurrentHashMap
- Java中ArrayList和LinkedList区别?
- TreeMap(可排序)
- 请用两个队列模拟堆栈结构?
- Map中的key和value可以为null?
- 数据结构基础之双向链表
Java异常面试题
- finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
- Excption与Error包结构
- Thow与thorws区别
- Error与Exception区别?
- error和exception有什么区别
- final、finally、finalize 的区别?
- Java 异常处理机制的理解?
- 说出最常见的5个RuntimeException?
- throw 和 throws 的区别?
- JAVA 中Exception和Error 面试问题
- 在Java异常处理的过程中,你遵循的那些最好的实践是什么?
- throw 和 throws这两个关键字在java中有什么不同?
- 你曾经自定义实现过异常吗?怎么写的?
- 你遇到过 OutOfMemoryError 错误嘛?你是怎么搞定的?
- Java中的异常处理机制的简单原理和应用。
Java中的IO与NIO面试题
- 如何实现对象克隆?
- 异步 IO 模型
- 什么是 java 序列化,如何实现 java 序列化?
- NIO 的缓冲区
- 面向Stream和面向Buffer
- Channel
- NIO和IO对应用的设计有何影响
- Selector
- Java IO与 NIO的区别
- 字节流与字符流的区别
- 非阻塞 IO 模型
- 信号驱动 IO 模型
- NIO 的非阻塞
- Buffer
- AVA NIO
Java反射面试题
- Java 反射 API
- 如何使用Java的反射?
- 获取 Class 对象有几种方法
- 除了使用new创建对象之外,还可以用什么方法创建对象?
- java反射的作用
- 反射的实现方式:
- 反射使用步骤(获取 Class 对象、调用对象方法)
Java序列化面试题
- Serializable 实现序列化
- 序列化 ID
- 序列化用户远程对象传输
- writeObject 和 readObject 自定义序列化策略
- 序列化并不保存静态变量
- 序列化(深 clone 一中实现)
- Transient 关键字阻止该变量被序列化到文件中
- 如何实现java序列化?
- Transient 关键字阻止该变量被序列化到文件中
- 静态变量的序列化?
Java注解面试题
- 从标准库中描述一些有用的注释。
- 注解是什么?
- 可以从注释方法声明返回哪些对象类型?
- 哪些程序元素可以注释?
- 有没有办法限制可以应用注释的元素?
- 什么是元注释?
- 什么是重复注释?
- 你怎么能检索注释?这与保留政策有何关系?
- 是否可以扩展注释?
多线程&并发面试题
- 实现多线程 Thread 和 Runnable区别?
- 解释java中的volatile变量
- notify()和notifyAll()有什么区别?
- sleep()和wait() 有什么区别?
- volatile 是什么?可以保证有序性吗?
- Thread 类中的start() 和 run() 方法有什么区别?
- 为什么wait, notify 和 notifyAll这些方法不在thread类里面?
- 共享锁和独占锁
- Java中interrupted 和 isInterruptedd方法的区别?
- 有三个线程T1,T2,T3,如何保证顺序执行?
JVM面试题
- 32 位和 64 位的 JVM,int 类型变量的长度是多数?
- JAVA8 与元数据
- 分代收集算法
- 怎样通过 Java 程序来判断 JVM 是 32 位 还是 64位?
- 分代收集算法
- 虚拟机栈(线程私有)
- 分代收集算法
- 你能保证 GC 执行吗?
- 怎么获取 Java 程序使用的内存?堆使用的百分比?
- 在老年代-标记整理算法
- 堆和栈的区别
- 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
Mysql面试题
- Memory
- myisamchk 是用来做什么的?
- MyISAM 表格将在哪里存储,并且还提供其存储格式?
- 常见索引原则有
- 如何显示前 50 行?
- 锁的优化策略
- SQL优化
- 为表中得字段选择合适得数据类型
- 什么是视图
- 什么情况下设置了索引但无法使用
- 并发事务带来哪些问题?
- 什么是乐观锁、悲观锁、时间戳、行级锁、表级锁、页级锁
Redis面试题
- Redis 相比 Memcached 有哪些优势?
- Memcache 与 Redis 的区别都有哪些?
- Redis 回收进程如何工作的?
- 一个字符串类型的值能存储最大容量是多少?
- Redis 的内存用完了会发生什么?
- 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
- 一个 Redis 实例最多能存放多少的 keys?List、Set、Sorted Set 他们最多能存放多少元素
- Redis 集群之间是如何复制的?
- redis的数据类型,以及每种数据类型的使用场景
- redis的过期策略以及内存淘汰机制
- Redis 集群最大节点个数是多少?
- 为什么Redis的操作是原子性的,怎么保证原子性的?
- 为什么 edis 需要把所有数据放到内存中?
- Redis 是一个基于内存的高性能key-value数据库。
- Reids常用5种数据类型
- Reids6种淘汰策略:
- Redis前端启动命令
- Redis 的主从复制
Memcached面试题
- 如何使用memcached的多线程是什么?如何使用它们?
- memcached能接受的key的最大长度是多少?(250bytes)
- memcached对item的过期时间有什么限制?(为什么有30天的限制?)
- memcached最大能存储多大的单个item?(1M byte)
- 为什么单个item的大小被限制在1M byte之内?
- 为了让memcached更有效地使用服务器的内存,可以在各个服务器上配置大小不等的缓存空间吗?
- 什么是binary协议?它值得关注吗?
- 究竟为什么使用slab呢?
- memcached能保证数据存储的原子性吗?
MongoDB面试题
- NoSQL数据库有哪些类型?
- 你怎么比较MongoDB、CouchDB及CouchBase?
- MongoDB成为最好NoSQL数据库的原因是什么?
- MySQL与MongoDB之间最基本的差别是什么?
- journal回放在条目(entry)不完整时(比如恰巧有一个中途故障了)会遇到问题吗?
- 分析器在MongoDB中的作用是什么?
- 名字空间(namespace)是什么?
- 如何执行事务/加锁?
- NoSQL与RDBMS直接有什么区别?
- 为什么要使用和不使用NoSQL数据库?
- 说一说NoSQL数据库的几个优点?
String面试题
Spring Boot面试题
- String 是可变的话?
- Spring Framework 有哪些不同的功能?
- 怎么比较两个字符串的值一样,怎么比较两个字符串是否同一对象?
- 什么是 Spring 配置文件?
- Spring 应用程序有哪些不同组件?
- 使用 Spring 有哪些方式?
- String.trim()方法去掉的是哪些字符?
- 可以自定义 java.lang.String 类并使用吗?
- spring 中有多少种 IOC 容器?
- 区分 BeanFactory 和 ApplicationContext。
- spring 支持集中 bean scope?
- 什么是 spring 的内部 bean?
- 什么是 spring 装配
- spring bean 容器的生命周期是什么样的?
- 列举 Spring DAO 抛出的异常。
- @Qualifier 注解有什么用?
- @Autowired 注解有什么用?
- spring DAO 有什么用?
Spring Cloud面试题
- 什么是 Hystrix 断路器?我们需要它吗?
- 什么是 Hystrix?它如何实现容错?
- 什么是 Netflix Feign?它的优点是什么?
- 什么是服务熔断?什么是服务降级
- Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
- 什么是微服务
- 什么是Hystrix断路器?我们需要它吗
- spring cloud 和dubbo区别?
- SpringBoot和SpringCloud的区别?
- spring cloud 和dubbo区别?
- REST 和RPC对比
- 你所知道的微服务技术栈?
RabbitMQ面试题
- 为什么要使用 rabbitmq
- 消息如何分发?
- 如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?
- 消息怎么路由?
- 如何确保消息不丢失?
- 消息基于什么传输?
- 如何保证消息的顺序性
- Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别?
- Fanout(广播分发)?
- 如何保证高可用的?
- mq 的缺点
- 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决
- RabbitMQ 的集群
Dubbo 面试题
- Dubbo 和 Spring Cloud 有什么区别?
- 一般使用什么注册中心?还有别的选择吗?
- dubbo都支持什么协议,推荐用哪种?
- 服务提供者能实现失效踢出是什么原理?
- Dubbo 的整体架构设计有哪些分层?
- 如何解决服务调用链过长的问题?
- 说说核心的配置有哪些?
- Dubbo 推荐用什么协议?
- Dubbo Monitor 实现原理?
- Dubbo 用到哪些设计模式?
- Dubbo 配置文件是如何加载到 Spring 中的?
- 服务调用是阻塞的吗?
MyBatis 面试题
- 什么是 Mybatis?
- MyBatis实现一对一有几种方式?具体怎么操作的?
- MyBatis 框架的缺点
- MyBatis实现一对多有几种方式,怎么操作的?
- MyBatis 与 Hibernate 有哪些不同?
- 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗?
- 使用MyBatis的mapper接口调用时有哪些要求?
- 在 mapper 中如何传递多个参数?
- 简述Mybatis的插件运行原理,以及如何编写一个插件。
- MyBatis编程步骤是什么样的?
ZooKeeper 面试题
- zookeeper的数据结构(树)? 讲一下基于它实现的分布式锁?基于它实现的Master选举?基于它的集群管理?zookeeper的注册(watch)机制和轮询机制的使用场景?
- ZooKeeper 提供了什么?
- 讲一下如何用 zookeeper 实现分布式锁?
- Zookeeper的同步过程,写操作流程,读操作流程
- ZK 的部署方式有哪几种?集群中的角色有哪些?集群中最少需要几台机器
- 客户端注册 Watcher 实现
- 服务端处理 Watcher 实现
- 客户端回调 Watcher
- 数据同步
- Zookeeper 下 Server 工作状态
- zk 节点宕机如何处理?
- zookeeper 是如何保证事务的顺序一致性的?
- 分布式集群中为什么会有 Master?
- zookeeper 负载均衡和 nginx 负载均衡区别
- Chroot 特性
- 集群最少要几台机器,集群规则是怎样的?
- 集群支持动态添加机器吗?
数据结构面试题
- 栈(stack)
- 排序二叉树
- 前缀树
- 红黑树
- 散列表(Hash Table)
- B-TREE
- 位图
- 链表(Link)
- 栈和队列的共同特点是?
- 栈通常采用的两种存储结构是?
- 用链表表示线性表的优点是?
- 增加头结点的目的是?
算法面试题
- 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
- 在神经网络训练过程中,为什么会出现梯度消失的问题?如何防止?
- 二分查找
- 冒泡排序算法、插入排序算法、快速排序算法、希尔排序算法、归并排序算法
- K-Means或KNN中,通常使用欧式距离来表示最近的数据点之间的距离,有时候也使用曼哈度距离,对比两者的区别。
- 参数模型与非参数模型
- 生成模型与判别模型
- RSA
- CRC
- 最短路径算法
- 有两个篮子,分别为A 和 B,篮子A里装有鸡蛋,篮子B里装有苹果,请用面向对象的思想实现两个篮子里的物品交换(请用代码实现)
Elasticsearch 面试题
- elasticsearch 的倒排索引是什么
- elasticsearch 是如何实现 master 选举的
- 详细描述一下 Elasticsearch 搜索的过程?
- Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法
- Elasticsearch 中的节点(比如共 20 个),其中的 10 个选了一个 master,另外 10 个选了另一个 master,怎么办?
- lucence 内部结构是什么?
- 客户端在和集群连接时,如何选择特定的节点执行请求的?
- 在 Elasticsearch 中,是怎么根据一个词找到对应的倒排索引的?
- Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?
- 对于 GC 方面,在使用 Elasticsearch 时要注意什么?
- 拼写纠错是如何实现的?
- 详细描述一下 Elasticsearch 索引文档的过程。
Kafka 面试题
- partition 的数据文件(offset, MessageSize, data)
- 消费者设计
- 批量发送
- Consumer Group
- 如何获取 topic 主题的列表
- 生产者和消费者的命令行是什么?
- 负载均衡(partition 会均衡分布到不同 broker 上)
- consumer 是推还是拉?
- Zookeeper 对于 Kafka 的作用是什么?
- Kafka 判断一个节点是否还活着有那两个条件?
- 为什么需要消息系统,mysql 不能满足需求吗?
- 讲讲 kafka 维护消费状态跟踪的方法
- 消费者如何不自动提交偏移量,由应用提交?
- 消费者故障,出现活锁问题如何解决?
微服务 面试题
- 单片,SOA 和微服务架构有什么区别?
- 微服务有哪些特点?
- 微服务架构如何运作?
- 在使用微服务架构时,您面临哪些挑战?
- 微服务架构的优缺点是什么?
- 微服务有什么特点?
- 什么是领域驱动设计?
- SOA 和微服务架构之间的主要区别是什么?
- 为什么需要域驱动设计(DDD)?
- 你对 Spring Boot 有什么了解?
- 什么是 REST / RESTful 以及它的用途是什么?
- 什么是 Spring 引导的执行器?
- 什么是 Spring Cloud?
- Spring Cloud 解决了哪些问题?
- 什么是有界上下文?
Linux面试题
- 列举几个常用的Linux命令
- 怎么对命令进行取别名?
- 建立软链接(快捷方式),以及硬链接的命令
- 当你需要给命令绑定一个宏或者按键的时候,应该怎么做呢?
- 查看文件内容有哪些命令可以使用?
- 随意写文件命令?怎么向屏幕输出带空格的字符串,比如”hello world”?
- 你的系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
- 移动文件用哪个命令?改名用哪个命令?
- 复制文件用哪个命令?如果需要连同文件夹一块复制呢?如果需要有提示功能呢?
- 怎样一页一页地查看一个大文件的内容呢?
- Linux 下命令有哪几种可使用的通配符?分别代表什么含义?
- 用什么命令对一个文件的内容进行统计?(行号、单词数、字节数)
- Grep 命令有什么用? 如何忽略大小写? 如何查找不含该串的行?
- 你平时是怎么查看日志的?
- 终端是哪个文件夹下的哪个文件?黑洞文件是哪个文件夹下的哪个命令?
2、 工欲利其事,必先利其器
在确定了要学习Java前,你一定要有一个非常完整的Java技术栈的大纲体系以及还不错的学习教程,如果我们连一套完整的学习教程都没有,根本不可能学会Java。而很多人在开始时用的教程非常老,很多技术都已经过时,企业并不用这些技术,所以学了也是白耽误工夫。
3、 实践是检验真理的唯一标准
学习编程一定要记得多动手写代码,视频只需要看一两遍即可。有很多同学不懂得如何学习编程,盲目无脑的一直刷视频看,但你看完视频后很快就会忘记,其实是在浪费你的时间。学习编程的主要目的是能做出好的互联网软件产品。这是一个需要动手的工作,所以我们学编程一定要注重动手写代码。而很多人学习编程都是只看视频,这样的学习方式是非常错误的,所以大家对于这点一定要牢记在心。
4、 项目实战
项目作品是展现我们水平的重要因素,我们在学完一个阶段后,一定要记得针对这个阶段去完成一个项目实战。真正能让我们印象深刻,加深理解的学习方式就是参与到项目的开发中。项目才能检验我们这个阶段到底学的怎么样,所以大家在学习的过程中切记项目的重要性,很多人学习Java最后却不能独立完成一个项目模块,如果你达不到这个水平,那么你是不可能找到Java开发工作的。25套面试资料+Java核心学习笔记共享!
新手学习Java的误区
1.没有详细系统的学习规划,越学越迷茫,不知道应该往哪里走,特别有想放弃的想法。
2.学习的技术并不是现在企业需要的技术,跟不上时代,不具备竞争力。
3.学习效率非常低,遇到一个小问题解决起来很费时间,甚至有的时候会卡几个小时,导致信心受挫,对自己适不适合产生怀疑。
4.没有掌握学习Java的方法和技巧,导致走的弯路特别多,钻进程序的死胡同出不来。
如果你也有以上的学习困惑,觉得自己无从下手,学习的效率很低,学了后面就把前面的忘记这些问题,基本都是因为自己的学习方法不对。所以我建议你一定要找有经验的人多沟通,这些问题都是可以得到很好解决的。
我之所以可以找到12K的工作,真的是得到了很多大佬的帮助,自己一个人自学编程真的太难。
小技巧分享
1、基础很重要,不要盲目的追求新技术,往往决定着你思维深度而又被你忽略的就是你的基础!
2、多动手敲代码,有时电脑就和女朋友一样,它和你想的总是有差异的!
3、多百度,多搜索,百度会帮你解决掉百分之九十以上的问题!
4、多思考,急于动手写代码是大忌,熬夜写代码效率并不高。
总结
有任何问题随时私聊我,希望我的学习经验可以帮助到你,多结交一个圈子内的大佬,方便以后创业,毕竟一辈子给人打工是没有止境的。