- 博客(25)
- 收藏
- 关注
原创 SpringBoot自定义国际化案例及源码探究
SpringBoot自定义国际化案例及源码探究对于一个这样的首页,我们试图通过点击下方的“中文”、“English”实现两种语言页面的跳转index.html如下<!doctype html><html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"> <meta name="viewport" content="widt
2020-11-04 16:08:08
509
原创 Spring之IOC概念、Bean对象创建及DI注入的三种方式
Spring的IOC(inverse of control )如何理解首先我们先比对Java中两类创建对象的方式。方式1:通过new关键字创建实例对象private IAccountDao accountDao= new AccountDaoImpl();方式2:通过工厂获取实例对象private IAccountDao accountDao = BeanFactory.getBean("accountDao"); 通过方式1创建对象时,我们是主动寻找所要创建的对象的,应用直
2020-10-13 12:11:21
398
原创 Spring工厂模式解耦浅析
程序的耦合耦合:程序间的依赖关系 包括:1.类之间的依赖 2.方法间的依赖解耦:降低程序间的依赖关系实际开发中,应该做到,编译期不依赖,运行时才依赖。解耦的思路: 第一步:使用反射来创建对象,而避免使用new关键字。 第二步:通过读取配置文件来获取要创建的对象全限定类名。耦合示例及利用工厂模式解耦为了更直观的展示编程中的耦合问题,下面通过一个简单的示例来进行分析和解决。首先创建一个新的maven工程,工程内的各个包和子包如图:其中dao包和service包中包
2020-10-09 15:52:20
185
原创 JDBCUtils工具类的创建和使用
为了简化JDBC的注册驱动、创建连接对象等操作,可以使用JDBC工具类以及配置文件。配置文件url = jdbc:mysql://localhost:3308/db4?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTCuser = rootpassword = 123456driver = com.mysql.cj.jdbc.DriverJDBCUtils工具类package utils;imp
2020-10-09 10:34:44
605
转载 Java中getResourceAsStream的用法
首先,Java中的getResourceAsStream有以下几种: 1. Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoade...
2020-09-15 14:30:26
138
原创 Servlet浅谈
Servlet:server applet1. 概念:运行在服务器端的小程序Servlet就是一个接口,定义了Java类被浏览器访问(tomcat识别)到的规则。将来我们自定义一个类,实现Servlet接口,复写方法。2. 快速入门:创建JavaEE项目定义一个类,实现Servlet接口public class ServletDemo1 implements Servlet实现接口中的抽象方法配置Servlet:在web.xml中去配置,注意要在<web-app
2020-09-11 16:07:29
114
原创 Java反射概述
反射1. 获取Class类的对象 我们要想通过反射区使用一个类,首先我们要获取到该类的字节码文件对象,也就是类型为Class类型的对象。这里我们提供三种方式获取Class类型的对象。使用类的class属性来获取该类对应的Class对象。举例:Student.class将会返回Student类对应的Class对象调用对象的getClass()方法,返回该对象所属类对应的Class对象。该方法是Object类中的方法,所有的Java对象都可以调用该方法使用Class类中的静态方法forName(S
2020-09-10 10:48:38
123
原创 JDBC中SQL注入的问题小结
SQL注入问题在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会造成安全问题1.例如: 输入的用户名随意,输入的密码:a’ or ‘a’ = ‘a定义sql的代码如下:// 定义sqlString sql = "select * from user where username = '" + username + "' and password = '" + password + "'"; 如果根据所给例子输入随意的用户名和密码a’ or ‘a’ = ‘a,则最终执行的sq
2020-09-03 14:55:43
173
原创 synchronized和Lock的区别
下面简单列举一下synchronized和Lock的区别。之后进行详细的解释。类别synchronizedLock存在层次Java的关键字,在jvm层面上是一个类锁的释放1、以获取锁的线程执行完同步代码,释放锁 2、线程执行发生异常,jvm会让线程释放锁在finally中必须释放锁,不然容易造成线程死锁锁的获取假设A线程获得锁,B线程等待。如果A线程阻塞,B线程会一直等待分情况而定,Lock有多...
2019-09-21 12:03:24
106
原创 重写和重载的详细解析
重载(Overload)指的是在同一个类中,存在多个名称相同的方法,但是这些方法的参数个数,参数类型,或者参数顺序不同。在满足前面三个条件任意其中一个的情况下,方法的返回类型和访问修饰符可以不同。注意: 仅仅只是方法的返回类型不同不能构成重载!!public class Test { public static void main(String[] args) { Test te...
2019-09-21 10:44:14
154
原创 剑指offer-连续子数组的最大和
题目描述在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和。(子向量的长度至少是1)此题可以用递归思想来解决,具体思路如下:假设...
2019-09-15 10:43:35
101
原创 剑指Offer-二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。非递归版本此题要求将一颗二叉搜索树转化为有序的双向链表,考虑到二叉搜索树的特点,可以用中序遍历将二叉搜索树的节点有序的存储在一个数组中,然后依次遍历,改变节点的指针即可。# -*- coding:utf-8 -*-# class TreeNode:# d...
2019-09-10 15:06:46
99
原创 Java基础-int和Integer的区别
在Java中有很多类的方法需要接收引用类型的对象作为传入参数,此时就无法将一个基本数据类型的值传入。为了解决这样的问题,JDK提供了一系列的包装类,通过这些包装类可以将基本数据类型的值包装为引用数据类型的对象。基本类型对应的包装类如下表所示。基本数据类型对应的包装类byteBytecharCharacterintIntegershortShort...
2019-09-05 16:20:27
224
原创 Java基础-String类和StringBuffer类的区别。
String类String类表示的字符串是常量,一旦创建后,字符串的内容和长度都无法改变,并且被声明为final class,不可以被继承,成员属性中除了hash之外都被final修饰,当通过String的构造函数初始化新的String对象时,也只是根据传入的引用对象的value和hashcode进行了赋值。下面是String的部分源码。public final class String ...
2019-09-05 13:03:13
338
原创 Java基础-线程
线程的创建Java提供了两种多线程实现方式,一种是继承java.lang包下的Thread类,重写Thread类的run()方法,在run()方法中实现运行在线程上的代码;另一种是实现java.lang.Runnable接口,同样是在run()方法中实现运行在线程上的代码。接下来就对这两种创建多线程的方法分别介绍。继承Thread类创建多线程在Java中提供了一个线程类Thread,通过继承...
2019-09-04 14:39:31
373
原创 Java之接口
接口的定义如果一个抽象类中所有的方法都是抽象的,则可以用另一种方式来定义这个类,即接口。interface Animal{ int ID = 1; // 定义全局常量 void breathe(); //定义抽象方法 void run();上面的代码中,Animal即为一个接口。接口中定义的方法默认使用public abstract修饰,即抽象方法。接口中的变量默认使用public ...
2019-09-04 10:19:35
299
原创 Java为什么要在类中声明一个无参构造方法
Java中定义无参构造方法的意义在Java程序编写中,子类的构造方法必定会调用父类的构造方法,如果在子类的构造方法中没有指定调用父类的哪个构造方法,在实例化子类对象时,子类会默认调用父类的无参构造方法。如果在父类中没有定义无参构造方法的话,编译会报错。下面是一个实际例子。class Animal{ // 定义有参的构造方法 Animal(String race){ ...
2019-09-03 21:26:28
7901
原创 Java基础-设计模式
在编写程序的时经常会遇到一些典型的问题或需要完成某种特定的需求,设计模式就是为了针对这些问题和需求,在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们就可以用不同的棋谱,免得自己去思考和摸索。下面介绍一下常用的设计模式单例模式单例模式是Java中的一种设计模式,它是指在设计一个类的时候,需要保证在整个程序的运行过程期间针对...
2019-09-03 18:22:15
149
转载 TCP 为什么三次握手而不是两次握手(正解版)
参考文章Why do we need a 3-way handshake? Why not just 2-way大部分网络博客的...
2019-09-02 09:51:54
167
原创 剑指offer- 二叉搜索树的后序遍历序列
题目介绍输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。具体思路其实这个题目的思路并不难,只要知道后续遍历的思维以及二叉搜索树的特性即可轻松破解。由于是后序遍历,一般来说数组中的最后一位为根节点,而根节点的左子树部分则位于后序遍历序列的前半段,而在根节点与左子树中间的部分即为二叉搜索树的右子树。[...
2019-09-01 22:48:12
99
原创 剑指offer-栈的压入、弹出序列
题目介绍输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)这个题目要求给定两个等长序列,第一个为元素进栈的顺序序列,第二个是元素出栈的顺序序...
2019-09-01 16:03:26
96
原创 剑指offer-包含min函数的栈
题目介绍:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.因为自己算法水平真的是很菜,不入流的那种,一开始看到这题,下意识的就是想着不就是绕圈圈打印一遍吗,太简单了,可是...
2019-09-01 13:25:30
119
转载 数据库事务
转载自:https://blog.youkuaiyun.com/zdwzzu2006/article/details/5947062 事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,...
2019-08-31 12:24:49
136
转载 深入理解MYSQL索引之B+TREE
转载自:https://blog.youkuaiyun.com/b_x_p/article/details/86434387 首先,正确的创建合适的索引,是提升数据库查询性能的基础。...
2019-08-31 12:06:42
252
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人