写在最前面的话
这篇文章是以我自己的亲身经历来写的,坐标深圳,以数据说话,全网首发,100%真实可靠!首先介绍一下我自己,我来自某不知名二本,有一年的Java实习经验,并且华丽的错过了校招,只能走社招。从8月15号来到深圳,花费1天时间找房子,最后经过一番考量,最终定居在福田区,福田区这边花销比较高但最可能也会离你将来工作的地方要近。找好了房子之后,明天刚好是周末,周末投简历,人家肯定看不到(其实也能看到,垫在底下咯)。也就是说我从8月19号正式开始闯荡江湖,找到9月27号,扣掉不可能有面试的星期六和星期天,总共耗时一个月。深圳这边毕业生的行情大概是6-7K+五险一金(像我这样的渣渣就这价,985/211应该会高个1-2K,如果你立志要进BAT这样的大公司,这个我就不清楚了),我的工资就在这个范围内。本次一共斩获4个offer,我选择了我最看好的那家,抱大佬的大腿美滋滋~
投简历
我一直都是网投(网投的话,一般就四家吧。51job,智联,拉勾还有boss),如果还是没有找到工作的话,就要跑跑广州这边的宣讲会了,显示一下我的诚意。接下来我把我投递的情况晒出来,让大家感受一下社会的残酷。(一袋米要扛几楼!
51job战绩:
51job上的社招投递 51job上的社招投递 51job上的社招投递 51job上的校招投递51job总计投了60份简历,已查阅7份,感兴趣2份,邀面试3家,校招至今为止一个电话都没打过(公司邀面试不一定会把你扔进“邀面试”那一栏,还有可能会单独给你发邮件,给你打电话,所以不要灰心,说不定你还有机会!)
智联战绩:
智联我没投过,因为听说上面有好多传销,我一怂就一封也没投(其实传销到哪个平台都有,之后我会写一下如何擦亮你的眼睛,至少能够辨识80%的传销),其实说不准你的机会就来自于智联招聘,还是投一下吧
拉勾战绩:
拉勾上的投递 拉勾上的投递 拉勾上的投递拉勾总计投了71份简历,已查阅54份,待沟通1份,被转发18份(会把邮件发送到你的邮箱里),界面设计的最漂亮的拉勾,全军覆没。当真验证了那句,拉钩上吊一百年,不合适~ 我一开始就信的拉勾,投的怀疑人生。我就算再怎么差也不至于到一个面试都没有吧???全是被转发,转发完就没回复了。而且一个公司只能投一次,投完你以后都没有机会了。后来我干脆用他的海投机器人了。我发现一个有趣的现象,海投投的5年以上,10年以上的也会被转发。敢情一个刚毕业的就能进公司当老大了???我觉得这样的天才可以开高薪,毕竟他值这个价,但也不能一进去就当老大吧,这样看来被转发大多数情况只是个美丽的谎言
Boss直聘战绩:
Boss直聘上的投递boss总计,投了11份简历,4个面试,向boss打过84个"花样招呼",从刚开始的已读不鸟你,到我们不招刚毕业的,再到我想要一份你的简历,最后到你方便过来面试吗。其实这需要一定的技巧,说好听点叫态度,说难听点叫凑字数。我建议大家赶紧把那个打招呼关掉,你写一段自我介绍加入常用语(字数控制在80~100字),然后发完自我介绍,就问我们可以聊聊吗这一类的废话,一句就好。如果他还是已读不回复,就用这两句话每天轰炸他,早晚会回的(各位看技术文章的boss轻点打,疼)
擦亮眼睛勿进传销
我投简历的时候,其实也投过简历给那种疑似传销的公司,虽然人家根本没联系我(惨,传销都看不上),这个时候你还需要借助天眼查。其实很简单,你要看的就是注册资金,注册资金少于100万的,开的工资还挺高,多数是传销。还有那种提供的薪资不低,大概6-8K还包住宿,却欢迎18-28岁转行人员的,这一类的企业也很有问题,你说你一个刚转行的就能拿6-8K还提供住宿,我怎么就不信呢?刚转行的最多就是培训过了,并没有什么真实的项目经历,甚至有的人一点都不懂,你说你不给公司创造价值,公司却要培养你还包住,公司里的人都是不吃饭的铁人吗?这样的公司也有鬼。还有就是那种你需要会的一个技术都不写,就是一堆假大空的有责任心,有上进心,肯吃苦的废话,工资却能开上8K,敢情你是请了个大爷来啊。还有一种是地址不明的,xx地铁站,具体地址都不写明的,反正这类公司我是不愿意去。其实那种注册资金100万在居民楼里的公司不一定是传销,有可能是初创公司,就是环境惨的不是一点半点。天眼查里的预警并不都是坏事,可能公司搬迁找不到该公司,后来公司登记新地址,这样的信息是会成预警的。如果公司下面有诉讼,这个你就要小心了,多数是没发工资被告了
包装简历
我的简历得到过大部分面试公司的好评,我觉得我有资格来讲讲简历怎么写。简历也需要一定的包装,但是请确保简历的真实性。不要为了能得到面试机会而欺骗HR,哪怕简历写虚假的工作经历,面试说实话也不行。你欺骗的结果大概率是大眼瞪小眼,回去等消息。那我要做的究竟是什么呢?精炼个人简介,就比如:
本人有x年/x月的xx经验,对贵公司的xx有浓厚的兴趣。热爱编程,在网上发表过技术文章。英语xx水准,能够看懂开发文档。具有xx的使用经验,使用过xx系统/软件
反正你就一个优点,一个论据的写,控制在100字左右
教育背景别写那一大堆的课程,跟个流水账似的,谁看谁头疼
工作经历不是项目经历,需要你把工作或者实习的内容用简练的语言描述概括。概括完在用一句话写大家对你的评价
项目经历主要突出三个要点:xx级别的项目(是你的实习项目,还是个人开源项目等等),技术难度大不大(这个你要自己把控,不要过分抬举自己),工作量(你完成了多少,完成的情况)
剩下的东西都不是特别重要,千万不要瞎写什么精通,除非你真的有个两三年工作经验
面试所需基础
这个是本文的重头戏,如果你不具备这些基础,找工作举步维艰!我刚来深圳那会基础都不行,一边面试一边补,我现在的基础肯定是及格了,现在分享出来我认为重要的知识点,只为帮助更多的人!我敢打包票,我说的这些60%会出现。本节以一问一答的形式向大家展示面试基础
java基本类型有哪些?
分类去计,整数型有byte,short,int,long,浮点型有float,double,布尔型有boolean,字符型有char,还有个void,别忘了
什么是装箱和拆箱?
装箱:值类型转化为引用类型 拆箱:引用类型转化为值类型
StringBuffer和StringBuilder谁是线程安全的?为什么?请简单说一下什么是线程安全
StringBuffer是线程安全的,StringBuilder不是线程安全的,StringBuffer比StringBuilder多了synchronized修饰符。线程安全指多个线程执行同一段代码时采用加锁机制,使每次的执行结果和单线程执行结果一致,不存在执行时出意外。不安全指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得数据是脏数据
Redis常用的数据类型有哪些?
String,List,Set,Hash(键值对)
Map是无序的吗?
HashMap是无序的,LinkedHashMap是有序的,TreeMap是按key排序的
ArrayList和数组(Array)的区别是什么?
ArrayList不用定长度,会自动扩容。数组需要定长,超过定下的长度会报数组越界。数组可以包含基本类型和对象类型的数据,ArrayList只能包含对象类型的数据
什么是乐观锁?什么是悲观锁?在Java是怎么体现的?
乐观锁:认为读多写少,遇到并发的可能性低,所以不会上锁,但是在更新的时候判断一下在此期间别人有没有更新去更新这个数据,采取在写时先读出当前版本号,然后加锁操作。体现:atomicInteger
悲观锁:认为写多,每次拿数据的时候认为别人会修改,所以每次在读写数据时都会上锁,这样别人想读这个数据就会block,直到拿到锁为止。体现:互斥锁
简单描述进程和线程
进程:当一个程序进入内存,即变成一个进程
线程:轻量级进程,线程是进程的执行单元
一个程序运行后,至少一个进程,一个进程至少包含一个线程
Java执行顺序是怎样的?
父类静态代码块→子类静态代码块→父类非静态代码块→父类构造函数→子类非静态代码块→子类构造函数
请你比较一下Java和JavaScript
Java是面向对象的语言,即使是开发简单程序也要有类。JavaScript是基于对象的语言,有丰富的内部对象供开发者使用,比如document,location,Math
请你讲讲&和&&的区别
&是逻辑与,&&是短路与。短路与只要与左边的条件为false就能判断整个条件为false,而逻辑与两边都需要判断
int和Integer有什么区别?
int默认值是0,Integer默认值是null。int是基本类型,Integer是引用类型。Integer范围是-128~127 int的范围是-2^31~(2^31)-1
String是基本类型吗?
String是final类型,因此不断继承这个类,不能修饰这个类。为了提高效率节省空间,应该用StringBuffer
什么是值传递?什么是引用传递?
值传递是对基本类型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量
引用传递一般是对于对象型变量而言,传递的是该对象地址的一个副本,并不是原对象本身
一般认为Java内的传递都是值传递
请说明“==”比较的是什么?
如果两个对象完全相同时,“==”将返回true,“==”两边是基本类型,就比较数值是否相等
若不重写hashCode()的话,hashCode()如何计算?
该方法直接返回对象的地址
你对synchronized和Lock有什么了解?
synchronized是Java的关键字,当他修饰一个方法或者一个代码块时,能够保证在同一时刻最多只有一个线程执行该代码(互斥的体现)
Lock是一个接口,synchronized能做的他都能做,synchronized在发生异常时,会自动释放线程占有的锁,不会导致死锁的发生。而Lock在发生异常时,如果你没有在finally中主动unlock()去释放锁,就很有可能导致死锁
请你介绍一下volatile?
volatile是Java关键字用来保证有序性和可见性
可见性:一个线程修改了某个变量的值,这个新值对其它线程来说是立即可见的
有序性:禁止进行指令重排序
volatile只能保证单次读/写的原子性。i++这种操作不能保证原子性(i++的过程是读取i值,把i+1,再把i+1赋给i,这个过程中任何一步都可能会被其它线程改动,像i=1这种的就可以保证原子性)
synchronized修饰一个静态方法,锁住了什么?如果修饰成员方法,又锁住了什么?
synchronized修饰静态方法锁住的是类,线程想执行对应同步代码,需要获得类锁
synchronized修饰成员方法锁住的是对象,线程想执行对应同步代码,需要获得对象锁
若对一个类不重写,他的equal()方法是如何比较的?
比较的是对象的地址
请解释hashCode()和equals()方法有什么联系?
相同的对象必须具有相等的Hash码,两个对象的Hash码相同,他们并不一定相同
什么是构造函数?什么是构造函数重载?
每当新对象被创建的时候,构造函数就会被调用,每个类都有构造函数
构造函数重载和方法重载很相似。可以有多个构造函数,参数列表不同
Java中的方法覆盖和方法重写是什么意思?
重写:子类重新定义父类的方法,重写必须有相同方法名,参数列表和返回类型
重载:方法名相同,参数列表不相同(注意!int fun(int x)和int fun(int y)不算重载)
什么是多态?
重载和重写就是多态的具体表现形式
内部类可以引用它包含的类的成员吗?如果可以,有什么限制?
一个内部类对象可以访问创建他的外部类对象的内容
内部类不是static的,那么它可以访问创建他的外部类对象的所有属性
内部类是static的,那么它可以访问创建他的外部类对象的static属性
Java如何进行异常处理?
每当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息。调用这个对象中的方法可以捕获这个异常并进行处理
Java的接口和抽象类的相同和不同处?
相同:都不能实例化
不相同:抽象类中的方法是public,private,protected,default 接口方法是public,default
抽象类可以是public,private,protected,default 接口方法是public
一个子类只能继承一个抽象类,可以实现多个接口
抽象类可以有构造方法,接口内不能有构造方法
Java的异常有几种?Exception和Error的区别是什么?
Exception分为两类,编译时异常和运行时异常
Error:一般发生在严重故障时,他们在java程序处理的范畴之外
Exception:程序可以处理的异常,可以捕获且可以恢复。遇到这类异常应尽快处理
请说明final,finally,finalize的区别?
final用于声明属性,方法和类,分别表示属性不可变,方法不可重写,类不可继承
finally是异常处理语句结构的一部分,代表总执行
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法
面向对象的特征
封装,继承,多态,抽象
Java是否支持多继承?
类不支持多继承,接口支持多继承
是否可以在static环境中访问非static变量?
不可以,static是静态常量,属于类,调用非static变量需要new,而类的加载先于实例创建
请说明static关键字是什么意思?Java是否可以重写一个private或static的方法?
static关键字表明一个成员变量或者是成员方法可以在没有所属类的实例变量(没有new)的情况下被访问
不可以,private只能被自身类访问
不可以,static是编译时静态绑定的,override是运行时动态绑定的
List、Set、Map是否继承自Collection接口?
List、Set是。Map不是
请说说常用的集合类及方法?
最常用的集合类是List和Map
List里最常用的就是ArrayList.他是可变长度的列表
Map里最常用的就是HashMap,他按键值对进行存储,但HashMap线程不安全
请说明Collection和Collections的区别?
Collection是集合类的上级接口,继承他的主要有Set和List
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对集合的各种操作,如sort()
HashMap和HashTable的区别?
HashMap允许key和value是null,而HashTable不允许key或value是null
HashTable(这是一个遗留类)是线程安全的,HashMap是线程不安全的
请说明ArrayList是否会越界?
ArrayList并发add()可能出现数组下标越界异常
如果HashMap的可以是一个自定义的类,怎么办?
就必须重写hashCode()和equals()
请说明线程的基本状态及状态间的关系?
新建状态,运行状态,销毁状态,就绪状态(万事俱备,只欠cpu),阻塞状态(阻塞可能因为调用wait()进入等待池,也可能调用同步方法进入等锁池,或是sleep()等待休眠,发生I/O中断)
什么是线程池?
创建和销毁对象很费时间,创建一个对象要申请内存及其他资源,在对象创建之后JVM试图跟踪每一个对象,虚拟机就能在对象销毁之后进行垃圾回收,所以提高效率的一个方案就是尽可能减少创建和销毁对象的次数,这就是池化思想的来源。线程池就是事先创建若干个可执行的线程放入一个池中,需要时从池中获取,不用自己创建,用完了可以放回池子里,不用销毁,从而减少了创建和销毁的开销
举例说明同步和异步
同步和异步最大的区别就在于一个要等待,一个不要等待
异步:发短信,发起者不关心接收者状态,不用等待对方回短信就可以进行下一次发送
同步:打电话,发起者需要等待对方接听,接通后才能通信
当一个线程进入对象的synchronized方法A之后,其它线程是否可进此对象的synchronized方法B?
不能。其它线程只能访问该对象的非同步方法,同步方法则不能进入。A方法的对象锁已经被取走,试图进入B方法的线程只能在等锁池里等待对象锁
请问sleep()和yield()有什么区别?
sleep()给其他线程机会时,不考虑优先级。yield()只会给同级或更高级的线程机会
执行sleep()后转入阻塞状态,执行yield()后转入就绪状态
stop()和suspend()为何不推荐使用?
stop()会解除由线程获取的所有锁定,如果线程处于不连贯状态,很难检查出问题所在。suspend()容易发生死锁,调用suspend()时,目标线程会停下来,但仍然持有之前的锁定
请说明sleep()和wait()有什么区别?
sleep是Thread的方法,wait是Object的方法
sleep方法暂停指定时间,让出cpu给其他线程,但他监控状态依旧保持着,当指定时间到了又会自动恢复运行状态
在调用sleep方法的过程中,线程不会释放对象锁,而调用wait方法的时候线程会放弃对象锁
请分析同步方法和同步代码块的区别是什么?
同步方法默认用this或当前类对象作为锁
同步代码块可以选择以什么来加锁
请简述一下线程池的运行流程?
当需要任务大于核心线程数,把任务往存储任务队列里放,当存储队列满了的话就增加线程池创建的线程数量,当线程数量达到最大,就开始执行拒绝策略
请简单描述一下死锁?
两个线程或两个以上线程都在等待对方执行完毕才能继续往下执行,结果就是陷入了无尽的循环
请说明一下synchronized的可重入怎么实现?
每个锁关联一个线程持有者和一个计数器,当计数器为0时表示该锁没有被任何线程持有,那么任何线程都可以获得该锁而调用方法。当一个线程请求成功后,JVM会记下持有锁的线程,并将计数器记为1。此时其它线程请求该锁,则必须等待,而持有锁的线程如果再次请求这个锁,就可以再次拿到锁,同时计数器会递增。当线程退出一个synchronized方法/块时,计数器会递减,如果计数器为0则释放该锁
JDK和JRE的区别?
JDK是Java开发工具包,JRE是Java运行环境,JDK中包含了JRE
请简单描述一下垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么方法可以主动通知虚拟机吗?
当对象被创建时,GC就开始监控这个对象,GC采用有向图的方式记录和管理堆中的所有对象,通过这种方式确定哪些对象是可达的,哪些是不可达。当GC确定一些对象“不可达”时,GC有责任回收这些内存空间
Java中内存泄漏是什么意思?
不再会被使用的对象内存不能被回收就是内存泄漏
运行时异常和一般异常有什么区别?
运行时异常不是必须要catch
一般异常必须要catch,不管你是否乐意
依赖注入有几种?
Set注入,构造器注入,接口注入
Redis的List在什么场景下使用?
Redis中List的数据结构实现是双向链表,所以可以非常便捷地应用于消息队列(生产者/消费者模型)。消息的生产者只需通过Ipush将消息放入list,消费者便可以通过rpop取出该消息,并且可以保证消息的有序性
缓存的优点是什么?
减少对数据库的读操作,降低数据库压力。加快了响应速度
为什么Redis是单线程的?为什么Redis读写速率快?
CPU不是Redis的瓶颈,Redis的瓶颈是机器内存或网络带宽。Redis是纯内存数据库
GET和POST的区别
GET方式通过URL提交数据,POST方式数据放在请求头或消息体提交
GET提交的数据最多只要1024字节,POST则没有限制
使用GET的时候参数会显示在地址栏上,而POST则不会,所以敏感数据还是使用POST好
数据库ACID特征
原子性:事务是是一个不可分割的工作单位,事务要么都发生,要么都不发生
一致性:事务前后数据的完整性必须保持一致
隔离性:多个用户并发访问数据库,多个并发事务之间互相隔离
持久性:一个事务一旦提交,他对数据库中数据的改变是永久的,数据库发生故障也不会对其有影响
浏览器从接受一个URL到展示,经历了什么?
DNS解析→TCP连接→发送HTTP请求→服务器处理请求并返回HTTP报文→浏览器解析,渲染页面
除了以上这些之外,你还需要掌握常考的设计模式和算法
常用的设计模式
单例模式,工厂模式,观察者模式,装饰模式,代理模式,策略模式,适配器模式
常考算法
冒泡排序,快速排序,二分查找
面试
技术面试,无非就是Java基础+项目经历(+设计模式),如果是刚毕业或是还在校的学生,问的60%是Java基础,10%~20%的数据结构和算法(不过公司确实更看重这一块,这一块答好基本就稳了),剩下的才是项目经验(项目经验主要是你干了什么,有多大的工作量,用到了什么技术),问到的东西还会拓展,一般就是验证这个东西是不是你写的,你对这个技术熟悉到什么程度,如果你确实是使用过一般都没问题
机试的话,至今只有一次经历,还败北了。是让你用他给的数据库现场做一个聊天室,数据库用SQLServer这个倒是问题不大,socket我不会现场学也还行,但是那句“不准用C/S模式”给我搞懵了,没做出来。关于其他公司的机试我也不好发言,不过你也不用紧张,机试是可以上网百度的
HR面试,无非就是想了解你个人的情况,你在校期间/这几年工作期间干了什么,取得了什么成绩,这个就畅所欲言吧,一般都是个人Show Time,一定要示强不示弱,不要说什么我觉得我哪里哪里不好。但是,也会有一些比较刁钻的问题,比如说:你对未来的规划是怎么样的?千万不要说些假大空的话,我希望我在xx领域有所建树,这一类的千万不要有,你真的有规划就说说自己的理解,没有就说我希望根据公司的安排共同成长。请你说一下自己的优缺点? 不要说没有发现,也不要那么耿直,最好就是优点留一两个,把它当成缺点说。谈薪资的话看你对公司的意向了,你很想加入,为了稳你可以低一点,如果不喜欢可以要高点,高出他那个范围。反正你都会被压价格的,这个暂时也没想到有什么好对策,有时真的很怕竹篮打水一场空...唉...
后记
以下是我对这次找工作的感慨,也总结了一些东西以告诫还在路上的行者。
金九银十不仅仅意味着机会,同时也代表了会有几千个竞争者和你竞争同一个岗位,在职位发布不密集的时段求职其实也是一种思路。有校招就走校招,这是你能进入心仪公司最好的机会,如果你错过了,越是大公司越是不缺应聘者,就算你再怎么有经验都好,xx届毕业生这个死条件大概率会把你拍死在沙滩上。招聘公司还是Boss直聘比较靠谱,不过大多数是小于100人的小公司,怎么做抉择这个看你的了,如果你有足够的实力拿小公司的offer,那就挑战一下大公司的offer吧。互联网是个大蛋糕,谁都想来切一块,随着入行的人越来越多,你需要会的东西也越来越多,以上的这些基础你都会了,别高兴的太早,只不过才完成了万里长征的第一步,你要把我没提到的知识点也好好巩固一下,再往深一点挖掘原理,死扣细节,想方设法折磨自己,狂野生长。
不要害怕,不要认怂,固执的人不怕累,真正的强者不低头,不怕有千万人阻挡,只怕自己投降!此句,愿与君共勉!
转载请注明出处!不要忽视他人的劳动成果!
网友评论