游客您好
第三方账号登陆
  • 点击联系客服

    在线时间:8:00-16:00

    客服电话

    020-85534346

    电子邮件

    81058337@qq.com
  • 码云社APP

    随时掌握码云社动态

  • 扫描二维码

    关注砺锋微信公众号

浅谈Java如何进阶,告别工作两年感觉就是增删改查思维 ...

发布时期:2019-5-24 17:50
阅读:1106 回复:20

前言如果你工作两年了却感觉自己还停留在增删改查阶段,那么只能说明你没有用心去多想问题。说起来确实可以用增删改查来概括,但是真正做起来却没那么容易。正文下面是十万个问题:关系型和非关系型数据库使用场景?数 ...

前言

如果你工作两年了却感觉自己还停留在增删改查阶段,那么只能说明你没有用心去多想问题。说起来确实可以用增删改查来概括,但是真正做起来却没那么容易。

正文

下面是十万个问题:

关系型和非关系型数据库使用场景?

数据库的三大范式真的要循规蹈矩吗?

手写数据库连接池怎么写?

Java常用工具类积累了多少、理解了多少?

给你一个常见的Java类你能一口气说出它是线程安全的还是线程不安全的吗?

jvm调过参吗?

gc原理了解多少?

rbac权限模型实现过吗?

Java io nio玩得六不六?

Java各种并发工具类玩得六不六?

jsp、servlet原理说得明白吗?

九大内置对象、四大作用域、三大组件都有哪些适用场景?

Tomcat运行机理?

Java反射机制了解多少?

spring的IOC和aop如何实现的?

spring全家桶了解多少?

Apache顶级项目了解多少个?

orm的原理?

高并发量怎么处理?怎么写出高并发的程序(几十几百万的并发量)

如何提高系统的鲁棒性?

分布式系统怎么对session做缓存?

怎么实现单点登录?

全文搜索引擎Lucene、solr、elasticsearch了解多少?

restful会吗?

Java常见框架了解多少?各自的应用场景又是怎样的?源码仔细研读过吗?c3po,DBCP,Druid,Struts1,Struts2,spring,springMVC,hibernate,mybatis。springboot,springcloud,微服务了解多少?

前后端分离具体怎么搞?

websocket,webservice了解吗?

消息队列rabitmq、kafka了解多少?

hadoop、spark、spark streaming、storm、MapReduce、ZooKeeper、Hbase、Hive了解多少?

Linux玩得六不六?

如何做大数据实时流处理?

集群和分布式搞过没?

Java经典书籍读了多少本?

下面还是稍微具体地说说你的增删改查吧。

"增":

增加一条是增,增加一亿条也是增。让你写个高性能的批量增加怎么写?数据量大了怎么存?分库分表怎么搞?

"删":

删除真简单,删除也没那么简单,外键关联的情况怎么删?什么时候考虑事物、回滚?物理删除和逻辑删除什么时候选哪个?误操作删了不该删的怎么搞?难不成真的从删库到跑路?

"改":

参数完整性校验,参数合法性校验(当然这个在增里面也有涉及)

"查":

各种SQL技巧写法。怎么调优?(SQL调优,数据库调优)。MySQL里面的innodb和myisam引擎的区别。怎么提高查询效率?(SQL优化、建索引、缓存[一级缓存、二级缓存....]、....),n+1查询问题怎么解决。

plus:

分布式的增删改查还是这样吗?

搭好的系统怎么防SQL注入?怎么防xss、csrf攻击?怎么对数据加密?怎么限流防刷?怎么防治DDoS攻击?怎么对系统做完善的高可扩性的日志管理?

浅谈Java如何进阶,告别工作两年感觉就是增删改查思维

上面的问题答得怎么样?自己现在什么水平、以后要往哪边查漏补缺心里有点B-Tree了吗?

浅谈Java如何进阶,告别工作两年感觉就是增删改查思维

在这个互联网动辄上亿流量级别的时代,Java作为后端服务使用最广泛的语言,诞生了一批又一批的新框架,包括HBase、Hadoop、MQ、Netty、SpringCloud等等 。

一些独角兽公司以及BAT等知名大厂对Java人才的需求量连年升级,但与此同时 对人才的要求也越来越高。 面试官经常会考察如下问题:

聊一聊你对JVM的原理,如何减少Full GC的情况?

针对高并发场景,如何优化,都采用了什么技术?

相比关系型数据库,NoSQL的优势在哪里,你们在什么场景下会用到?

可以看到,对于有2~5年工作经验的开发者,更注重的是一些项目有深入的实战经验。但很多同学在技术生涯最初几年都会沉浸在业务开发中,忽视了对系统知识的梳理和技术视野的扩展。 日复一日,导致很多同学就以为这就是技术的全部,同时在重复的体力劳动中也丧失了对技术细节的深入探讨。

每个程序员都追求“成就感”,而获得成就感最好的方式就是自己在技术上的突破。

以工作前5年的规划为例,至少需要突破三个层次:

对代码精益求精

最开始工作的时候,我们会抱怨业务需求对技术没挑战,觉得在学校学到的这么多知识却没有用武之地。

