微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

初级java需要掌握到什么程度,java掌握到什么程度算好的水平?

2016年的要求。

谢邀,相对于其他语言,java的门槛可能还是比较高的。想要达到就业水平你最基本要懂得前端后端交互的流程吧,后端处理语言jsp了解下,然后看一下springmvc和数据库(一般是MysqL),知道如何用jdbc连接数据库。学会eclipse debug,就是简单地调试和分析bug,然后简单的了解下http协议(请求方式和状态码看一下)。接下来就是不断积累经验和试错的过程了,等你写了几万行代码再回过头来看你以前的代码,觉得这是垃圾的时候,恭喜你,达到入门级了。   用java想达到就业的程度还有不少路要走。
了解一下mvc的概念,开始学习常用框架如spring、struts、hibernate吧。   2019年的要求。 19年了,分布式,微服务,中间件,jvm调优都要会,然后简历不会包装的,hr那关都过不了。   2016 - 2020年这几年的时间里 提高了不少新的要求了 Redis,SpringBoot,SpringCloud,K8s,docker,RabbitMQ, vue 等等都是这几年火爆起来的框架,要求也提高了不少,  

其实更重要的是计算机的理论体系。

1.算法与数据结构

2.数据库系统

3.计算机网络基础

4.操作系统

然后才能谈语言,就java而言,了解基本语法,了解语法,语言特性,集合,IO\NIO\AIO,java程序的运行原理,java对象内存模型,JVM,面向对象基本思想,反射,代理。

web层面了解springMVC

了解spring IOC AOP编程思想,事务隔离等级,传播属性

建立缓存思维,从基本的本地缓存,到分布式缓存,redis的基本操作及原理。

建立数据异构思维,了解关系型数据库,k/v数据,搜索引擎es,的存储有何不同及适用场景.

了解大数据的存储手段,简单的分库分表策略

建立集群思维,真正的生产环境下,同样的代码保持了很多份实例在运行,考虑如何保证计算结果的正确性。

做到以上,找一份java相关的工作一点都不难,时间上看半年到1年,也能学会。【要是半年还问你干嘛,至少3个月,不能再多了,3个月都是很多了。】

【我2020-07辞职, 2020-10-08 过后才找到新工作的,

不过很遗憾,有的人24岁干普工,自己自学转行到了java行业,

我自己科班出身,却有的时候想离开java行业,真的是何不食肉糜。】

要相信自己,不要听别人对你的评价,那些都不准确,不靠谱,因为最认识自己的人,其实是你自己啊,相信自己的能力,好好发挥吧,加油。

计组不只有硬件知识,原码补码反码、位运算、线程调度这些基本都涉及到计算机组成原理知识了

我可能不配被校招。就是打击你让你报辅导班的

硕士也没这么问的,社招这么问可能性比较大

------------------------------------------------------------------------------------------------------------------------------------------------------------

既然是校招,那么作为校招混进某厂,从此接着混了11年而且当过好几次校招面试官的我,还是可以来聊一聊这个话题的。虽然题主强调的是java,但是说实在的,校招更看重基础,如果想校招后混大厂,下面几点是你应该在大学期间打下牢固基础的。有了这些我们再聊点其他的。相信做到下面这些,无论哪个厂都会考虑要你:

1.算法基础,大厂的笔试题就没有,别的不说,算法必须玩儿得溜溜的,算法导论还是要看看的,ACM的题或者是leetcode的题目你必须要刷得有一定水平吧。对了,大学参加点算法比赛,如果拿点奖,超级加分项。算法这个问题,个人看来虽然算套路,你不想被套路,那还是刷题套路考卷吧。为什么如此重要?因为很多经典问题的线装本就在这里,经典问题你都解决不好,还指望你能灵活变通?

2. 数据结构,程序=数据架构+算法,这个应该听过吧?代码的灵魂之一了,合适的数据结构配合合适的算法,是解决问题的根本之道。也不要求你多了,时间复杂度和空间复杂度的问题,必须给整明白了。数组,链表,这两个基本的结构搞懂,加以创造,平衡二叉树,红黑树,哈希表,堆,捅,图,这些结构用数组和链表的方式分别去创造下,自己实现下,增量因子设置多大,为什么要那么大什么的破烂问题也要关注。

3.计算机组成原理, 至少《计算机组成与设计》至少大学要看一遍吧,不说原版,中文翻译版还是要搞一手噢?

4.计算机网络,这个搞懂几个层是啥,TCP/IP的三次握手,四次挥手过程,为什么要这样设计,抓包怎么抓,基本还好了。

5.操作系统,《操作系统――精髓与设计原理》什么的还是看看吧,手动实现个建议版本的linux内核,相信内存分配、调度、进程、线程这几个点,着重理解下,相信大学的你只要看了些linux内核的书籍,大多数内核代码你是看过的了。

6.数据库:不光要会写sql,几大范式定义概念搞懂。数据库事务的ACID总能扯明白吧?隔离层级分别保障的粒度,和依然存在的问题你得知晓吧?更重要的是,你得知道sql得优化和套路。查询优化策略,db层级的优化考虑你是大学生,不太会问题。这年月也不想要求你oracle了,但是主流的MysqL的存储引擎之间的区别,你得知道吧。索引你得知道吧,这个是个比较广泛的话题噢,索引原理,索引数据结构与算法,为什么会采用这些索引?索引优缺点。都起码知晓下吧。数据库事务的实现方式你能知道一些吗?二阶段提交、三阶段提交你知道不?看你个人深浅了。

7.编译原理:记得有门课程,如果实现一个简单的编程语言,这个都有搞过吧,各位985的童鞋们?翻翻去,别忘记了。别觉得难,也别看不起,你要是真认了我也就放心了——至少这个小伙子处理字符串的能力很强,AST都能搞搞了,日常的字符串信息处理问题应该不大的。

编程语言:题主都指定Java了,那我们就来掰扯掰扯java的一些知识点了。

