打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
高级Java程序员必备的二十个技术点,你会了吗?(二)

前文书说到,一名Java高级程序员,那是必备二进制思维、设计模式、数据结构、IO及序列化、字符集这五种知识。今天我们来看看除了以上那些个技能,一名高级Java高级程序员,还需要哪些技能。

六、数据库框架

对于很多应用类系统来说,数据库,尤其是关系型数据库是其基本。可以说熟练掌握了数据库相关编程,60%Java项目后端都可以搞得定了。

但是用传统的 JDBC操作数据库,操作繁琐,重复工作又比较多。因此,很多先辈们就为我们创造了不同的数据库框架,了解这些数据库框架的特点,熟练在不同的的场景中选用合适的数据库,是高级程序员必备的技能。

一些普通程序员,只会用一种数据库框架,例如说Mybatis,为什么呐,因为从工作来说一直就用这个。考虑过其它数据库框架的优缺点吗?没有。所以下面我们来了解一下不同的Java数据库框架。

Java的数据库框架主要有以下几种:

(1)JDBC

JDBC是最简单的传统数据库查询API,查询方式简单直接,只要输入查询SQL语句调用API返回结果就可以了。因此,适用于不希望学框架,只需要验证一下数据库连接或者轻量级的解决方案的场景。但是不适合代码量大,未来可能需要数据库迁移的场景。

除此以外,还可以在jdbc的基础上使用jdbc-template工具,例如Spring JDBC template或者Apache DBUtils。从而简化一些常用的功能。例如可以用一句代码发送带参数的请求,完成数据照射,关闭连接。如下所示:

        Person p = jdbc.queryForObject(“select * from person where id = ?”, 1, Person.class);

(2)JOOQ

JOOQJava的面向对象关系照射的轻量级框架,在SQL执行的灵活性方向和对数据包装的严谨性方面都很优秀。它提供了一种DSL来解决查询问题。这种语言基于生成的Entity对象提供编译时安全查询。而且它支持不同的数据库,能够减少模板代码。并且能够自动生成CRUD代码,但是它的问题在于并不是完全开源的,一些高级功能要收费。它的代码示例如下:

    UserRecord user = new UserRecord();

    user.setId(1);

    user.setName("Peter");

    Result<UserRecord> books1 = DSL.using(configuration)

    .selectFrom(USERS)

    .where(condition(user))

    .fetch();

(3)MyBatis/plus

MyBatis是一种带查询功能的简单ORMORM(对象关系映射)的核心思想是把Java对象类(Entity)映射到对应的数据库表。MyBatisApache的一个开源项目iBatis。它支持定制化SQL、存储过程以及高级映射。它几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。它很轻量且灵活,只需要两个jar文件和配置几个SQL映射文档,易于学习和掌握。但是MyBatis需要大量的xml配置,因此在迁移数据库里消耗较大。并且很多功能相对于HibernateSpring data Jpa还是弱了很多。因此,程序员们在其基础上开发了MyBatis-Plus增强工具,其具有强大的内置代码生成器,可以快速生成MapperModelServiceController代码,并且支持模板引擎、分页插件等,从而使得MyBatis更为强大。

(4)Hibernate

Hibernate是一个重量级的JPAJava持久化API)框架,比较完美的支持JPA标准,例如JPA标准中的数据库表/字段与Java对象/属性相对应。并且他还提供了一种HQL语言,支持面向对象的自定义类SQL查询。同时也支持基于方言(Dialect)的跨数据库代码移植,这意味着你只需要更换方言jar包就可以把代码移植到其它数据库上了。它的问题在于比较重量级,学习成本较高,并且需要掌控底层细节。

(5)Spring data Jpa

Spring data Jpa在支持JPA标准的基础上,提供了丰富的CRUD API以及查询表达式语言,很多查询只需要两三行代码就可以搞定,例如把函数定义成findByName,那么Spring data Jpa就会直接将这个函数解析成调用的实体仓库类中的查询Name字段,比如说在一个UserRepository里使用定义这个函数,就意味着会进行一条

   Select * from user where name = ? //问号就是函数输入参数。

同时Sprint data Jpa的很多SQL都可以直接用注解的方式在接口类里实现,非常的方便。想要自己写一条SQL只需要在注解里将原生查询属性设为真就行了。

下表列出了几种数据库框架的优缺点,供参考:


Jdbc

Jooq

MyBatis/plus

Hibernate

Spring data Jpa

执行透明度

查询灵活性

开发速度(常规查询)

开发速度(自定义查询)

数据库迁移成本

配置成本

七、SQL语句

对于一个高级程序员来说,熟练使用SQL完成各种高级查询是非常必要的事情。利用SQL的编码艺术可以解决在应用层需要很多代码量的工作。但是,随着技术演进到了高并发时代,在互联网涉及到大规模并发查询的应用,都会要求使用尽量简单的SQL语句,避免联表查询。因为复杂SQL语句造成的数据库系统开销过大可能会导致数据库卡死。这对于注重用户体验的互联网APP来讲,是不可接受的。

八、多线程编程

进程(Process)是操作系统工作时一个独立运作的任务,如果进程出了问题,只有当前进程崩溃,而不会影响到其它进程。线程是比进程更小的执行单位,线程是进程的基础之上进行进一步的划分。多线程是指一个进程在执行过程中可以产生多个更小的程序单元线程,这些线程可以同时存在,同时运行,一个进程可能包含多个同时执行的线程。

Java里,可以使用Thread类或Runable接口来实现多线程。一名高级程序员,需要了解多进程的一些特点。例如说你无法预测哪个进程的哪条语句会被先执行,线程是抢占式执行,线程间的调试充满了随机性。而多个线程对同一个变量进行修改,更是一件需要谨慎的事情。以及内存可见性和指令重排序对于多进程编程的影响。

九、正则表达式

正则表达式(Regular Expression)描述了一种字符串匹配的模式,可以用来检查一个字符串是否符合某种规则并对其进行操作。正则表达式的字符串表达方法根据不同的严谨程度与功能分为基本正则表达式与扩展正则表达式。在Linux命令中,sedawk是一个广泛应用正则表达式的范例。

最常用的正则表达式无疑是对电子邮箱的匹配,一个常用的匹配格式如下:

w+([- +.]w)*@w+([-.]w+)*.w+([-.]w+)*

说实话,如果没有正则表达式的话,很难想象检查一个输入字符串是否是电子邮箱格式需要多大的工作量。这也是正则表达式提高效率的一个优秀表达。一个高级程序员,需要识别出哪些时候使用正则表达式会提高效率,以及如何优雅地定出这种艰深复杂的表达式。

十、内存调试

毫无疑问,一个没有内存调试经验的Java程序员,永远也不会成为一个Java高级程序员。从来没有用过任何一种jdk自带的内存/线程调试工具的Java程序员拥有一个令人惊讶的高占比。因此,对于一名高级程序员来说,至少需要掌握以下基本Java内存调试工具的其中几种。包括jpsjstatjmapjstackjhatjinfojconsoleEclipse Memory AnalyzerVisualVMProfilemat等。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
01 | 常见持久层框架赏析,到底是什么让你选择 MyBatis?
10年开发经验程序员一文带你把5种数据库操作框架给直接理解透彻
Java编程开发学习之JDBC
最新JAVA面试宝典,面临实习的我要抓紧背啦
赢在面试之Java持久层(10)
JPA EntityManager获得session、connection
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服