实质上这是忽略了技术开发的本质,技术开发是一个工程项目,而工程项目的落地最重要的就是细节控制,也就是代码的品质,比如:

代码是否遵循了规约?接口设计的是否随意?测试用例是否都通过?

满屏的if-else是否可以用合理的设计模式来替代?有没有遵循SOLID原则,KISS原则?

有没有考虑用更合理的数据结构和算法改变代码的复杂性,提升运行的性能?

代码出bug的概率有多大,能否降低?

需要Java架构学习资料视频请加Q群793042903群内提供免费的学习指导 架构资料 以及解答 不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导

这是程序员的立足之本, 基本是工作1年左右要达到的。在这一阶段看书是比较好的提升方式,比如:《Java编程思想》、《effective java》等。但要注意的是,在看书的过程中一定要思考能否运用书中的经验来改善自己写的代码,运用到实处,比如看到final和static,想想自己代码中用的是否合理。

此外,还可以看些常用的开源框架,如果你用的是Spring框架等,那么下面一个很好的知识结构:

浅谈Java如何进阶,告别工作两年感觉就是增删改查思维

跳出来,主动了解技术全貌

在将基础打牢之后,需要主动突破舒适区,不断的去扩大自己的技术视野,做到有广度。

这一步比较难,因为很多同学会被公司的技术和业务牵着走,比如公司当前的业务规模决定了技术上不需要分布式技术,那么很多同学就不会去思考如果规模大了之后,如何利用分布式技术解决该问题。

如何解决这个问题? 除了寻找更大规模的业务外,要时刻保持时刻跳出当前层级和环境来思考的习惯。 比如,你只用了关系型数据库,那么有没有想过数据一直产生,到达TB级别的时候该如何快速检索与保存呢?

此外,技术的全貌还包括各种技术之间的关系,你用了Dubbo,那么Duboo和Netty是什么关系,为什么会用到Zookeeper呢,和Spring Cloud又是什么关系?如果能在学习新技术的时候,将繁杂的技术关系理顺,会有一览众山小的感觉。

在工作的2~3年时间内达到这个水平,30w的年薪就离你不远了。 如果你对高并发和分布式技术感兴趣,那么下面一幅图会有帮助:

浅谈Java如何进阶,告别工作两年感觉就是增删改查思维

不去造轮子,前提是得知道轮子的内部结构

如果说,第二步是增加你的知识广度,那么造轮子就是增加你的技术深度,通过造轮子,才能真正把握技术的来龙去脉。 很多人信奉“不去造轮子”,看似性价比很高的一句话,却不知道这句话是有前提的,那就是“你得知道轮子的内部结构”,否则就是自我麻痹。 接下来需要选择某一个或几个方面深入研究下去,构建自己的核心竞争力。

比如,消息队列在高并发分布式系统中一个及其重要的组件,起到削峰填谷、系统解耦的作用。 我们以消费端如何快速获取数据来看思维是如何一步步深入的:

首先消费端要想及时获取数据,是否需要建立一个长连接?长连接的实现方式如何?

数据是通过push还是pull方式给到消费端,各自有什么弊端?

如果消费失败,可能是哪些原因引起?如果是因为网络原因引起,该如何解决?

这些问题都会在你自己造轮子的过程中暴露出来,从而加深你的理解和技术深度, 一个有技术深度的程序员才是有灵魂的 。而大厂也是愿意为有趣的灵魂买单的,这个时候看的就不仅仅是工资水平,更多的是在于晋升和发展前景的广阔性。

在Java语言上有所建树的开发者,都经历过以上3个层次。但可惜的是,囿于外界环境和自身设限, 大部分的Java开发者却只停留在了第一个层次中, 在日复一日的体力劳动中丧失了对技术细节的深入探讨,也丧失了晋升和薪资谈判中的筹码。

浅谈Java如何进阶,告别工作两年感觉就是增删改查思维

如何过渡到第二、三个层次? 除了上文谈到的内容,这里我还想给你2个切身的建议:

1、扩宽自己的眼界,学着从全局看待问题,并且勇于挑战别人眼中的难题

2、持续提升你的学习能力, 虽然有很多人以「在公司学不到东西」为理由离职,但你要知道:公司的目的是盈利。盈利的前提下,公司会尽力培养你,但是更多的时候能力成长还是得靠自己。学习能力弱的人,在哪里都没用。

三山五岳(未知职业)-本文作者
这个人很懒,什么也没有留下。
1106 20 2019-5-24 17:50
该文章已有20人参与评论

请发表评论

全部评论

查看全部评论>>

扫一扫关注官方微信号

最前沿的技术信息一手掌握

滚动新闻
CODESEEDING(码云社)一家致力于程序员成长、以内容为核心、以提问为引导的多元化成长社区。我们在线上为技术爱好者提供了一个优质的交流氛围环境,在线下同样和众多高校联合开办了技术沙龙品牌。
020-85534346
关注我们
  • 访问移动H5版
  • 官方微信公众号

码云社 - CODESEEDING 2.0© 2018-2019 码云社. TOOBUG ( 粤ICP备16114193号-3 )