V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
0576coder
V2EX  ›  Java

Java 泥腿子想到一个高工水平,各位老哥给点意见

  •  
  •   0576coder · 2020-07-16 01:54:01 +08:00 · 3465 次点击
    这是一个创建于 681 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚转 java3 个多月 以前只是自己随便学了点基本的 java 语法,然后用 java 在 LeetCode 上刷了几题。 目前终于在公司实战项目当中使用 spring-boot 开发项目了。自己有一点基础,靠搜索引擎跟文档也能完成日常增删改查的一些任务

    自己也遇到了一些困惑 希望大家解答

    1.目前公司的项目当中是用了一个类似 activerecord 的包来完成数据库的增删改查,自己也用过 mybatis,xml 的配置我感觉有点反人类 注解的方式没使用过,是不是外面的主流都是 mybatis

    2.对于 spring-boot 的一些注解,目前也只是会基本使用的地步,需要自己再去从头补 spring 框架基础吗,或者有什么好的建议,自己只是简单会用框架,对于框架的底层实现确实还一头雾水。

    3.目前自己项目也有几台机器的小集群,项目当中除了使用原子类,锁的话也是借助于 redis 这种来实现分布式锁,对于 synchronized 同步锁这种,感觉缺乏实际的应用场景,是不是大家的项目中也基本上很少用锁。

    4.对于多线程跟 jvm 感觉了解不多,目前多线程的应用主要在数据库连接池、redis 连接池、启动时候配置的 tomcat 的线程数,目前有些异步运算的接口,我从线程池里取线程然后多个线程去计算,各个结果都出来后 一起拼好数据返给业务方,也没涉及到锁。还有 如何学习 jvm, 目前也只会简单的用 jstack 查看一些基本情况 假如线上出了疑难杂症,一般都是使用哪些工具来具体解决的,比如如何看什么堆栈,如何定位问题 目前我一些小问题,大部分可以查看通过 log 来解决

    18 条回复    2020-07-22 01:06:40 +08:00
    0576coder
        1
    0576coder  
    OP
       2020-07-16 01:59:36 +08:00
    再补充一个问题。
    各位 java 老哥调试的时间长吗,我用 idea 有时候调试浪费很多时间,大家都是写完一大块功能再启动自测,还是写一个小功能就试一下。 我知道有个 spring-boot-devtools 可以热部署,话说大家平时都用这个的吗
    感觉有时候编译调试很浪费时间 就可能一点小 bug 搞好久 各位过来人有啥提高效率的办法么
    sodadev
        2
    sodadev  
       2020-07-16 04:11:18 +08:00 via Android
    我是按照接口测试,写完一个借口测一下
    dustinth
        3
    dustinth  
       2020-07-16 07:08:55 +08:00
    多看书, 多思考, 多实践就可以了.
    312ybj
        4
    312ybj  
       2020-07-16 08:11:55 +08:00 via Android
    1. mybatis 用的是挺多的,xml 的优势在于动态 sql,当然如果你不想写太多的 xml,你可以尝试下 mybatis plus,一般 crud 都封装好了。
    2. 框架就是最佳实践,所以这么多人用,springboot 也就是以精简为特点,之前的 springmvc 可是有大量的 xml 。你要是想研究的话,你可以先看看 aop,再研究注解,再研究反射,动态代理。你放心,东西有很多,不怕没东西学。
    3. 我这边也很少用到锁,制造业项目,目前就靠自己瞎琢磨,这两天还在看分布式事物。大公司应该用的多
    4. 多线程我主要研究的是 jdk.1.5 自带的并发包,我这边业务使用多线程也不多,就自己用 java 写爬虫用过多线程,主要是用 jdk1.5 提供的并发包。
    5.热部署我用的是 jrebel 这个插件。这个不是关键,主要是编码习惯,少用 debug 多用日志,日志定位问题比 debug 快多了
    6.我觉得三个月能学这么多,比我厉害多了
    heyhumor
        5
    heyhumor  
       2020-07-16 08:14:21 +08:00
    @dustinth 正确的废话
    zchlwj
        6
    zchlwj  
       2020-07-16 08:41:37 +08:00
    推荐你看看耗子叔的《左耳听风》尤其是里面的《程序员练级攻略》
    lqw3030
        7
    lqw3030  
       2020-07-16 09:00:01 +08:00
    花时间,一口吃不成胖子,两三年的挣扎期总要吧
    autoname
        8
    autoname  
       2020-07-16 09:07:15 +08:00
    为什么要入 java 我都后悔了,好多爬虫 识别 都不是用 java 写的,

    java 真的要跌落神坛了
    sunziren
        9
    sunziren  
       2020-07-16 09:09:14 +08:00
    我喜欢 mybatis plus,简单无脑
    zzzmh
        10
    zzzmh  
       2020-07-16 09:17:26 +08:00   ❤️ 2
    字太多懒得看,如果是问如何提升,去 bilibili 或者 imooc,静下心来看视频学一学
    另外回复楼上,java 跌落神坛还早
    exploreXin
        11
    exploreXin  
       2020-07-16 09:33:50 +08:00
    进阶路线: 哲学 -> 数学 -> 物理学 ->电子学 -> 操作系统 -> 计算机体系结构 -> 网络技术 -> 编程语言导论 -> 算法与数据结构 -> 软件工程,有时间的话从头把这几块整个撸一遍,就可以达到顶尖说准了,如果没时间的话,把箭头倒过来学,能学多少学多少,水平也可以急速上升。
    wysnylc
        12
    wysnylc  
       2020-07-16 10:28:21 +08:00   ❤️ 2
    @zzzmh #10 爬虫不是 java 写的就跌落神坛笑死我了
    mingfei
        13
    mingfei  
       2020-07-16 10:36:01 +08:00
    诚心请教一下大佬怎么在三个月内学习 Java 还能找到工作的
    0576coder
        14
    0576coder  
    OP
       2020-07-16 11:17:33 +08:00
    @mingfei
    我是公司内部转项目的 不是学三个月就找到工作的
    HolmLoh
        15
    HolmLoh  
       2020-07-16 11:59:40 +08:00
    不算老哥,只是菜鸟,写 java 也有一段时间了,分享些见解吧
    1.国内确实主流是 mybatis,可能主要原因是因为灵活,如果不太喜欢这类的可以使用 jpa 的,比如 hibernate,或者 mybatis plus,算是 mybatis 的超集,兼顾了二者
    2.对于 springboot 研究不是很深,平时比较常用的也就是 aop 和 mvc,其他的大部分功能都不会太常用,但建议翻一翻书略读一下,,可以有个基本的了解,以后方便用搜索引擎查阅
    3.synchronize 这类已经是很原始的锁了,似乎除非是造轮子,否则应用场景不算很广泛,毕竟已经有现成好用的工具了,例如 redis 的分布式锁
    4.对多线程和 jvm 了解有限,我就不胡扯了,平时用的是 java 的 Executors,最近在看 vertx,可能就是因为 java 生态比较完善,所以才会让我这种低端开发人员不需要平时深入研究吧,jvm 排查的话出问题我是用 eclipse 的 MAT 排查,我觉得还挺好用
    Kirsk
        16
    Kirsk  
       2020-07-20 00:24:48 +08:00 via Android
    1 主流 mybatis 新项目 jpa
    2 边做边学 有需求有目的学起来最快
    3 看业务 用的其实不少
    4 jvm....没接触过 jvm 层面的问题 线上问题主要靠日志 日志输出的好 事半功倍 再有就是环境模拟了 灰度环境或者测试环境
    Aresxue
        17
    Aresxue  
       2020-07-20 09:55:59 +08:00
    1.主流 mybatis, xml 虽然对人不友好但描述能力强对机器友好,喜欢单表操作可以直接用 mybatis-generate 插件生成实体和单表增删改查;
    2.以后必然需要补 IOC 和 AOP 是必看,想系统一点可以以 bean 的生命周期展开,这是主线;
    3. synchronized 和 juc 下工具类只能在单个 jvm 内生效,所以在分布式系统中不宜使用,锁的使用要看你项目的 tps 和 qps 只有高并发下使用多线程才会经常遇到这玩意,而大多数项目的使用者太少了;
    4.jvm 分原理和诊断两个方面去学, 原理就是 jvm 模型,gc 算法,gc 模型,调参的话 zgc 都出来了普通开发者可以彻底告别调参了,诊断的话就是 jstat 、jmap 、jhat 这些,建议使用一些第三方监控工具让 jvm 更透明,比如 pinpoint 和 arthas,这些东西本身比较复杂可以先从会用开始
    bigbyto
        18
    bigbyto  
       2020-07-22 01:06:40 +08:00
    问题太多,主要是大方向吧,不要把时间浪费在纠结 mybatis 还是 jpa 上。你用 springboot,想深入当然要学习 spring 啊,springboot 屏蔽了大量细节,才会让你用起来很方便,实际上绝大部分内容都是对 spring framework 的封装。

    不但要学 spring,spring mvc 、javaee 的标准也需要了解,servlet 都是要学习的,不然你都根本不懂 springboot 是怎么样能跑起来的,永远都是停留在用用 springboot 的水平上。

    我只能说 java 深似海,spring 家族只是其中一小个环节而已。比如 javase,JLS 懂了多少,JMM 呢?还有 jdk 内部的 juc,后面更深点的 JVM......

    keep moving
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1844 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:58 · PVG 00:58 · LAX 09:58 · JFK 12:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.