Java
文章平均质量分 70
圣斗士Morty
Java开发者,技术学习爱好者,费曼技巧学习法践行者
展开
-
Java 函数式编程思考
在多路调用的场景中,通常会需要在被调用方法中使用到调用者的一些数据,传统的编程方式是直接将数据作为参数传递过去,或者通过一些业务标识用if-else的方式来实现延迟加载的要求。直接传递数据的方式,提前将数据准备好,会有性能问题,可能在被调用方法的校验逻辑执行中断,用不到数据了,浪费系统资源;而通过普通的if-else 分支,又需要将调用者注入到被依赖方,虽然实现了延迟加载,但本身形成了循环依赖,造成了高耦合,存在潜在的开发成本。原创 2023-09-17 16:05:50 · 650 阅读 · 0 评论 -
快速计算两位数相乘
小学算术原创 2023-01-30 16:59:17 · 1437 阅读 · 1 评论 -
Guava常用工具类的使用
Guava 常用工具类总结原创 2022-03-13 10:48:41 · 1006 阅读 · 0 评论 -
常用自定义注解
导航一、方法计时器二、valid 参数校验的通用返回一、方法计时器注解类:MethodTimer@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface MethodTimer {}处理器(需要AOP和spring的支持):MethodTimerProcessor@Slf4j@Component@Aspectpublic class MethodTimerProcessor {原创 2021-07-29 09:22:44 · 567 阅读 · 0 评论 -
下载 Java 学习的权威文档
JVMS 和 JLS 文档的下载快速直达:https://docs.oracle.com/javase/8/ --> Java Language and Virtual Machine Specificationsjvm specification 和 java language specification 是Java 学习的两个最权威的文档。如果你用的是 Java 8,就可以去下载 jvms8 和 jls8 的文档。文档是全英文,建议电脑上配备一个有道词典,配合划词翻译,针对需要敲定的知原创 2021-07-24 11:47:51 · 348 阅读 · 0 评论 -
JVM——详解类加载过程
导航一、过程概述二、Loading2.1 类加载器2.2 双亲委派机制2.3 内存中的描述三、Linking四、Initializing一、过程概述java 源文件编译后会生成一个 .class文件存储在硬盘上。在程序运行时,会将用到的类文件加载到 JVM 内存中。从磁盘到内存的过程总共分为三个步骤:加载、连接、初始化。LoadingLinkingInitializing二、LoadingLoading 过程是把一个 class 文件加载到内存中去。2.1 类加载器JVM 加载类原创 2021-07-19 22:23:08 · 330 阅读 · 2 评论 -
自定义类加载器
导航一、loadClass(String) 方法二、findClass(String) 方法三、自定义类加载器四、打破双亲委派机制一、loadClass(String) 方法想要把一个类加载到内存中,只需要调用 ClassLoader 的 loadClass 方法:public class TestLoadClass { public static void main(String[] args) throws ClassNotFoundException { Class<原创 2021-07-18 17:58:41 · 268 阅读 · 1 评论 -
比较器的使用
一、TreeMap 实现排序TreeMap是一个有序结构,TreeSet也是类似。他们可以实现对元素的排序。TreeMap 是针对 key进行排序。如果TreeMap的key 是Integer类型,可以无需指定任何特殊条件,默认即按照升序进行排序,如: public static void main(String[] args) { Object value = new Object(); TreeMap<Integer, Object>原创 2021-05-15 16:31:51 · 703 阅读 · 0 评论 -
JDBC——编程式事务的实现逻辑
引言数据库事务的概念和基础,总结在《MySQL 基础 ————事务与隔离级别总结》。本篇博客通过“JDBC + 纯编码”方式实现事务控制,完成一个 A 给 B 转账的小功能,在进一步熟练JDBC的编程流程的同时,重点关注 Java 语言如何操作和控制事务。一、事务自动提交的三种情况事务默认自动提交的三种情况:1、DDL操作执行后,会自动提交事务,SET autocommit=false 对该类语句不管用。不过,在DDL语言上一般不考虑事务。2、DML(增、删、改)默认情况下,执行后原创 2021-02-14 16:59:19 · 396 阅读 · 0 评论 -
JDBC——实现通用的查询
引言上一篇jdbc的文章《JDBC——概述与JDBC的使用》介绍了JDBC的概念和背景知识,同时也讨论了获取数据库连接的方式,以及简单的实现了入库操作(更新、删除同理)。本篇博客将会聚焦 PreparedStatement 的查询操作、以及 ResultSet 的结果集处理逻辑,结合 ResultSetMetaData 和反射技术实现通用的查询方法。一、Java与SQL对应数据类型转换表Java类型 SQL类型 boolean BIT byte TINYINT原创 2021-02-13 16:47:06 · 1008 阅读 · 0 评论 -
JDBC——概述与JDBC的使用
引言一直希望深入学习一下数据库持久化技术,接触过Hibernate、Mybatis,也使用过Spring事务管理来控制回滚操作,但是越发觉得底层知识有一定的知识盲区和空洞。很多ORM框架都是基于JDBC规范来进行构建的,因此,学习JDBC的基础知识势在必行。虽然不建议在实际开发中使用 JDBC API,但了解其技术背景和使用过程无疑会更好的理解构建于其上的高级框架。本篇博客总结自尚硅谷宋红康老师的视频教程,旨在记录和总结JDBC API的使用步骤和常见问题,方便未来面试和深入理解其他框架。一原创 2021-02-12 19:27:15 · 480 阅读 · 1 评论 -
Java 动态代理解析
引言本博客总结自《Java 编程思想》第十四章一、实现第一个动态代理程序代理是软件设计中重要的设计思想,它允许我们在调用实际操作之前或之后解耦式地编写额外的操作,而一旦不需要这些操作了,就可以轻易的移除它们。浏览了《编程思想》中对动态代理的解释,我发现动态代理的实现也是非常简单的。想要实现动态代理,除了要借助于 Java 的运行时类型信息( RTTI :Run-Time Typ...原创 2020-01-02 23:51:37 · 326 阅读 · 0 评论 -
Java 注解知识总结
引言本博客总结自《Java 编程思想》第 20 章。一、什么是注解注解是 Java 5 引入的一种通过反射机制实现的语法特性,开发者可以通过在类、域、方法等元素前面标记一个“标签”达到对程序的源码、类信息或运行时进行某种说明或处理的效果,尽可能地简化代码,从而使程序开发更高效。但需要注意的是,编译器要确保在其构造路径上,必须有对应注解的定义。Java 中在 1.5 之初内置了三个标...原创 2020-01-01 14:13:59 · 285 阅读 · 0 评论 -
Java正则表达式总结
引言正则表达式(英文:regular expression)是用于描述字符串规则的工具,是记录文本规则的代码。它可以用来搜索、编辑、处理文本。现有编程语言都支持正则表达式的处理,但每种语言都有细微的差别。在Java 中,正则表达式的转义反斜杠要用:\\ 来表示,这是因为在《Java Language Specification》中明确规定,Java 中的一个反斜杠会用于转义Unicod...原创 2019-12-22 21:05:40 · 506 阅读 · 0 评论 -
Lombok ——自动化方法生成器
引言此文为简单的Lombok 演示。Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。简而言之,一句话就是:通过简单的注解来精简代码达到消除冗长代码的目的。官网:https://projectlombok.org/GitHub:https://github.com/rzwit...原创 2019-08-31 06:30:03 · 880 阅读 · 0 评论 -
Java NIO ———— Buffer 缓冲区详解
引言缓冲区是一个用于特定基本类型的容器。由java.nio 包定义,所有缓冲区都是 Buffer 抽象类的子类。Java NIO 中的 Buffer ,主要用于与NIO 通道进行交互。数据从通道存入缓冲区,从缓冲区取出到通道中。一、创建缓冲区缓冲区的本质是数组,用于存储不同类型的数据,根据数据类型(boolean 除外),提供了相应类型的缓冲区,如ByteBuffer、In...原创 2019-08-20 22:23:52 · 1934 阅读 · 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:36 · 205 阅读 · 0 评论 -
JavaScript————FormData实现多文件上传
引言星期四的时候,我遇到了一个文件上传的问题,与以往不同的是,这一次上传的是多个文件,而且涉及到了久违的javascript代码。虽然最后实现的并不尽如人意,不过也算是完成了功能,接下来就把我发现的一些问题和总结记录一下。HTML部分展示<form id ="tempFile" method="post" enctype="multipart/form-data"> <...原创 2019-05-25 12:42:16 · 9913 阅读 · 2 评论 -
Eclipse(STS 4)闪退导致EGit插件异常
引言到目前为止,STS已经闪退过三次了。问题很棘手,我需要冷静。首先出现了一个问题就是,EGit无法commit。第二个问题是切换分支报错。闪退重启后EGit无法提交代码观察闪退出现的时机,一般出现在我 commit 代码的时候,只要点击commit,STS就会以迅雷不及掩耳之势自动退出,猝不及防!重启后,代码无法提交!!WTF!问题出现在 index.lock...原创 2019-04-01 16:06:59 · 529 阅读 · 0 评论 -
Jackson高级操作————流式API与JsonGenerator、JsonParser
引言继《Jackson快速入门》之后的高级相关操作。Jackson提供了一种对于性能要求应用程序操作json更加高效的方式——流式API,这种方式开销小,性能高,因此,如果应用程序或者程序逻辑对于性能有一定要求,可以使用这种方式来进行json文件的读写操作,而对于一般的读写,使用普通的databind api即可。要点1、与Java8的“流式”概念不同,这种Jackson的这种流式...原创 2019-03-30 22:29:08 · 3679 阅读 · 0 评论 -
Jackson高级操作————节点树
引言继《Jackson快速入门》基础篇之后的树模型相关操作。节点树模型ObjectMapper构建JsonNode节点树,类似于DOM解析器的XML。 @Test public void testJsonTree() throws JsonProcessingException, IOException { String jsonString = "...原创 2019-03-30 20:58:34 · 3858 阅读 · 0 评论 -
Java反射————Method根据方法名称字符串调用方法
引言之前浏览廖雪峰老师的个人博客网站,无意间发现了关于在Java8中获取参数的方法,随手一转《Java 8中获取参数名称》,没想到今天遇到一个功能,非常符合这种反射调用的使用场景。回看了这篇之前转载的文章,然后根据自己的理解完成了这个功能。场景描述功能其实并不复杂。一个设备表中有两个字段,A和B,希望既可以通过A来查找相应记录,又能够通过B来查找相应记录,但问题就在于A和B的样子非常相...原创 2019-03-21 23:14:56 · 13436 阅读 · 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:56 · 4314 阅读 · 0 评论 -
Jackson快速入门
引言上一篇博客《XML模板解析————Dom4j解析xml案例分析》简单讲解了关于xml模板的解析,使用到了dom4j,这篇文章其实算是个姊妹篇,都是对于目前工作中的一些任务,如xml、json相互解析所涉及到的知识。但是相对于xml而言,我更希望通过这篇博客能够稍微全面的学习一下jackson。因为之前用过的相关类库是国产的fastjson,虽然简单的操作还可以,但是最近发现远比jack...原创 2019-03-20 22:33:35 · 769 阅读 · 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:07 · 950 阅读 · 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:54 · 1131 阅读 · 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:09 · 7428 阅读 · 20 评论 -
当面试官问我————为什么String是final的?
面试官:你好,能看得清下面这张图吗?我:可以的。面试官:恩,好的。呃,你能不能说一说为什么String要用final修饰?我:final意味着不能被继承或者被重写,String类用final修饰是Java的设计人员不希望客户端程序员继承String类,并有可能改写String类中的方法。使用String对象的最佳实践,应该是关联或者依赖,而不是继承。面试官:恩,你还没有说到点儿...原创 2019-01-23 18:40:40 · 3573 阅读 · 21 评论 -
价值50万年薪的Java面试题
《Java面试题全集(上)》《Java面试题全集(中)》《Java面试题全集(下)》《关于Java并发编程的总结和思考》《面试编程题拾遗(01) --- 不用算术运算符完成两个数求和》《面试编程题拾遗(02) --- 寻找多出来的元素》《面试编程题拾遗(03) --- 删除有序数组中的重复元素》《面试编程题拾遗(04) --- 上楼梯有多少种方式》《面试编程题拾遗(...转载 2019-01-22 17:55:26 · 2272 阅读 · 2 评论 -
软件版本GA、RC、beta等含义
原文《软件版本GA、RC、beta等含义》GAGeneral Availability,正式发布的版本,官方开始推荐广泛使用,国外有的用GA来表示release版本。RELEASE正式发布版,官方推荐使用的版本,有的用GA来表示。比如spring。Stable稳定版,开源软件有的会用stable来表示正式发布的版本。比如Nginx。Final最终版,也是正式发布...转载 2018-12-07 09:46:58 · 329 阅读 · 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:45 · 2296 阅读 · 0 评论 -
JavaCard概述
什么是JavaCardJavaCard,即Java智能卡。以智能卡硬件系统为基础,通过软件的方式构造一个支持Java程序下载、安装、运行的软/硬件系统。由于引入了虚拟机技术,JavaCard具备硬件无关性,即智能卡应用程序开发与智能卡硬件系统相分离,简化开发过程,提高应用程序的可移植性与可重用性。智能卡层级结构图上图中:1、最底层是硬件(芯片,如SIM卡、SD卡等),然后会提...转载 2018-11-25 15:57:11 · 4702 阅读 · 2 评论 -
Effective Java(一)———— 代替构造器和Setter的构建器模式
引言Java语言中的一部经典著作《Effective Java》,里面涵盖了78条我们应该熟练的Java编程技巧。本篇博客是该书学习的系列笔记第一篇。本系列博客不会与书中的78条建议完全匹配。只是以一种读者的身份来记录和总结从书中得到的好的编程建议,博客中会明确从书中哪条建议得来的知识。本博客总结自书中第二条:遇到多个构造器参数时要考虑用构建器构建器的产生我们知道对象的构建有很...原创 2018-11-21 22:38:15 · 551 阅读 · 0 评论 -
Eclipse使用————生成Get/Set、toString快捷键(不使用鼠标)
引言除了鼠标右键空白处—>source选择我们需要的操作之外是否还有更快捷的不需要鼠标的操作呢?如何快速的通过键盘来生成get、set方法?如何快速的通过键盘生成toString方法?如何快速的通过键盘生成需要实现的父类方法呢?快速生成get、set、toString首先我们知道source的快捷键是:Alt + Shift + s那么打开了Source之后,我们如何...原创 2018-11-01 22:06:07 · 19082 阅读 · 10 评论 -
爱上进制转换练习
引言对于可能接触到通讯行业或是物联网的开发工作者,一般会面对十进制、二进制、十六进制的转换工作,不仅仅是体现在代码上,有时候也需要用肉眼来进行快速的转化,以获取协议指令中的信息。今天通过简单的整理,特此将这三种转化整理成一张表,并配上三个单独的执行程序。作为日后记忆的参考;而三个可执行程序是为了每天进行练习。进制对照表其中红色框代表比较有特点的二进制,绿色框代表十六进制和十进制完全...原创 2018-10-30 11:37:08 · 1053 阅读 · 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:31 · 11892 阅读 · 0 评论 -
如何快速理清大型项目业务逻辑
引言本篇文章为了探讨如何快速上手一个大型项目。针对经验尚浅需要快速接手一个项目的开发人员。当他们拿到一个大型程序后,他们便开始一句一句的阅读分析,夜以继日,悬梁刺股。可结果依然不理想,往往进入以下状态:1、花费了很长时间,也没有多大进展,与当时预计的日期相差甚远。2、由于周期较长,他们往往在重复阅读分析最初的极小部分。就像有的童鞋读书一样,几个月前读的是前两章,几个月后还是那两章,...原创 2018-10-18 18:21:16 · 9215 阅读 · 3 评论 -
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:12 · 30143 阅读 · 6 评论 -
Multiple markers at this line
在类的package 关键字上莫名其妙的多了红色波浪线,代码也没有任何问题。解决方法:打开项目build path,删除jre system library,然后应用,再次添加一遍jdk1.8,选择工作区默认即可,应用,OK。...原创 2018-08-27 10:19:00 · 2824 阅读 · 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:22 · 4330 阅读 · 0 评论