1.集合方面:map,set,list的区别概念,你总该晓得吧?你看数据结构重要不?我问你点具体的实现类简单点的就HashMap HashSet ArrayList,看你能扯多少,要是能行的话我们换点稍微有意思的话题HashTable,CurrentHashMap,TreeSet,LinkedHashSet,LinkedArrayList,BlockingQueue及其各种实现看你能掰扯几分了?

http://2.IO方面:BIO\NIO\AIO你有能知道多少呢?这个话题可就多了也见深浅了,话题也开放了。基本的IO操作,到实现机制、设计模式乃至操作系统的各种调度我都可以和你聊一聊,也顺便可以和你扯一扯mina,netty,Grizzly,听没听过,玩没玩耍过,相信很快能摸出你的深浅。

3.多线程:你以为这个你能跑得掉?线程的生命周期,同步异步的区别,什么时候需要同步,什么时候需要异步,线程的调度方式,聊聊并发编程,为啥要并发,怎么去并发,你处理了哪些并发问题,你能没经验,不过没关系,问问还是可以的。

4.虚拟机的那些事儿:都搞java了,虚拟机的一些东西你总得知道吧?JVM的内存模型,垃圾回收机制,各种机制下的垃圾回收器怎么工作还是知晓些吧。JVM字节码那个太苛刻了,不要求你,但是你有真功夫,大家聊聊还是可以的。

5.一些基本的东西你还是要有吧:http协议、https协议,dns解析过程、servlet是个什么东西?生命周期如何?request/response区别,session/cookie区别实现机制,redirect/forward的区别你能给简单讲讲?

6.编程框架:web类的框架执行流程总得讲一下吧,比如SpringMVC是如何工作的?你自己实现个web框架可以还是不可以?怎么做,可有思路?既然是Spring了那么IOC\AOP的实现原理怎么来的,bean的作用域有哪些,务传播机制,隔离层级,基本还是要问问的?反射,代理怎么回事不可能搞不清楚吧。代理的几种方式JDK的cglib的aspectJ的,你又只多少?抛弃了框架你自己实现基于类的代理有门么?mybatis听过没?不管你听没听过反正jdbc那些事情,数据库连接池的那些事情,我们有得聊,只要你能勾起我们的聊天兴趣。

7.通用性质的一些东西:大名鼎鼎的apache你知道吗?web服务器,应用服务器类的区别你知道吗?ngnix玩耍过没?ngnix你都用来干了些什么?缓存可有听过?怎么来玩耍?从浏览器端一直到后端的各层缓存该怎么来玩耍?策略又是如何来定的?分布式缓存可有听过?memcached,redis可有玩耍过总之话题很多,不一而足。

8.分布式的一些概念:你可知晓为啥要分布式?分布式有哪些经典问题?简单点的如何实现应用无状态,全局唯一ID(莫要拿什么雪花算法之类的烂大街的来扯,要有点实际意义的),负载均衡有没有概念?如何做?如何去做高可用?如何去保障分布式环境下的一致性问题?消息中间件玩耍过没有?知不知道都有哪些,实现区别在哪里,用它干嘛去?分布式的环境下如何去保障服务的可靠性?如何面临雪崩问题?如何面临穿透问题?包括但不限于spring cloud的相关话题,都解决了哪些分布式方面性的问题,如何解决的,策略有哪些?问题多的是,看你有多少深浅了。

当然,你的脑袋也不要死,不能僵硬,再卖你点套路性的问题——给你一个文件里面全是数字如何去完成排序?很多人会想到归并排序,各种算法各种结构,这些都没啥问题,都是基本分,有没有想到这个文件怎么读、怎么写,读到哪里,写道哪里,你就没想过读取后写到不同的机器,然后不同的机器跑一样的算法然后合并结果,最后输出?对的,这个问题能想到后面的,至少你可能了解分布式文件系统的套路和思想——hadoop,hbase,hive,我们看看小伙姑娘功夫咋样,是不是真有货,是不是真有潜力?

--------------------------------------------------------------------------------------------------------------------------------------------------- 看到jsp,jquery一大堆js的东西就没必要看了,复制粘贴的? 看到jsp我就走了,大厂不用jsp,小厂不会jsp也能进 ------------------------------------------------------------------------------------------------------------------------------------------------------------------

参加几十次初级/校招面试。从我看到的小公司角度说一下。

一般来说大家水平都是非常一般的,想去大厂的自行往三五年经验水平上靠,找大厂面经刷就完了。

我说一下一般小公司的一般初级要求。

第一,学校,实习经历,竞赛,专业(计算机大类)。

在你没有亮眼的实习项目的情况下的剩下三项,尤其是学校,

能占五成以上,直接决定你能否面试。

第二,专业基础技能。

1,网络,数据结构,操作系统。考研的水平能不犯错,没有不知道的,专业课八九十分,

一本书基本知识点融会贯通,初级面试官基本问题不大。

此处重点掌握,弱技能必须重基础。校招的话这些专业课不挂的水平基本就行。

算法题多看看,能多讲一句优化思路就是一分希望。校招至少树堆栈链表基本遍历排序,

再看看别的套路,熟悉一下即可。非校招要多刷,多熟悉套路,很多原题,大部分公司还是比较看重这个。

2,语言基础:基础语法。父子类继承,初始化,线程同步,线程面试题基本套路,基础异常处理,

牛客网基础面试题刷刷。此处基础笔试题多看多刷,但是也就尽力而为。

因为你再厉害,也总有你不知道的。牛客网大概正确率50-60即可。非校招尽量达到60-70。

3,语言高级:类的使用等。集合类的各种知识点要熟悉。并发包有了解即可,

一个并发集合类重点了解。锁稍微看看背背。基础jvm内存知识熟悉,基础编译原理执行过程类加载了解即可。校招仅熟悉集合和了解jvm内存即可。

4,框架,基础会,能用,即可。结合你的项目,没有就跟培训看视频编一个。springboot(mvc)+mybatis+MysqL

tomcat基本就这样。spring基本概念,mybatis或者其他orm框架基本用法。一定要熟悉基本写法套路,

别问你compoment注解不知道,问你choose when标签不知道就极为尴尬了。基本运行原理看一下。

