美文网首页
一次常规拓展学习

一次常规拓展学习

作者: IN科技 | 来源:发表于2020-01-15 16:06 被阅读0次

前言

Java程序员,刚入行的时候一般都抱着一本《Java核心技术》爆啃,对知识有苛求的,会选择把卷二读一遍。两本4、5百页的书,看完之后,自我觉得知识已经满了。从此开始投身在不停的写service,dao,controller的阶段。

过了两年,等换工作的时候,除了能把公司业务聊的一清二楚,发现真没有什么亮点,虚拟机,多线程多半都是面试前,突击的恶补一遍,勉勉强强能够应付各类面试提问。

但是,如果你不甘心只做一名码农,整日无休止的粘贴复制。建议你看完这篇文章。

起因

在一次测试过程中,发现mysql报MySQL: ERROR 1040: Too many connections。很明显,连接数已达到最大值,手动增加了mysql的连接数,并重启完成服务重启。

但修改连接池数量,并不能从根本上解决问题。从mysql的连接列表里,发现隔一段时间会有新的应用连接进来,并很快就进入休眠状态,活跃的连接很少。但是因为连接的断开过程是很慢的,所以当大量新建连接占满连接数的时候,mysql就拒绝了其它新的连接请求。

过程

经过分析,发现一个同学在写的springboot应用里,并没有设置应用端连接池,开始进行连接池的添加,springboot默认内置了hikariCP,当然,你可以选择druid,c3p0。

添加完连接池,问题就已经解决掉了。于是开始对比,为什么springboot把hikariCP作为默认连接池。开始比对hikariCP和其它连接池的对比。

数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)

发现此作者,不但有连接池,还有一个json包,hikariJSON,比jackson快数倍。源码数量很小,于是,直接把源码拉下来看了下。
https://github.com/brettwooldridge/HikariJSON

代码写的很规整,包含测试用例,跟着测试用例的示例一步步看下去,发现FieldBasedJsonMapper类中引用到了Unsafe,提供了java以类c指针的方式分配内存,增加了java对堆外内存的控制。于是,把unsafe看了一遍。
Java魔法类:Unsafe应用解析

既然是堆外内存操作,很自然的要对比堆内的区别。再细分,就是堆内内存分配,类加载,动态字节码,热修复,垃圾回收等等。

方法

Java程序员队伍的初中高,取决于对该语言的理解,熟悉基础语法,运行环境;懂一些基本开发模式,会一些常用框架;熟悉框架设计,懂得各模块实现原理;熟悉虚拟机,熟悉解释层与物理层之间的交互;理解编译层和执行层作用在不同硬件上的差异(比如什么状态下cpu使用高,哪些内存用的多,又比如哪些会造成内存泄露,逃逸,溢出);最后就是,你已经不满足JVM提供的各类便利性,你认为它的各种优化过于复杂,执行周期漫长。你要自己来搞。

大部分人,停留在初、中。写了一辈子代码,做了很多业务方向,但都未曾尝试过优化改变JVM底层设计。很显然,在多数场景下,无需做额外工作,足够让业务跑起来。但是,一旦出了问题,就完全束手无策。

Java相关衍生太多,类别分类也太多,穷尽一生,也无法面面俱到。除了对主要模块的深入理解,更多的是从一个小事情,不断延伸发散,顺着一条主线深挖,一定会碰到意想不到的兴奋点。而这些,就是成长体现。

随着问题线的数量越来越多,逐渐会对整个体系有一个全面理解,这时候,才能真正进阶到高级阶段。

后记

从高级上升到架构,不但要有过硬的技术能力,还需要对业务场景、解决方案有更为通透的理解。

贴近业务,提升通过技术手段解决各类问题的能力。推动技术变革的,永远是不断变化的业务发展。

希望这一次常规的小记,对刚入行的同学们有些帮助。

相关文章

  • 一次常规拓展学习

    前言 Java程序员,刚入行的时候一般都抱着一本《Java核心技术》爆啃,对知识有苛求的,会选择把卷二读一遍。两本...

  • 拓展课与常规教学20180829

    如果今天非要让我给这篇文章加一个标题的话,我只能想到这两个词语,拓展课与常规教学。 科学课不像语文数学英语是每天都...

  • 考试

    每周一次 加强学习 拓展知识,开阔视野 转化行动,促进转型

  • SuperMemo实践闭环(1)-学习流程及时间管理

    一学习流程的常规闭环 按此常规闭环,可对我们有学习计划并已添加至SuperMemo软件的学习材料进行常规闭环学习....

  • windows下开启PHP7的curl拓展

    环境:php7.1apache2.4问题: 常规操作,打开PHP的curl拓展:修改php.ini,打开php_c...

  • 06-2四个高效学习的方法

    高效学习方法一:主题学习+拓展学习 主题学习:强领域集中学习和刻意练习 拓展学习:弱领域的关联阅读学习 我们学习常...

  • 跳出熟悉圈,突破思维定式,让你的人生从此开挂

    (长文慎入,但有点儿意思……) 开头先说一个故事:上周我因公出差学习,中途安排了一次拓展训练,给大家说说这次拓展训...

  • TypeScript之函数类型

    TypeScript的核心是类型,但除了JavaScript中熟识的常规类型之外,它还包含了一些拓展类型,函数类型...

  • 瑜伽 | 一周练习总结 3

    一、现状 这周在完成常规练习的同时,增加了一些更有针对性的局部拓展——开髋和开肩。常规练习是以半月式为主题的一组体...

  • 学习的方法论

    这两天在读斋藤孝的《学会学习 从认知自我到高效学习》,因为是计划中的任务,期间推掉一次宴会一次户外拓展。这本书的题...

网友评论

      本文标题:一次常规拓展学习

      本文链接:https://www.haomeiwen.com/subject/yrsaactx.html