Java入门及书单

入门

今天周六, 在家闲来无事, 多写俩篇博客(本想说成写文章, 但想了想该文实在承担不起文章二字, 便罢) 把最近看到的和想到的记录一下(恰好也把俩三年前写博客的热情又拾了起来).

经常在知乎上看到, 有人发问, 新人如何入门Java, 新人应该读哪些Java相关的书籍, 今天来谈谈这个问题.

Java入门的话, 分析一下哪些行文算是入门

  • 搭建Java开发环境
  • 掌握Java基础语法(原生类型/包装类型, 变量声明, 循环控制, 方法声明/调用, 类定义, 实例化对象…)

私认为掌握上面这俩点就算Java入门了, 也不需要买什么书籍, 在网上找个教程, 或者去慕课网/B站/油管 上面找个教学教程, 利用3-5天的时间学一学就好了, 会用能记住就ok了, 不必深究语法.

上面第二点只是把当下想到的说了一下, 更多的还请参考(Java 教程).

入门之后干什么呢? 找一个自己喜欢的方向, 做个小项目练练手. 例如写一个web项目, 再学习一下下面的几个技术

  • SpringBoot: 用于后台web服务器
  • Mybatis: 替代原生的JDBC, 与mysql打交道的
  • vue/element-ui: 写前台页面的

基本上用上面这三个技术就能写一个后台管理系统出来, 当然我也只是把我熟悉的技术写了一下, 如果你身边有其他技术栈的同学指导, 也可以采用其他的技术栈.

如果前台从0写起来比较费劲, 可以参考一个开源的前端工程vue-element-admin

随着功能的不断完善, 你对技术的理解也会不断的加深, 开发的兴趣也会不断加大. 只有对一件事情有兴趣了, 我们才想把它做好, 不是吗?

通过Java Agent的redefineClasses实现Mock功能

A)

最近组内项目有个模块进行了较大规模的重构, 需要跑一下压力测试, 看一下性能如何. 但是介于产品的模式, 在正常场景下需要向通道发送消息, 然而在压测中, 我们希望这段行为能被mock掉.
当时想到的方案可以采用Spring AOP, JMockit或者自己通过Javasisit/ASM这种字节码框架来实现功能.

由于项目中我自己很少使用Spring AOP来做一些功能, 便没让它当首选方案, 研究了一下JMockit实现, 发现是使用动态Agent实现的.ok, 那么便初步定了一下方案Agent+Javasisit来实现(ASM手写字节码实在太痛苦).

B)

这一段貌似是废话, 你们也看不见代码发生的真实地转变, 我只是记录一下心路历程.

利用了2个小时, 采用Agent+Javasisit实现了一个小的模块, 基本功能也都实现了, 但是使用起来实在是太麻烦了, 代码耦合性太高. 于是又换了个思路, 去掉了Javasisit框架, 也完美地实现了功能.

C)

整个mock框架分为俩部分.

  • agent-core, mock的核心代码
  • agent-client, 在这个工程中, 我们只需要在pom中引入需要替换的工程的依赖, 然后再agent-client中把要替换的类重写一遍就好了

工作/生活中用到的软件/插件/小工具

Chrome

  • Awesome Autocomplete for GitHub
  • Enhanced Github
  • Octotree
  • OneTab
  • Pinbox
  • Tampermonkey

Mac

这部分参考自有哪些命令行的软件堪称神器?

  • bat: cat 替换工具
  • mycli: mysql 客户端
  • ag:比 grep、ack 更快的递归搜索文件内容。
  • jq: json 文件处理以及格式化显示
  • shellcheck:shell 脚本静态检查工具
  • fzf: 命令行下模糊搜索工具
  • mosh: 基于 UDP 的终端连接
  • glances: 更强大的 htop / top 代替者
  • figlet: 将输入字符转换成艺术字体。
  • Pandoc: 可以将 markdown 转成各式各样的格式:PDF、DOCX、EPUB、MOBI
  • asciinema: 终端下的录制分享软件
  • ttygif: 终端录屏工具
  • Teleport: 堡垒机系统
  • prettyping: ping 替代品
  • fzf: 命令行模糊搜索工具
  • ncdu: 查看磁盘目录及文件的使用情况
  • jenv: Java 多版本管理工具
  • nnn: 文件管理器
  • fd: find 替代命令
  • htop: top 优化版本
  • you-get: 非常强大的媒体下载工具
  • httpie:
  • aria2
  • sz/rz
  • ip
  • fcrackzip: 破解 zip 压缩包密码。
  • Rename-CLI: 文件重命名工具
  • fasd: 快速跳转工具
1
2
3
yum install -y bat mycli ag jq fzf mosh glances asciinema ttygif ncdu jenv fd nnn autojump tmux

source /usr/share/autojump/autojump.bash

VSCode

  • Code Runner
  • Markdown Preview Enhanced
  • MySQL Syntax
  • Open in Browser
  • Path Intellisense
  • PEG.js Language
  • Prettier - Code formatter
  • REST Client
  • Settings Sync
  • Terminal

IDEA

列举一下 idea 中常用的插件(仅限于自己要安装的)

  • ASM Bytecode Outline
  • BashSupport
  • Free Mybatis Plugin
  • Grep Console
  • JavaCC Plugin
  • Translation