5,数据库。同样专业课考试水平的基础理论,较为常见的sql复杂查询分组查询会一些,

b+索引特性和原理,事务,然后联合索引最左前缀这种题看看,

常见面试题刷刷,explain会用知道每项啥意思就行。

校招:理论事务b+树了解,sql会一些即可。【B+树,sql会一点,要求不高的。】

6,redis,基本不会问,背点题不难。持久化集群都不用看。

仅知道基础数据结构,特性和用处即可。校招可无视。

7,杂项。主要体现你求知欲即可。微服务分布式nosql了解一点,

负载均衡反向代理了解多一点,mq虚拟化docker了解一点,

高并发设计了解多一点,Linux多用用,cd mv rm vim netstat熟练点,

iptable了解一点。

听说过一大半,看几篇综述性介绍简单了解他是干什么的就行,

不用实践。校招可无视Linux,非校招要稍微实践下。【linux部署到项目中去】

基本这样,找个工作肯定可以了。不要要求薪资太高,一线6-8k应该问题不大。

第三,都会了再提高。JAVA基础再看看,io,类加载,jvm博大精深都会了?

MysqL再买本书多看看,innodb技术内幕能看多宽看多宽,深度不要太追求。

spring源码稍微读一下,题多刷刷,原理多了解一下。基本如此了,不包装不可能再高到哪去。7-11k有可能了。

再高也不要考虑,阿里实习都申请不到就别想阿里了。不然你就包装下简历,可能12-15k都有可能。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

也就是:课程基础和语言基础可以再弱三成。语言高级,redis数据库

杂项可以不知道一半。再弱,校招还有大概1/5可能性,秋春招错过,双非二本想一线找工作很难了。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

我15年毕业,应聘的要求一本+的中公司(500-1000),相比这个简单太多了,

比BAT低一两档次的大厂,或许才要这个广度深度吧

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

先回答问题,基础知识一般会考察

Java基础知识:HashMap,List,Java多线程,JVM

 

中间件至少了解以下一项

MysqL:事物ACID MVCC实现原理 隔离级别

Redis:数据结构,失效原理,主从哨兵集群原理。

Kafka:组件功能文件索引

算法:牛客或者LeetCode Easy能快速写出

在两个大厂经历过四年校招面试,以下关注点仅代表个人观点:

更重要的是:

能用STAR将之前的实习项目经理讲清楚

能对之前的经历有一些总结思考沉淀

  ------------------------------------------------------------------------------------------------------------------------------------------------

大专->需要精通,刚入行就要有2-3年经验,必须要能干活。

本科->需要熟练,GitHub上找个不热门的性能调用工具,照葫芦画,变成自己开源的,再找人推广推广,能进大厂。

985,211->自学2-3个月,会用点框架就行了,不会用框架啊?那每天刷leetcode总行吧,

听师兄,听所谓的劝退大佬,研究计算机原理,。。原理,。。原理。。。,bat、字节、随便挑。

------------------------------------------------------------------------------------------------------------------------------------------------

这就跟考试和实践的区别一样,能答上这些问题只需要一通死记硬背,用过这些东西,
再把这些东西里面的关键常考点背下来,就可以回答个八九不离十。但是实战真的精通了吗,不见得   第一阶段,死记硬背,背会了就是精通吗, 第二阶段,用的时候发现实际使用没有背的难么简单, 第三阶段,熟练使用并理解,不过我觉得这个时候, 真正见识了这片广阔的天地后,很少有人会说自己精通吧。 越学越觉得自己烂 -----------------------------------------------------------------------------------------------------------------------------------------------

基础部分

  1. 接口与抽象类的区别?
  2. Java中的异常有哪几类?分别怎么使用?
  3. 常用的集合类有哪些?比如List如何排序?
  4. ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和优缺点?
  5. 内存溢出是怎么回事?请举一个例子?
  6. ==和equals的区别?
  7. hashCode方法的作用?
  8. NIO是什么?适用于何种场景?
  9. HashMap实现原理,如何保证HashMap的线程安全?
  10. JVM内存结构,为什么需要GC?
  11. NIO模型,select/epoll的区别,多路复用的原理
  12. Java中一个字符占多少个字节,扩展再问int, long, double占多少字节
  13. 创建一个类的实例都有哪些办法?
  14. final/finally/finalize的区别?
  15. Session/Cookie的区别?
  16. String/StringBuffer/StringBuilder的区别,扩展再问他们的实现?
  17. Servlet的生命周期?
  18. 如何用Java分配一段连续的1G的内存空间?需要注意些什么?
  19. Java有自己的内存回收机制,但为什么还存在内存泄露的问题呢?
  20. 什么是java序列化,如何实现java序列化?(写一个实例)?
  21. String s = new String("abc");创建了几个 String Object?

多线程/并发

  1. 如何创建线程?如何保证线程安全?
  2. 如何实现一个线程安全的数据结构
  3. 如何避免死锁
  4. Volatile关键字的作用?
  5. HashMap在多线程环境下使用需要注意什么?为什么?
  6. Java程序中启动一个线程是用run()还是start()?
  7. 什么是守护线程?有什么用?
  8. 什么是死锁?如何避免
  9. 线程和进程的差别是什么?
  10. Java里面的Threadlocal是怎样实现的?
  11. ConcurrentHashMap的实现原理是?
  12. sleep和wait区别
  13. notify和notifyAll区别
  14. volatile关键字的作
  15. ThreadLocal的作用与实现
  16. 两个线程如何串行执行
  17. 上下文切换是什么含义
  18. 可以运行时kill掉一个线程吗?
  19. 什么是条件锁、读写锁、自旋锁、可重入锁?
  20. 线程池ThreadPoolExecutor的实现原理?

JVM

  1. JVM堆的基本结构。
  2. JVM的垃圾算法有哪几种?CMS垃圾回收的基本流程?
  3. JVM有哪些常用启动参数可以调整,描述几个?
  4. 如何查看JVM的内存使用情况?
  5. Java程序是否会内存溢出,内存泄露情况发生?举几个例子。
  6. 你常用的JVM配置和调优参数都有哪些?分别什么作用?
  7. JVM的内存结构?
  8. 常用的GC策略,什么时候会触发YGC,什么时候触发FGC?

