谈谈这些年学习Java的一些心得,程序猿的世界。(大学篇)
保持兴趣,不断学习。
学习过程中敢于承认自己的不足。
学习给自己的代码写注释。
幽默是必须的。
热爱编程,喜欢分享!
多运动!
大学入学,刚开始接触计算机,一些都很陌生,之前很少接触,打字都是一个手指来完成,没办法,就拿QQ练习吧,学校C语言需要两个学期才学完,都说学C是学习其他语言的基础,然后就利用课下的时间学完了C语言,虽然只是学了点基础,但是心里还是有种点点的成就感,后来算是经过学长的推荐和学习难度上的权衡,最后选择学习Java,于是,我与Java的缘分就开始了,当时是2010年,还没有这么多的在线学习平台,在线的教程也很少,当时在网上下载了 韩顺平 和 马士兵的Java教程,同时又在图书馆借了一本比较老的Java图书,然后每天有时间就看,白天自习有时间就看,晚上回去在宿舍看视频,记得最晚的时候凌晨两点多才去睡觉,那时的激情,现在回想起来都很佩服自己。
大一快暑假时学校组织参加我们省里的软件比赛(齐鲁软件大赛),那就跟着学长们来做吧,当时记得Java SE的部分刚刚学完,也就写一些小的程序,对Java整体的体系还不太了解。当时感觉能学到东西然后没细想就跟着报了名,当时我们组的选题是做一个搜索引擎,当时主要的开发时间主要集中在暑假,当时和学院里的一些同学暑假就留在了学校,学校的机房可以使用,由于当时学校没有协商好宿舍,我们只能在旁边的小村里租的房子,真可谓 日出而作,日落而归,但当时是内心兴趣驱动,所以没有感觉到压抑和束缚,更多的是快乐,时间也比较充分,现在回想起来,大学时光是多么的美好。其实前期的大部分时间都以学习为主,刚刚理解了Java Web体系,BS架构,MVC设计模式等相关的知识,JDBC数据库等连接,现在回想起来,很多东西都还没准备好,都参加比赛,确实有不自量力,但仍然很感谢这些东西,至少那个暑假让我学习到了好多东西,不仅知识,还有团队协作,相互帮助等珍贵的东西。第一年,自己在代码上并没有帮太大的忙,只是做了一些小的模块。回顾整个暑假,自己还是收获满满,Java WEB 以及 SSH也都基本掌握。这一年 或许可以用充实这个词来形容。
大二,接着折腾,在大一积累的基础之上,我们发现编程相关的东西,一个是要有专研精神,再一个要多交流,不过很多时候还是局限于网上,学校的氛围还缺少一个有关计算机的社团,由于学校原因,很少有人关注计算机这一块。省里组织的那个比赛相对来说提供了一个好的机会,通过对编程的兴趣,我们将这样一群人组织起来,通过交流会 或者 文档的不同的形式把我们的一些心得分享出来,那时我才感觉到,分享是快乐的。大二时候很多时间都在逃课,背着电脑奔波于各个自习室,喜欢自习室那种学习的氛围,那时候代码就是我们不断的动力,大二就这样过去了,不断的有人走进来,不断的有人走出去,可能有别的更加值得奋斗的方向。大二暑假,我又像往年一样,暑假留在了学校准备比赛作品,而同往年不一样的是,我是带着几个学弟学妹,我们都一样,边开发边学习,每个人都有一个奋斗的目标,那年还算不错,我们组当时在比赛中获得了一个三等奖!一些付出都还值得,感谢那年一块奋斗的兄弟姐妹们!
大三,由于各种原因吧,开始准备考研,于是编程相关的东西暂且先放在的一边,开始漫长的考研历程!
大学的一些经历告诉自己,有了梦想要坚持,just do it!
自学了java之后,最好要知道这些?
写这篇文章的目的是想分享一些自己学习Java的心得,这对于刚刚入门的Java程序员和打算入Java开发这个行当的准新手有一定的帮助,能让大家更好学习和使用Java。
对于刚学习java的时候一定要知道以下内容:
1、熟练的使用Java语言
Java程序员必须比较熟悉语法,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息 知道是什么样的语法错误并且知道任何修正,熟悉常用的JavaAPI,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。
2、熟练JDK中的命令
至少需要熟悉:appletviewer、 HtmlConverter、jar、 java、 javac、javadoc、javap、javaw、native2ascii、serialver,
3、Java中的基本类型和对象类型的掌握
基本类型: int, long, float, double, boolean ;对应的对象类型: Integer 等类型到基本类型的转换, 装箱和拆箱Object类型: equals, hashcode,String 类型的特点
4、java中的常用任务
管理:Java程序员必须熟悉使用ant完成工程管理的常用任务,例如工程编译、生成javadoc、生成jar、版本控制、自动测试。
5、框架
这个是一个需要多加掌握的部分,做java开发,可以说没有不用到框架的。
集合框架(常用框架)
集合框架的体系: 基础Collection ,Map
具体集合实现的内容, List ,Set ,Map 具体的实现,内部结构, 特殊的方法, 适用场景等
集合相关的工具类 Collections 等的用法
异常框架(不常用)
Throwable
Exception
RuntimeException
Error
RuntimeException
和 一般 Exception 的区别
6、熟练的使用产品原型工具Axure
熟练的使用设计建模工具PowerDesigner和EnterpriseArchitect,熟练的使用Java开发环境Eclipse和IntelliJ,熟练的使用前端开发环境WebStorm,熟练的使用软件版本控制工具SVN和Git,熟练的使用项目构建和管理工具Maven和Gradle.
7、掌握一定的版本特性
Java程序员除了精通Java意外,还要掌握JVM相关(包括了各个版本的特性)对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着五年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的。JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透。我在面试有超过五年Java经验的开发者的时候, JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证java开发能力的高低。
七年Java开发的一路辛酸史:分享面试京东、阿里、美团后的心得
前言
我觉得有一个能够找一份大厂的 offer的想法,这是很正常的,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司 / 小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的。
因为大厂面试一般都有专业团队负责,某个知识点你到底是掌握了还是单纯背下来,面试官一问就可以看出来(PS:真正到面试特别是你觉得准备面试的时间不够的时候,你可以多挑一些面试常问的问题来看,注意理解,一定不要死记硬背)。一定不要过分寄希望于各种面经,试着去提高自己的综合能力。
“ 80% 的 offer 掌握在 20% 的人手 ” 中这句话也不是不无道理的。决定你面试能否成功的因素中实力固然占有很大一部分比例,但是如果你的心态或者说运气不好的话,依然无法拿到满意的 offer。运气暂且不谈,就拿心态来说,千万不要因为面试失败而气馁或者说怀疑自己的能力,面试失败之后多总结一下失败的原因,后面你就会发现自己会越来越强大。
从大厂实际招聘要求来看到底青睐什么样的人?
首先要明确的一点是:985/211 的学历的确会为你加分很多。
另外,再强调的一点是不要天天把自己的学校是双非学校这个接口当做你无法进入大厂的原因。只要你的能力足够,大厂的大门就会为你打开。也有着很多双非学校甚至是三本的同学就拿到像阿里、腾讯这样的大公司的 offer。
从阿里、腾讯等大厂招聘官网对于 Java 后端方向/后端方向的要求,我们大概可以总结看出大厂对招聘者的能力要求。
下面以阿里巴巴为例子,看看大厂的实际要求
在面试 Java 工程师的时候,下面几点也提升你的个人竞争力:
熟悉开源框架的底层,阅读源码;
大型数据库系统经验;
熟悉分布式,缓存,消息中间件;
良好的表达和沟通能力, 善于学习, 关注前沿。
“ 一定要有一门自己的特长,不管是技术还好还是其他能力 ” 。我觉得这句话真的非常有道理,大家可以仔细思考一下。在这里再强调一点:公司不需要你什么都会,但是在某一方面你一定要有过于常人的优点。换言之就是我们不需要去掌握每一门技术(你也没精力去掌握这么多技术),而是需要去深入研究某一门技术,对于其他技术我们可以简单了解一下。
我觉得比起你对每一门技术都是浅尝辄止,深入吃透某一门技术对你的个人竞争力提升才更有帮助。
如何获取大厂面试机会?
在讲如何获取大厂面试机会之前,先来对比一下两个非常常见的概念——春招和秋招。
招聘人数:秋招多于春招 ;
招聘时间: 秋招一般 7 月左右开始,大概一直持续到 10 月底。但是大厂(如 BAT)都会早开始早结束,所以一定要把握好时间。春招最佳时间为 3 月,次佳时间为 4 月,进入 5 月基本就不会再有春招了(金三银四)。
应聘难度:秋招略大于春招;
招聘公司:秋招数量多,而春招数量较少,一般为秋招的补充。
综上,一般来说,秋招的含金量明显是高于春招的。
下面我就说一下我自己知道的一些方法,不过应该也涵盖了大部分获取面试机会的方法。
关注大厂官网,随时投递简历(走流程的网申);
找到师兄师姐或者认识的前公司的技术牛人,帮忙内推(能够让你避开网申简历筛选,笔试筛选,还是挺不错的,不过也还是需要你的简历够棒);
求职类网站投递简历(不是太推荐)。
除了这些方法,我也遇到过这样的经历:有些大公司的一些部门可能暂时没招够人,然后如果你的亲戚或者朋友刚好在这个公司,而你正好又在寻求 offer,那么面试机会基本上是有了,而且这种面试的难度好像一般还普遍比其他正规面试低很多。
想要取得一份自己满意的 offer,前提是自己要有过硬的实力作为资本,下面就如何提高个人硬实力给大家提几点建议!
如何提高个人硬实力及大厂 Java 后端面试主要问些什么??
我在这里所说的个人硬实力更多的指的是个人的专业能力,比如构建高质量网站的能力或者是对专业知识的掌握程度。
我觉得不论是对于新手还是老手,想要提高个人硬实力最重要的就是不断深入学习并且将理论实践,最好可以将理论在具体项目中实践一下。
想要提高个人硬实力,那么学习一门新技术的方法一定是至关重要了。下面分享一下《 Java 工程师修炼之道》一书对于学习一门新技术的一些要点(在这以图片的方式整理了出来,更加方便阅读):
一定要有自己的技术优势,可能你懂得不是最多的,但是别人不会的你却会,那么你就是厉害的!然而如何准备大厂面试?我觉得最关键的一点之一就是搞清楚大厂面试主要在问些什么。下面我将分解每一个知识点,给大家简单说一下大厂面试主要会问些什么?
首先你要明确的是面试官所问的内容一定和你简历所写的东西是紧密联系的,一般你没有记录简历上的技能,面试管很少会去提问。
大厂面试大体上包括下面几方面知识类型:
Java 基础、多线程、IO 与 NIO、虚拟机、设计模式
面试官在多线程这一部分很可能会问你有没有在项目中实际使用多线程的经历。所以,如果你在你的项目中有实际使用 Java 多线程的经历 的话,会为你加分不少哦!
设计模式比较常见的就是让你手写一个单例模式(注意单例模式的几种不同的实现方法)或者让你说一下某个常见的设计模式在你的项目中是如何使用的,另外面试官还有可能问你 “ 抽象工厂 ” 和 “ 工厂方法模式的区别 ” 、“ 工厂模式 ” 的思想这样的问题 ” 。
建议把代理模式、观察者模式、(抽象)工厂模式好好看一下,这三个设计模式很有用。
数据结构与算法(要有手写算法的能力)
数据结构比较常问的就是:二叉树、红黑树(很可能让你手绘一个红黑树出来哦!)、二叉查找树(BST)、平衡二叉树(Self-balancing binary search tree)、B – 树,B + 树与 B * 树的优缺点比较、 LSM 树这些知识点。数据结构很重要,而且学起来也相对要难一些。建议学习数据结构一定要循序渐进的来,一步一个脚印的走好。一定要搞懂原理,最好自己能用代码实现一遍。
计算机网络(TCP 三次握手和四次挥手)
数据通信(RESTful、RPC、消息队列)
如果你的简历上写了你会某个RPC框架(比如:阿里的开源的dubbo)或者消息队列(比如:RabbitMQ、Kafka)的使用的话,面试官一般会以你写在简历上的技术提问,回答的时候最好能结合在项目中的实际使用。
性能优化及操作系统(常见优化方式,Linux 的基本命令以及使用)
主流框架(Spring 底层原理与源码问的很多)
Spring一般是不可避免的,如果你的简历上注明了你会 Spring Boot 或者 Spring Cloud 的话,那么面试官也可能会同时问你这两个技术,比如他可能会问你 springboot 和 spring 的区别。 所以,一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。
另外,AOP 实现原理、动态代理和静态代理、Spring IOC 的初始化过程、IOC 原理、自己怎么实现一个 IOC 容器?这些东西都是经常会被问到的。
数据存储(最常见的是 MySQL、Redis)
分布式(分布式锁,事务等)
多线程并发
从架构设计,到应用层调优,再深入了解底层原理,扎实的Java基本功才能让自己变为扫地神僧:内存模型,并发模式,线程模型,锁细节等等…..
除了这些东西还有什么其他问题:
实际场景题
实际场景题就是对你的知识运用能力以及思维能力的考察。建议在平时养成多思考问题的习惯,这样面试的时候碰到这样的问题就不至于慌了。另外,如果自己实在不会就给面试官委婉的说一下,面试官可能会给你提醒一下。切忌不懂装懂,乱答一气。
面试官可能会问你类似这样的问题:
假设你要做一个银行 app,有可能碰到多个人同时向一个账户打钱的情况,有可能碰到什么问题,如何解决(锁)?
你是怎么保证你的代码质量和正确性的?
下单过程中是下订单减库存还是付款减库存,分析一下两者的优劣。
同时给 10 万个人发工资,怎么样设计并发方案,能确保在 1 分钟内全部发完。
如果让你设计 xxx 系统的话,你会如何设计。
生活
一般到最后的 HR 面的时候,面试官基本就是和你聊聊天。他可能会问你类似如下的问题:
父母是做什么的,具体一点
自己平时是如何学习的
平时的兴趣爱好是什么
性格/其他
主要是看你个人的性格以及价值观是否适合他们公司,比如他会问你类似下面的问题:
遇到压力大的情况自己是如何处理的
遇到很难解决的困难怎么办
遇到不是很喜欢同项目组的某个成员的情况怎么办
如何看待加班
你觉得自己有什么缺点/优点
总结强调
一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的;能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;建议提前了解一下自己想要面试的公司的价值观,判断一下自己究竟是否适合这个公司。
最后
针对于上面所提到的知识导图我总结出了一些架构视频资料和互联网公司java程序员面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料还有完整高清的java进阶架构学习思维导图免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
资料领取方式:转发此文关注小编私信回复【架构资料】即可
重要的事情说三遍:转发+转发+转发关注我私信回复 架构资料
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。