
Java
圣斗士Morty
Java开发者,技术学习爱好者,费曼技巧学习法践行者
-
原创 JDBC——编程式事务的实现逻辑
引言数据库事务的概念和基础,总结在《MySQL 基础 ————事务与隔离级别总结》。本篇博客通过“JDBC + 纯编码”方式实现事务控制,完成一个 A 给 B 转账的小功能,在进一步熟练JDBC的编程流程的同时,重点关注 Java 语言如何操作和控制事务。一、事务自动提交的三种情况事务默认自动提交的三种情况:1、DDL操作执行后,会自动提交事务,SET autocommit=false 对该类语句不管用。不过,在DDL语言上一般不考虑事务。2、DML(增、删、改)默认情况下,执行后2021-02-14 16:59:1925
0
-
原创 JDBC——实现通用的查询
引言上一篇jdbc的文章《JDBC——概述与JDBC的使用》介绍了JDBC的概念和背景知识,同时也讨论了获取数据库连接的方式,以及简单的实现了入库操作(更新、删除同理)。本篇博客将会聚焦 PreparedStatement 的查询操作、以及 ResultSet 的结果集处理逻辑,结合 ResultSetMetaData 和反射技术实现通用的查询方法。一、Java与SQL对应数据类型转换表Java类型 SQL类型 boolean BIT byte TINYINT2021-02-13 16:47:0644
0
-
原创 JDBC——概述与JDBC的使用
引言一直希望深入学习一下数据库持久化技术,接触过Hibernate、Mybatis,也使用过Spring事务管理来控制回滚操作,但是越发觉得底层知识有一定的知识盲区和空洞。很多ORM框架都是基于JDBC规范来进行构建的,因此,学习JDBC的基础知识势在必行。虽然不建议在实际开发中使用 JDBC API,但了解其技术背景和使用过程无疑会更好的理解构建于其上的高级框架。本篇博客总结自尚硅谷宋红康老师的视频教程,旨在记录和总结JDBC API的使用步骤和常见问题,方便未来面试和深入理解其他框架。一2021-02-12 19:27:1534
1
-
原创 Java 动态代理解析
引言本博客总结自《Java 编程思想》第十四章一、实现第一个动态代理程序代理是软件设计中重要的设计思想,它允许我们在调用实际操作之前或之后解耦式地编写额外的操作,而一旦不需要这些操作了,就可以轻易的移除它们。浏览了《编程思想》中对动态代理的解释,我发现动态代理的实现也是非常简单的。想要实现动态代理,除了要借助于 Java 的运行时类型信息( RTTI :Run-Time Typ...2020-01-02 23:51:37111
0
-
原创 Java 注解知识总结
引言本博客总结自《Java 编程思想》第 20 章。一、什么是注解注解是 Java 5 引入的一种通过反射机制实现的语法特性,开发者可以通过在类、域、方法等元素前面标记一个“标签”达到对程序的源码、类信息或运行时进行某种说明或处理的效果,尽可能地简化代码,从而使程序开发更高效。但需要注意的是,编译器要确保在其构造路径上,必须有对应注解的定义。Java 中在 1.5 之初内置了三个标...2020-01-01 14:13:59174
0
-
原创 Java正则表达式总结
引言正则表达式(英文:regular expression)是用于描述字符串规则的工具,是记录文本规则的代码。它可以用来搜索、编辑、处理文本。现有编程语言都支持正则表达式的处理,但每种语言都有细微的差别。在Java 中,正则表达式的转义反斜杠要用:\\ 来表示,这是因为在《Java Language Specification》中明确规定,Java 中的一个反斜杠会用于转义Unicod...2019-12-22 21:05:40127
0
-
原创 Lombok ——自动化方法生成器
引言此文为简单的Lombok 演示。Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。简而言之,一句话就是:通过简单的注解来精简代码达到消除冗长代码的目的。官网:https://projectlombok.org/GitHub:https://github.com/rzwit...2019-08-31 06:30:03307
0
-
原创 Java NIO ———— Buffer 缓冲区详解
引言缓冲区是一个用于特定基本类型的容器。由java.nio 包定义,所有缓冲区都是 Buffer 抽象类的子类。Java NIO 中的 Buffer ,主要用于与NIO 通道进行交互。数据从通道存入缓冲区,从缓冲区取出到通道中。一、创建缓冲区缓冲区的本质是数组,用于存储不同类型的数据,根据数据类型(boolean 除外),提供了相应类型的缓冲区,如ByteBuffer、In...2019-08-20 22:23:52647
0
-
原创 Java NIO————NIO 简介
引言Java NIO (New IO,或Non Blocking IO) 是从Java1.4 版本开始引入的一个新的IO API,可以代替标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同。NIO支持面向缓冲区、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。一、NIO 与 IO 的主要区别IO NIO 面向流...2019-08-18 21:25:3695
0
-
原创 JavaScript————FormData实现多文件上传
引言星期四的时候,我遇到了一个文件上传的问题,与以往不同的是,这一次上传的是多个文件,而且涉及到了久违的javascript代码。虽然最后实现的并不尽如人意,不过也算是完成了功能,接下来就把我发现的一些问题和总结记录一下。HTML部分展示<form id ="tempFile" method="post" enctype="multipart/form-data"> <...2019-05-25 12:42:162809
2
-
原创 Eclipse(STS 4)闪退导致EGit插件异常
引言到目前为止,STS已经闪退过三次了。问题很棘手,我需要冷静。首先出现了一个问题就是,EGit无法commit。第二个问题是切换分支报错。闪退重启后EGit无法提交代码观察闪退出现的时机,一般出现在我 commit 代码的时候,只要点击commit,STS就会以迅雷不及掩耳之势自动退出,猝不及防!重启后,代码无法提交!!WTF!问题出现在 index.lock...2019-04-01 16:06:59232
0
-
原创 Jackson高级操作————流式API与JsonGenerator、JsonParser
引言继《Jackson快速入门》之后的高级相关操作。Jackson提供了一种对于性能要求应用程序操作json更加高效的方式——流式API,这种方式开销小,性能高,因此,如果应用程序或者程序逻辑对于性能有一定要求,可以使用这种方式来进行json文件的读写操作,而对于一般的读写,使用普通的databind api即可。要点1、与Java8的“流式”概念不同,这种Jackson的这种流式...2019-03-30 22:29:081987
0
-
原创 Jackson高级操作————节点树
引言继《Jackson快速入门》基础篇之后的树模型相关操作。节点树模型ObjectMapper构建JsonNode节点树,类似于DOM解析器的XML。 @Test public void testJsonTree() throws JsonProcessingException, IOException { String jsonString = "...2019-03-30 20:58:342206
0
-
原创 Java反射————Method根据方法名称字符串调用方法
引言之前浏览廖雪峰老师的个人博客网站,无意间发现了关于在Java8中获取参数的方法,随手一转《Java 8中获取参数名称》,没想到今天遇到一个功能,非常符合这种反射调用的使用场景。回看了这篇之前转载的文章,然后根据自己的理解完成了这个功能。场景描述功能其实并不复杂。一个设备表中有两个字段,A和B,希望既可以通过A来查找相应记录,又能够通过B来查找相应记录,但问题就在于A和B的样子非常相...2019-03-21 23:14:569353
4
-
转载 Class.forName()、Class.class、getClass() 区别
问:简单谈谈你对 Java 中 Class.forName()、Class.class、getClass() 三者的理解?Class.class 的形式会使 JVM 将使用类装载器将类装入内存(前提是类还没有装入内存),不做类的初始化工作,返回 Class 对象。 Class.forName() 的形式会装入类并做类的静态初始化,返回 Class 对象。 getClass() 的形式会对类...2019-03-21 22:39:562028
0
-
原创 Jackson快速入门
引言上一篇博客《XML模板解析————Dom4j解析xml案例分析》简单讲解了关于xml模板的解析,使用到了dom4j,这篇文章其实算是个姊妹篇,都是对于目前工作中的一些任务,如xml、json相互解析所涉及到的知识。但是相对于xml而言,我更希望通过这篇博客能够稍微全面的学习一下jackson。因为之前用过的相关类库是国产的fastjson,虽然简单的操作还可以,但是最近发现远比jack...2019-03-20 22:33:35433
0
-
原创 XML模板解析————Dom4j解析xml案例分析
引言目前项目中包含大量的xml模板文件,现就xml模板的数据解析、提取、及部分常用方法做简单的应用和总结。一、XML文件转为Document对象通过SAXReader对象的read方法,读取Document对象。SAXReader reader = new SAXReader();Document document = reader.read(new File("src/tes...2019-03-20 16:29:07543
0
-
原创 String字符串拼接小例
>>>写出下面程序运行结果:public class StringTest { public static void main(String[] args) { String s1 = "Programming"; String a = "Program"; String b = "ming"; S...2019-01-27 11:47:54537
2
-
原创 当面试官问我————Java是值传递还是引用传递?
面试官:你好,你能说出下面个程序的执行结果吗?public class Test { public static void main(String[] args) { String name = "Scott"; int age = 5; User user = new User(); user.setName(name); user.setAge(age); S...2019-01-25 18:20:093534
16
-
原创 当面试官问我————为什么String是final的?
面试官:你好,能看得清下面这张图吗?我:可以的。面试官:恩,好的。呃,你能不能说一说为什么String要用final修饰?我:final意味着不能被继承或者被重写,String类用final修饰是Java的设计人员不希望客户端程序员继承String类,并有可能改写String类中的方法。使用String对象的最佳实践,应该是关联或者依赖,而不是继承。面试官:恩,你还没有说到点儿...2019-01-23 18:40:402225
24
-
转载 价值50万年薪的Java面试题
《Java面试题全集(上)》《Java面试题全集(中)》《Java面试题全集(下)》《关于Java并发编程的总结和思考》《面试编程题拾遗(01) --- 不用算术运算符完成两个数求和》《面试编程题拾遗(02) --- 寻找多出来的元素》《面试编程题拾遗(03) --- 删除有序数组中的重复元素》《面试编程题拾遗(04) --- 上楼梯有多少种方式》《面试编程题拾遗(...2019-01-22 17:55:262071
2
-
转载 软件版本GA、RC、beta等含义
原文《软件版本GA、RC、beta等含义》GAGeneral Availability,正式发布的版本,官方开始推荐广泛使用,国外有的用GA来表示release版本。RELEASE正式发布版,官方推荐使用的版本,有的用GA来表示。比如spring。Stable稳定版,开源软件有的会用stable来表示正式发布的版本。比如Nginx。Final最终版,也是正式发布...2018-12-07 09:46:58201
2
-
转载 Tomcat运行三种模式:http-bio|http-nio|http-apr介绍
转自《tomcat运行三种模式:http-bio|http-nio|http-apr介绍》Tomcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最常用的服务器之一。不过,许多开发人员不知道的是,Tomcat Connector(Tomcat连接器)有bio、nio、apr三种运行模式,那么这三种运行模式有什么区别呢,我们又如何修改Tomcat Connector的运行模式来提高To...2018-11-30 22:43:451212
0
-
转载 JavaCard概述
什么是JavaCardJavaCard,即Java智能卡。以智能卡硬件系统为基础,通过软件的方式构造一个支持Java程序下载、安装、运行的软/硬件系统。由于引入了虚拟机技术,JavaCard具备硬件无关性,即智能卡应用程序开发与智能卡硬件系统相分离,简化开发过程,提高应用程序的可移植性与可重用性。智能卡层级结构图上图中:1、最底层是硬件(芯片,如SIM卡、SD卡等),然后会提...2018-11-25 15:57:112309
0
-
原创 Effective Java(一)———— 代替构造器和Setter的构建器模式
引言Java语言中的一部经典著作《Effective Java》,里面涵盖了78条我们应该熟练的Java编程技巧。本篇博客是该书学习的系列笔记第一篇。本系列博客不会与书中的78条建议完全匹配。只是以一种读者的身份来记录和总结从书中得到的好的编程建议,博客中会明确从书中哪条建议得来的知识。本博客总结自书中第二条:遇到多个构造器参数时要考虑用构建器构建器的产生我们知道对象的构建有很...2018-11-21 22:38:15308
0
-
原创 Eclipse使用————生成Get/Set、toString快捷键(不使用鼠标)
引言除了鼠标右键空白处—>source选择我们需要的操作之外是否还有更快捷的不需要鼠标的操作呢?如何快速的通过键盘来生成get、set方法?如何快速的通过键盘生成toString方法?如何快速的通过键盘生成需要实现的父类方法呢?快速生成get、set、toString首先我们知道source的快捷键是:Alt + Shift + s那么打开了Source之后,我们如何...2018-11-01 22:06:078433
8
-
原创 爱上进制转换练习
引言对于可能接触到通讯行业或是物联网的开发工作者,一般会面对十进制、二进制、十六进制的转换工作,不仅仅是体现在代码上,有时候也需要用肉眼来进行快速的转化,以获取协议指令中的信息。今天通过简单的整理,特此将这三种转化整理成一张表,并配上三个单独的执行程序。作为日后记忆的参考;而三个可执行程序是为了每天进行练习。进制对照表其中红色框代表比较有特点的二进制,绿色框代表十六进制和十进制完全...2018-10-30 11:37:08738
0
-
原创 Eclipse使用————Working Set工作集
引言经常看到在设置项目的时候,如导入项目,新建项目等看到对话框的下方有一个“add to working set”复选框,为了弄清这个working set,我们就来好好了解一下Eclipse 的working set功能。Working Set?Eclipse中通过working set的概念,管理多个项目,称为“工作集合”。这个东西是可有可无的。working set是将wor...2018-10-28 13:52:315776
0
-
原创 如何快速理清大型项目业务逻辑
引言本篇文章为了探讨如何快速上手一个大型项目。针对经验尚浅需要快速接手一个项目的开发人员。当他们拿到一个大型程序后,他们便开始一句一句的阅读分析,夜以继日,悬梁刺股。可结果依然不理想,往往进入以下状态:1、花费了很长时间,也没有多大进展,与当时预计的日期相差甚远。2、由于周期较长,他们往往在重复阅读分析最初的极小部分。就像有的童鞋读书一样,几个月前读的是前两章,几个月后还是那两章,...2018-10-18 18:21:165355
2
-
原创 Java中类及方法的加载顺序
代码展示请运行下面代码,查看运行结果,并带着问题,尝试第二次debug程序。class A { private static int numA; private int numA2; static { System.out.println("A的静态字段 : " + numA); System.out.println("...2018-09-12 07:33:1221169
2
-
原创 Multiple markers at this line
在类的package 关键字上莫名其妙的多了红色波浪线,代码也没有任何问题。解决方法:打开项目build path,删除jre system library,然后应用,再次添加一遍jdk1.8,选择工作区默认即可,应用,OK。...2018-08-27 10:19:002127
0
-
原创 MySQL日期类型的处理总结
一、概述MySQL中的日期类型包括以下5种:类型 大小 (字节) 范围 格式 用途 DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值 TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间 YEAR 1 19...2018-05-31 20:56:223299
0
-
原创 Java基础————理解Integer对象的缓存策略
一个简单的面试题 public static void main(String[] args) { Integer in1 = 100; Integer in2 = 100; Integer in3 = 200; Integer in4 = 200; System.out.println(in1 == in2);...2018-05-19 10:14:17274
0
-
原创 数据列表的分页实现————分页敏捷开发
概要分页功能是比较常见的基础功能,虽然比较简单,但是每次需要用到这个功能的时候还是需要现写一遍。为了实现更加宏观的业务复用,特将本人特别喜欢的简易分页逻辑在此记述,以备日后重用。逻辑描述一般的分页实现方式多是通过SQL语句“LIMIT”子句进行分页的,如果不清楚LIMIT子句的同学,还请先行了解此子句。实际上,分页功能最重要的两个参数就是pageSize(每页条数)和pageWan...2018-05-10 06:23:141652
0
-
原创 异常解析————Parameter metadata not available for the given statement
引言在将数据存入mysql数据库时抛出异常:Parameter metadata not available for the given statement。参数元数据对于给定的声明不可用。SQL本身并没有错误: @Autowired private JdbcTemplate jdbc; public Integer saveScenicSequence(Sce...2018-05-07 23:05:212710
0
-
原创 内部类详解————静态内部类
内部类三连击:《内部类详解————匿名内部类》《内部类详解————局部内部类》《内部类详解————静态内部类》定义静态内部类,又叫静态嵌套类或嵌套类。是使用static关键字修饰的内部类。书写形式一般的书写形式:public class Outter { /** 嵌套类,public等四种访问修饰符均可修饰*/ public static clas...2018-05-06 17:44:051743
1
-
原创 内部类详解————局部内部类
内部类三连击:《内部类详解————匿名内部类》《内部类详解————局部内部类》《内部类详解————静态嵌套类》定义在方法或某个作用域内的内部类,称为局部内部类。匿名内部类就是一种局部内部类。实现方式public class OutterType { public void function() { /** 局部内部类Inner*/ ...2018-05-05 23:10:075995
2
-
原创 内部类详解————匿名内部类
内部类三连击:《内部类详解————匿名内部类》《内部类详解————局部内部类》《内部类详解————静态嵌套类》应用场景由于匿名内部类不利于代码的重用,因此,一般在确定此内部类只会使用一次时,才会使用匿名内部类。形式public class OutterClass { public Runnable task() { return new Run...2018-05-05 13:14:291589
0
-
原创 Java泛型初探————泛型通配
T ? K V E?——表示不确定的Java类型T——表示Java类型K、V——分别代表键-值中的Key-Value,例如Map<K,V>,put(K key, V value)E——代表Element,例如List<E>,add(E e)java.lang.ClassClass类的实例,描述的是Java应用在JVM中的普通类(class 和 enu...2018-04-21 17:51:11404
0
-
原创 Eclipse生成SSH传输密钥并实现GitHub的SSH代码提交
生成公私密钥打开eclipse首选项完成如下操作:保存密钥:这里注意,博主之前已经生成过密钥了,因此这里只是演示截图,如果此时点击保存,会弹出“是否覆盖”提示框。其中,id_rsa代表非对称加密算法rsa的私钥,id_rsa.pub代表公钥,私钥是需要自己保管的,而公钥可以任意发送给他人保管,这是为了让remote用户能够判断传输的加密数据是否为本人操作。添加GitHub公钥在账户中打开setti...2018-04-07 10:51:106480
5