框架使用

  1. 描述一下Hibernate的三个状态?
  2. Spring中Bean的生命周期。
  3. SpringMVC或Struts处理请求的流程。
  4. Spring AOP解决了什么问题?怎么实现的?
  5. Spring事务的传播属性是怎么回事?它会影响什么?
  6. Spring中beanfactoryfactorybean有什么区别?
  7. Spring框架中IOC的原理是什么?
  8. spring的依赖注入有哪几种方式
  9. struts工作流程
  10. 用Spring如何实现一个切面?
  11. Spring 如何实现数据库事务?
  12. Hibernate对一二级缓存的使用,Lazy-Load的理解;
  13. mybatis如何实现批量提交?

数据结构与算法基础

  1. 说一下几种常见的排序算法和分别的复杂度。
  2. 用Java写一个冒泡排序算法
  3. 描述一下链式存储结构。
  4. 如何遍历一棵二叉树?
  5. 倒排一个LinkedList。
  6. 用Java写一个递归遍历目录下面的所有文件

Linux使用与问题分析排查

  1. 使用两种命令创建一个文件
  2. 链接和软链接的区别?
  3. Linux常用命令有哪些?
  4. 怎么看一个Java线程的资源耗用?
  5. Load过高的可能性有哪些?
  6. /etc/hosts文件什么做用?
  7. 如何快速的将一个文本中所有“abc”替换为“xyz”?
  8. 如何在log文件搜索找出error的日志?
  9. 发现磁盘空间不够,如何快速找出占用空间最大的文件
  10. Java服务端问题排查(OOM,cpu高,Load高,类冲突)
  11. Java常用问题排查工具及用法(top, iostat, vmstat, sar, tcpdump, jvisualvm, jmap, jconsole)
  12. Thread dump文件如何分析(Runnable,锁,代码栈,操作系统线程ID关联)
  13. 如何查看Java应用的线程信息?

数据库相关

  1. MysqL InnoDB、Mysaim的特点?
  2. 乐观锁和悲观锁的区别?
  3. 数据库隔离级别是什么?有什么作用?
  4. MysqL主备同步的基本原理。
  5. select * from table t where size > 10 group by size order by size的sql语句执行顺序?
  6. 如何优化数据库性能(索引、分库分表、批量操作、分页算法、升级硬盘SSD、业务优化、主从部署)
  7. sql什么情况下不会使用索引(不包含,不等于,函数
  8. 一般在什么字段上建索引(过滤数据最多的字段)
  9. 如何从一张表中查出name字段不包含“XYZ”的所有行?
  10. MysqL,B+索引实现,行锁实现,sql优化
  11. Redis,RDB和AOF,如何做高可用、集群
  12. 如何解决高并发减库存问题
  13. MysqL存储引擎中索引的实现机制;
  14. 数据库事务的几种粒度;
  15. 行锁,表锁;乐观锁,悲观锁

网络协议和网络编程

  1. TCP建立连接的过程。
  2. TCP断开连接的过程。
  3. 浏览器发生302跳转背后的逻辑?
  4. HTTP协议的交互流程。HTTP和HTTPS的差异,SSL的交互流程?
  5. Rest和Http什么关系? 大家都说Rest很轻量,你对Rest风格如何理解?
  6. TCP的滑动窗口协议有什么用?讲讲原理。
  7. HTTP协议都有哪些方法
  8. 交换机和路由器的区别?
  9. Socket交互的基本流程?
  10. http协议(报文结构,断点续传,多线程下载,什么是长连接)
  11. tcp协议(建连过程,慢启动,滑动窗口,七层模型)
  12. webservice协议(wsdl/soap格式,与rest协议的区别)
  13. NIO的好处,Netty线程模型,什么是零拷贝

Redis等缓存系统/中间件/Nosql/一致性Hash等

  1. 列举一个常用的Redis客户端的并发模型。
  2. HBase如何实现模糊查询
  3. 列举一个常用的消息中间件,如果消息要保序如何实现?
  4. 如何实现一个Hashtable?你的设计如何考虑Hash冲突?如何优化?
  5. 分布式缓存,一致性hash
  6. LRU算法,slab分配,如何减少内存碎片
  7. 如何解决缓存单机热点问题
  8. 什么是布隆过滤器,其实现原理是? False positive指的是?
  9. memcache与redis的区别
  10. zookeeper有什么功能,选举算法如何进行
  11. map/reduce过程,如何用map/reduce实现两个数据源的联合统计

设计模式与重构

  1. 你能举例几个常见的设计模式
  2. 你在设计一个工厂的包的时候会遵循哪些原则?
  3. 你能列举一个使用了Visitor/Decorator模式的开源项目/库吗?
  4. 你在编码时最常用的设计模式有哪些?在什么场景下用?
  5. 如何实现一个单例?
  6. 代理模式(动态代理)
  7. 单例模式(懒汉模式,恶汉模式,并发初始化如何解决,volatile与lock的使用)
  8. JDK源码里面都有些什么让你印象深刻的设计模式使用,举例看看?

----------------------------------------------------------------------------------------------------------------------------------

简历上的精通和真正技术精通不是一个概念,看了很多人的回答,都是技术上的精通,而不是简历上的精通。

简历上的精通java是指:

  1. 会用java开发,测试,纠错
  2. 可以独立用java开发完整软件或项目
  3. 有参加过用java完整流程的开发项目的工作经验,最好有至少3个成功的完整java项目。
  4. 招聘上的java技术你在过去开发过程中都涉及到过,并可以面试回答

如果能做到以上4点,可以称得上精通了。至于技术细节,不是简历精通的重点。

另外第三条工作经验是简历通过的关键,第四条是面试通过的关键,至于第一和第二条是试用期通过的关键。 ---------------------------------------------------------------------------------------------------------------------------------- 简历上的熟悉是学过会用,但没实际工作开发过产品。   了解是听过这个名称,大概会用在哪里,名称解释级别的了解,不用学过会用。 【熟悉学过会用,没有实际开发用过。】   了解,熟悉,掌握【最差掌握】,精通。   简历都是从实际工作经历出发。你这样写,估计不了解你的hr指不定认为这是你的水平就大致如此了。 ----------------------------------------------------------------------------------------------------------------------------------  

学校的career center专门给我们说过简历上的能力划分:

了解(informed):听过java这个词,知道java是面向对象的语言,知道java需要jvm,就可以算了解了。

熟悉(familiar):给一段java代码,leetcode中等难度级别的最多100行小函数那种,可能有递归和dp,能说出来这个大概干了什么事情,能基本看懂为什么这个做法可以实现题目的要求,有些细节问题答不上来没关系,就是熟悉。

熟练(skillful):在eclipse这种带有语法高亮和自动补全的ide帮助下,不查docs,半个小时到一个小时可以完成上面这个级别的小函数,并且能说出来时间和空间复杂度,就可以理直气壮的写熟练。

精通(mastered):就像答主说的,会测试会纠错,不一定要工作经验,在学校给教授的课题打过杂,使用过git进行集群开发,有些不常用的包也能说得上来。

上面还有一层叫做专业(professional),但是很少有人用。因为,在美国一般是学生找实习或者应届生找第一份工作才会写这些能力级别,已经有工作过一段时间的都会选择写『有XX个月的java开发经历』,然后把自己的完整项目放github,让公司自己去看。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

精通、熟练、熟悉、了解,经常用的写个熟练就可以了,只自己玩过的写熟悉,看过文章的写了解

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

总结:初中级 Java 程序员必须掌握的知识。

  1. 熟练掌握数据结构、算法、操作系统、计算机网络等基础知识【这个可以】
  2. 熟练掌握Java编程、熟悉Java高并发开发手段、
  3. 对JVM 虚拟机(Java内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM内存管理)有一定研究
  4. 熟练掌握SOA分布式系统开发,具有优化系统性能、提高系统并发量以及系统可用性的实际经验
  5. 熟练掌握Struts2、Spring、Hibernate、Mybatis 等框架的使用,熟悉 Spring 原理【这个可以】
  6. 熟练掌握dubbo、Zookeeper、常见的消息队列(比如ActiveMq)的使用
  7. 熟悉Linux 系统的使用,在Linux系统下具有实际的开发经验【这个可以】
  8. 熟悉MysqL数据库的使用、常见sql语句的书写以及常见的优化手段【这个可以】
  9. 掌握 Spring Boot +Spring Cloud +Docker【这个可以】
  10. 了解Hadoop 生态相关技术中的 HDFS、Storm、MapReduce、Hive、Hbase
作者:JavaGuide
链接:https://www.zhihu.com/question/28903757/answer/568252497
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 初中级,毕业3年就要达到这个水平要求了,不然是不够格的,3年中级,5年高级,8年架构,10年影响力,15年基本生涯结束,20年幸运再做5年。 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 这个世界,傻子是比较多的【傻子最爱说别人傻子】,聪明人是少见的【聪明人警惕一点】,智慧人基本没有【智慧人准确知道别人傻在哪里】。 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 其他相关小技术么,大概也就是写关系型非关系型数据库,各种云平台的技术, 对的,不同的云供应商,他们的技术都不一样,如果你只是云上面租个虚拟主机, 那还是别说自己懂云的好。各种协议的运作,懂TCP和UDP的区别可不算, 起码你要知道509吧。加解密,入侵,跨站,暴库,DDOS等黑客攻防,也是在JAVA高级技术以内。 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

当你的title是principal architect的时候

==================

2年后终于有一个JAVA话题上了热榜,激动地我热泪盈眶赶紧放点干货表示下资瓷的更新。

 

JAVA的世界,关键点我一直有反复表达。是在JAVA语言以外。

事实上在JAVA语言本身来说,简单的一句话,能够追上JDK的更新,你已经没问题了。包括增加的语法糖,和新的JVM特性。如果现在2019年这个时间点起步,那么掌握好JDK8的内容,语言方面就达到了精通。精通,我们给的定义在于,这个东西80%以上的内容,你能看得懂,或者查得到。要说背得出。你不用妄想了。

那么JDK8需要关注的内容主要有什么呢?

当然语法糖总是很直观的,这个去更新页看看,都已经列出来了。比如我作为一个行将就木的JAVA boy,不是很习惯的->

目前JDK必须掌握的一个内容是基本的G1GC,之前的GC基本上已经可以封存了,除非极端特别情况。那么G1GC的几个特殊配置,你要明白,包括eden等内存块的概念,和几个参数设置。

当然还有JDK里面的小工具,很少有公司会去花几十万买dynatrace, manageEngine等APM,

而中国大部分公司又缺乏对APM的重视,所以相当多的中小公司都是裸奔的。

这时候,你掌握好JDK的工具,就会如同救世主一般。我想很多人,装了JDK,

其实并没有真正的去看过里面到底有什么。那么今天你看了我这个回答,

你去打开JDK目录,看看bin目录下面,有哪些工具,再去网上搜搜功能

会让你的JAVA技术上升很多。尤其是jconsole,jmeter,jmc,jstack这些。

看完了bin目录以后,你就会对JVM有更进一步的了解,这时候不可避免地接触了三种系统运行时log:gc log,thread dump,heap dump,前两种可以直接肉眼看,heap dump可能要用MAT看。这三个就像是JAVA程序的履历表,能够让你随时了解运行时发生了什么事情。能看到这三个reoport,是JAVA技能中阶以上了。

这到现在为止,还只是简单讲了JVM和JDK相关的。在此以外,还有四个大的方向

1,设计能力也就是业务抽象能力

2,infra能力也就是容器中间件运维

3,JAVA核心框架的熟悉

4,以及很多相关小技术,比如集成技术,各种协议,等等

设计能力当中的领域知识,事实上是在编程技术以外的,但是你要成为高级JAVA人才,这是不可避免的,

JAVA在商业化,重型公司使用很多,你要了解你的用户内容

从而能设计出比较好的知识。而另外一种设计能力,也就是JAVA常见的OOP能力,

虽然在知乎上被各种本科,研究生在读大佬诟病,

事实上OOP是一种非常先进的技术,关键点在于你没有5,6年事实编程能力,

比较难以理解如何将一个系统良好地设计成OOP,所以遭弱鸡诟病。

这个OOP需要你在日常生活当中去锻炼,将看到的任何事情,脑内设计成OOP,并不断改进。

infra当中包含硬件,网络,中间件,容器。也就是从网线开始到tomcat那里。很多我行萌新,可能仅仅知道下载个tomcat把JAVA class放到目录下运行,或者新一点用spring boot跑。其实,最全的JAVA重型系统包含了更多的东西,这里面有传统的基于scale out的HA集群,也有最新的基于K8S的微服务集群。这个话题要讲,能讲三天三夜live,你只需要记住一点,来测试你的知识:infra相关,集中体现在一个问题的回答上:服务器机房(无论云或者物理机房)被地震毁了,你的系统多久能恢复。能仔细想清楚这个问题的前因后果,这块你算入门了。当然,仅仅是入门,后面的技术由于每家供应商都不同,你都是要学一遍的。

JAVA核心框架,我们目前可以说,单单走spring系就可以了。不排除某些老系统还有struts。但是很多人脑子里的spring还是springcore ver5以下。其实整个spring家族有超过20个分支项目,在目前spring core 5版本的基础上可以完成几乎所有事情,那么在框架这一块,你要说精通,你就要知道,什么场景用什么spring技术。

其他相关小技术么,大概也就是写关系型非关系型数据库,各种云平台的技术,对的,不同的云供应商,他们的技术都不一样,如果你只是云上面租个虚拟主机,那还是别说自己懂云的好。各种协议的运作,懂TCP和UDP的区别可不算,起码你要知道509吧。加解密,入侵,跨站,暴库,DDOS等黑客攻防,也是在JAVA高级技术以内。

总之,JAVA技术,一个人能精通,我觉得是不可能的。我自诩不算笨和懒,不停顿搞了15年JAVA,

还是个入门程度。要精通JAVA,可能要一个3,4个人组成的特种部队才可以。

 

最后,我送各位一个小技巧。很多朋友抱怨我回答了太多问题,很难搜专业问题。那么你去知乎搜索栏里面,

输入萝魏紫 空格 java,能浏览我过去的专业问题,应该会对你有些启发。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

  他妈的,我本来2014年的目标就应该像这份简历一样,要不要你2020年就是厦门有名的大佬了,没有年少出名展露头角,真的很委屈。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

明白方向了吗? 精通都是实战干出来的,光看书,入门都难

我也是在校学生。
我从开始学java到现在已经过去四年多了,从j2me,j2se学到j2ee,外加各种开源项目,然后研究concurrent,nio,aio,gui,jni,做过无数大小项目,API看了就看源码,学习过jvm。
目前不知道学啥了,感觉学了不用也没啥意义,所以往计算机基础方向加深,学习数据结构算法软件设计等知识,有向c、c++发展的冲动。
自认为自己的java水平在周围同学中还算可以,不过绝对不敢说自己精通,而且精通也没啥意义,语言终究只是一门工具。
在我看来,java根本不可能精通,java语言有自己的深度和广度,广度就是各种开源库、开源框架,深度就是深入底层乃至jvm实现,这么多东西,有谁都用过,有谁能够全部记住,有谁敢说自己精通。


而且我知道我的这种自我感觉java水平良好的感觉,只是因为自己认知有限,不知道该去学什么了,就好比《三体》里面科学发展的停滞最终导致技术发展遇到瓶颈,我对技术认知的局限导致我现在不知道该去学什么。

嗯,是时候出去实习了!

做技术的,谦虚才是你不断进步的动力,

但是,
我前阵子找实习的时候,网申时,无耻的在java这个技能上勾选了“精通”。
找工作嘛,当然要让对方知道你擅长的方面,你一个在校学生什么样的水平他们又不是不知道,你敢说精通说明你对自己自身水平的认可,

有信心在横向的比较中处于中上水平,这就够了。至于水平到底怎么样,人家面试的都是老手,一问就知道了。

关键在于,要知道自己的不足之处,从思想上虚心学习。 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

刷到这个问题了,按现在面试所见来看:

听过就叫了解,照着博客敲了一个Demo就是熟悉,项目里用过了那就是精通!

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

自己开发出一套简单的分布式服务器框架应该就算精通吧,至于jvm 层次的 ,那个是精通c++了

真正的精通并不是广度而是深度。并不是说把Java技能树上的每个技能都点亮了才叫精通。

其实只需要Java核心就够了,最最重要的是要编写高质量的代码。而不是功能的堆叠。

----------------------

编写代码时多思考少动手,从全局统一规划,从编写第一个类开始就要持续重构,

永远不要复制粘贴,保持代码的整洁规范,保证代码的可靠性,可测试性和可扩展性。

----------------------

团队开发时,你的代码即使没有注解或少量注解,其他人也能很容易理解你的代码和编程思路。

你开发的接口和框架别人能很容易上手使用,并且可以在未来的版本中尽量保持兼容。

-------------------------

做到这些,基本就是个高手了。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

到了专家级别之后,简历里面写的技能是这样的

技能

java, scala, c++, c, c#,python

algorithm, database, machine learning

再也找不到熟悉,或是精通这些关键字。

---------------------------------------------------------------------------------------------------

已认证的官方帐号

Java涵盖的知识内容十分广泛,很少有人敢大言不惭说自己精通java。

即使真正的大牛,也可能是精通java某些方面的知识,或者说精通java的某个框架、某项技术这种。

举个例子:拿java最基础的部分,也就是javase部分来说。如果你能把jvm的原理,java数据结构的底层实现,线程的底层实现,反射的原理等等这些完全研究透彻了,那也只能说你是精通javase这个部分,而不是精通Java。

而对于Java的框架,以Spring框架为例。如果你能把Spring框架的源码研究一遍,理解Spring框架的原理,而且有需要的话,就能自己写一个简易版的Spring框架,即使这样,也只能说你是熟练掌握、并能应用Spring框架,而非精通Java。

实际上,对于很多java的开发人员来说,他们也不会去达到精通的程度。

因为对于他们来说,能够对一个框架,或者一项技术,熟练掌握应用,满足工作的需要就可以了,所以题主也可能会看到很多java的岗位任职要求上,写的都是熟悉使用某某技术,某某框架等等。

但如果是任职要求上面要求的是精通某项技术或框架的时候,那么很可能是要在上述熟练掌握应用的基础上,要对这项技术或者框架做更深入的研究开发了。

有这种要求的公司,一般招聘的对象也会是拥有多年或十年以上丰富从业经验的行业老手,不会是对于“新手”的要求。

看题主有说做过Java WEB开发,但不知道题主当时做的javaweb开发用到的是什么技术,不过一般本科软件相关专业做的最多的也就是使用Spring,SpringMVC,Mybaits这三个框架搭建项目,然后使用JSP做为前台的数据展示页面

这样的项目架构,在过去还能满足大部分的项目开发需求。但随着互联网用户增加,以及技术的不断更新、发展,如果只会上面的这种项目架构方式的话,想在如今的互联网企业找一份java的开发工作,还是会有一定难度的。

因为现在的企业,除了要求开发者会使用一些常见的框架来搭建项目以外,还需要开发者掌握一些当前比较流行的技术。

比如:Docker容器的使用,使用Nginx来做服务器的负载均衡,使用Redis来做数据的缓存,使用GIT、SVN等工具进行协同开发等等。

如果题主只是想找一份java开发的工作的话,那么我建议可以在当前这些比较流行的技术上,多花费些时间去学习。

如果是个人兴趣,想要把java研究透彻,那么可以去看一些java的底层方面的书籍。

比如:《深入理解java虚拟机》,《java多线程编程核心技术》等等。

精通一项技术,不是掌握了会用这么简单,况且题主还身处在IT这样实时更新的行业。技术行业三年一小变,五年一大变,总会有不断的新技术出现。【3年足够久了】

刚掌握这项技术,又有了技术的出现,是很常见的事,所以“精通”这样的词,没个七、八年的行业经验,能不用则不用。

(PS:题主在写简历时,也应尽量避免使用这样的字眼,可以尝试换成“熟练掌握”一类的字眼。)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

作者:java小白
链接:https://www.zhihu.com/question/28903757/answer/943379838
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我现在在自学Java,可是说是小白。首先Java平台博大精深,一直被誉为互联网霸主;我们都知道互联网技术结构之复杂,所以Java的技术组件,架构也非常之多和复杂;正所谓万丈高楼平地起对吧,想要精通Java,那么首先基础知识必不可少,基础知识分为两部分:
1:计算机基础知识
Java也是一门计算机语言,当然暂且不表Java的特点以及和其他语言的对比之类的话。既然是计算机语言那么计算机的基础知识肯定是必备的,操作系统(这个知识最起码在学习Java多线程的时候才能真正的说理解多线程以及多线程调度等等,还有进程管理等等要不很多人动不动就是什么JVM调优,垃圾回收器呀什么什么的,JVM调优并不是简简单单的改动点参数,如果仅仅是改动一点参数就叫JVM调优...对吧其他的这里就不说了);
计算机网络基础知识(最起码的你知道HTTP,TCP/IP,UDP等最基本的这些协议吧,网络通信原理)。
2:程序基础知识
程序的基础知识:
计算机语言的运行原理(例如二进制的计算肯定比十进制的快这些基本的运行原理,还有就是要不你怎么理解JVM对吧等等);
算法(重要,很多互联网大公司很看重这个,算法都不懂,你还说什么代码运行效率;还有就是JDK源码你怎么看都需要算法知识)
数据结构(重要,你去看看Java集合类的源码,哪一个不是数据结构的东西)
下来进入到Java中来说
首先还是那句话,精通一门语言,那么你必须要从它的平台内部开始,所以JVM就是第一个需要深入了解的东西;JVM怎么进行内存管理(这就常见的堆,栈,方法区,程序计数器等等),ClassLoader(类加载的机制的层次:Bootstrap ClassLaoder,Extension ClassLoader,System ClassLoader,以及自定义类加载器,双亲委派模式原理,Clasl文件显示加载与隐式加载),GC管理(前面了解了JVM的内存管理,这个地方才能知道GC的作用,知道新生代,老生代,永久代,GC收集算法,强引用,弱引用,软引用,虚引用等等);常用的一些Java命令(例如:Java反编译,性能监控,故障处理)这是必备的就不多说
Java基础知识
Java基础知识比较多就不一一罗列,但是例如String,StringBuffer,StringBuilder,Integer,ArrayList , LinkedList、Vector,Stack, HashMap , LinkedHashMap , TreeMap , CouncurrentHashMap、HashSet , LinkedHashSet , TreeSet , HashMap,Queue ,Deque,BlockingDeque, BlockingQueue, TransferQueue(太多了就不全列举出来)这些基本的集合,线程,线程锁,线程池,Socket,反射等类的源码要熟读;
JavaWeb部分
基本的网络知识,网络协议知识;Servlet标准,JSP的原理(虽说现在这些直接使用的少了,但是基础知识在理解其他知识绝对需要);服务器的配置和管理(这部分一会在分布式中详细说);AJAX,JSON等等;数据池,数据缓存,性能优化等等
mybatis , Spring(这个厉害了,这个都成了分布式系统生态链),

Spring基础的IOC,AOP(重复一次,不是说你会使用和配置,而是要深入理解以及理解源码),

SpringMVC,SpringBoot(这个加上maven,对于构建微服务有着非常重要的地位),

SpringCloud,RestFull,RPC,RMI,SOAP协议,微服务的管理(Eureka,Zookeeper等),

负载均衡(Nginx,Ribbon等),dubbo,

Hystrix(微服务熔断保护),Config(远程配置与管理维护),Zuul(路由),Feign,

MQ(消息中间件,RabbitMQ,kafka,ActiveMQ等等),

elasticsearch(搜索服务器),Memcache等等
数据库方面:
先说数据库常用的产品:MysqL,oracle,redis,mongodb 这些都要会;
mycat的读写分离,数据库集群
MysqL的存储引擎(这个不但要了解理论知识还要知道实际使用),索引(数据库高效的最基本的东西),存储过程(这里申明一下不是说会定义一个存储过程不是说语法,而是存储真正在实际中的运用)等,Oracle的内存结构,进程结构,sql优化,数据库服务器管理调优等,其他的就不过多赘述;
redis,mongodb(这个不用多说,现在使用非常广泛)
操作系统:
Liunx一定要熟练使用(现在好多技术都是更加适应Liunx,再说服务器大部分肯定是Liunx居多)

发布于 2019-12-20 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------

其实要求要提很简单,

只要几个项目就够了。

1 独立开发一款java小型虚拟机,或者某种语言小型编译器

2 独立开发一套RPC框架

3 独立开发一个小型操作系统,满足最基本的几项功能

4 独立开发一个搜索引擎

5 独立可以攻破一些小网站

6 独立设计一款可以使用的加解密算法,并投入市场

---------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

听说过burpsuite吗,你去写一个就算精通了。

写简历找工作的时候千万要慎用“精通”这个词,太主观。

而且问这个问题其实也不会有答案,因为每个人的答案都会拼命往高大上的方面拼。

你要是打算去业内顶级企业去需要的是一种“精通”;

你要是计划去一般企业需要的是另一种“精通”;

其实“精通”背后真正体现的是演技。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

别写精通Java,不然你会死的很惨的,没人敢说自己精通Java,即便是JAVA作者高斯林也不敢说

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  1. 简历上写精通Java 并写期望 35K 以过滤掉穷逼公司。每天投所有你能找到的有钱的公司。
  2. 申请一个招聘网站的HR端,下载对应的简历,把你的简历改到每天有3-5个面试电话为止。成本每月1000-2000元。 共计 5k
  3. 每天二家去面试,并把自己的不足写到日记中。成本 每月 3K 左右成本 共计 9k
  4. 把日记中的每本概念至少买一本书。去豆办找。 成本 100 个概念 共计 10k
  5. 对各种概念进行合并,型成脑图。 成本 大约需要2-4个月 共计 20k
  6. 选择一个占 十分之一 以上的方向进行深入学习。成本 大约 需要 3-6个月 共计 30k
  7. 独立完成一个你方向的开源软件 共计 ---74
  8. ------------------------------------------------------------------------------------------------------------------------------------------------------------

以上从开始到结束 大约需要 12 个月 总计 74K

每天工作 12小时左右

完成之后大约有 5年左右工作经验。

可以申请 30K 左右的行业平均 工资


精通不过是路过的垫脚石

-------------------------------------------------------------------------------------------------------------------

当你能自己实现java虚拟机的时候。。。哈哈哈。。。开玩笑的哈,这个要求太过分了。。。能写虚拟机,还能写得好的,那绝逼是大神,完全不能只用精通来形容。。。

那么,接下来,我认为,能够脱离源代码,仅靠.class文件调bug ,应该就能叫精通了吧。。。

这个还要分两个层次,一种是不需要源代码,能够在自己的平台上调试自己的,或至少是同组人写的代码;另一种是在未知平台上调试完全没有接触过的别人的代码。。。

两种难度不在一个水平。。。前者意味着平台、框架、容器或随便其他什么东西都是你熟悉的,很多时候甚至不用反编译,直接看log 就能debug。。。后者,很多时候你不知道别人用了什么奇怪的东西,然后又自己改了那些内容,所以很多时候反编译都不够,需要深入到虚拟机运行的原理中去发现bug 。。。能做到的,想不精通都难。。。

最后,其实我不会java 开发,上面的话是我用脑袋滚键盘滚出来的qwertylkjhgfd。
---------------------------------------------------------------------------------------------------------------------------------------------------------------

你学完java后,当你感觉到自己什么都不懂的时候,说明你已经开始入行了,当你感觉自己学习越来越迷茫,越来越多的问题被你遇到的时候,说明你正式步入java这个行业了。

在学校学习的知识基本都是一些基础的比较多,处于底层的知识,当你开始工作了,才算是正式开始和技术打交道了。

什么才叫做精通java呢,可能没人敢说他精通java,因为在这个领域是没有上限的,真正精通java的人是不需要自己说的,都是别人说的。都是别人对他的称赞。当你提起这个人的名字,身边的人都称赞的时候才叫做精通。

真正的精通是不需要写在简历上的,真正做到精通java的人不会去找工作,都是工作去找他。

想要java做的好,做到精通,那么在基础阶段就要打下坚实的基础,因为后面的框架能走多深还要取决于你的基础知识。你的基础学好了,在这个领域你才会有更好发展的条件,

零基础要怎么学习java,具体都要学习哪些知识点,你可以看一下我之前的这个回答


--------------------------------------------------------------------------------------------------------------------------------------------------------

多线程

反射

ClassLoader

字节码

GC

unsafe

 

还有点骚操作,asm,javaagent。

这也不是什么难度大的东西。

你也可以试着研究下netty bytebuf实现。

--------------------------------------------------------------------------------------------------------------------------------------------------------

Java体系太庞大,20多年的历史,20多年的技术更新,要精通难度不可谓不小。我感觉真的算精通的话,估计也只有创造Java这门语言的那一批人,以及对Java的发展做出过很大贡献的人。比如:

James Gosling: Java之父

Bill Joy: 软件业的爱迪生

Joshus Bloch: Java2元勋

Bruce Eckel: 功勋卓著的机会主义分子

Rickard Oberg: J2EE奇才

Doug Lea: 世界上对Java影响力最大的人

Scott Mc Neale: Sun十年来的掌舵者

Rod Johnson: 用一本书改变Java世界的人

Alan Kay: Java的精神先锋

Kent Beck: 领导Java

-------------------------------------------------------------------------------------------------------------------------------------------------------- 每一个精通技能的简历背后都有一副hr嘴角泛起的不屑。。。。精通这种词,往往会引发血案      

 

 

     

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