
Java
文章平均质量分 95
江璇Up
公众号【江璇Up】我把我学会的讲给你听
展开
-
详解Java SPI机制
1. 什么是 SPI1. 背景在面向对象的设计原则中,一般推荐模块之间基于接口编程,通常情况下调用方模块是不会感知到被调用方模块的内部具体实现。一旦代码里面涉及具体实现类,就违反了开闭原则。如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候不用在程序里面动态指明,这就需要一种服务发现机制。Java SPI 就是提供了这样一个机制:为某个接口寻找服务实现的机制。这有点类似 IOC 的思想,将装配的控制权移交到了程序之外。SPI 英文为 Service Provider Interface原创 2021-11-23 09:52:45 · 475 阅读 · 0 评论 -
深入理解synchronized关键字
1. 对Synchronized的认识1.1 为什么需要使用Synchronized?在并发编程中会存在多个线程操作同一个资源的情况,此时原本在单线程下正常运行的程序可能会在多线程情况下发生一些难以预料的错误;这里我举一个例子:初始化一个计数变量,开启10个线程,然后每个线程对这个计数变量进行10000次的累加,按照单线程的常规操作,最后这个程序的执行结果应该是10*10000 = 100000,我们可以通过下面的程序进行论证:public class SynchronizedDemo {原创 2020-08-15 15:58:21 · 253 阅读 · 0 评论 -
用Java实现MD5加密工具类
什么是MD5加密算法?MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5加密算法的功能和常见用途:功能:将任意长度的信息经过处理后,能够转换为128位的信息。(唯一性,不会产生重复,可以理解为信息的唯一身份ID)常见用途:密码管理: 系统在对用户注册的密码进行MD5加密后再做持久化操作,这样即使是拥有最高权限能够查看数据库信原创 2020-08-08 00:12:17 · 1808 阅读 · 0 评论 -
关于哈希表(Hashtable)个人学习理解
数据结构–哈希表(Hashtable、又称散列表)最近做了一个题目:想要查看集合中的某个指定元素,但是不知道具体的位置。一般情况下是遍历这个数组的全部,然后去找到这个元素。若此时元素基数不是很大的话,还好,若集合的长度 n 趋于无穷大,而恰恰不巧的是这个元素的位置刚好在最后,那么可想而知消耗的时间是非常巨大的。那么就需要一个高效的存储结构来存储这个集合----哈希表。使用了这种结构能够提高查...原创 2020-05-01 08:33:37 · 608 阅读 · 1 评论 -
基于阿里数据库连接池Druid和Apache封装工具类DBUtil的JDBC实现对数据库视图的查询和表的增删改查操作
1. DruidDruid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid是阿里巴巴开发的号称为监控而生的数据库连接池!它有三个特点:处...原创 2020-02-18 19:43:27 · 973 阅读 · 0 评论 -
解决哈希冲突的几种方法
Hash冲突的概念哈希算法 的目的就是将一串很大的数据根据一定的规则转换为较小的数据。把任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。在这个转换过程中,总会出现两个不同的数据在经过哈希算法的计算后生成了相同的哈希值。这就是哈希冲突。哈希冲突带来的影响:在哈希表中,两个不同数据的哈希值相同,那么不论这两个数据中...原创 2020-01-16 14:37:21 · 1367 阅读 · 0 评论 -
接口和抽象类的区别
相同点:都不能被实例化,位于继承树的顶端,都包含抽象方法不同点:1、设计目的:接口体现的一种规范,类似与整个系统的总纲,制订了系统各模块应该遵循的标准,因此接口不应该经常改变,一旦改变对整个系统是辐射性的。 抽象类作为多个子类的共同父类,体现的是一种模板式设计,可以当作系统实现过程中的中间产品,已经实现了系统部分功能。 2、使用不同:(...原创 2020-01-16 13:32:03 · 846 阅读 · 1 评论 -
try、catch、finally中的return由谁决定
先上一个栗子:public class Test{ public int add(int a,int b){ try { return a+b; } catch (Exception e) { System.out.println("catch语句块"); ...原创 2020-01-15 09:37:39 · 202 阅读 · 0 评论 -
JDBC连接的基本步骤
//声明数据库驱动,数据源的url,用于登录数据库的账户和密码(将其他功能封装成方法的时候方便使用)String driver = "数据库驱动名称";String url = "数据库连接地址"String user = "用来连接数据库的用户名";String pwd = "用来连接数据库的密码";//加载数据库驱动 Class.forName(driver);//根据url创建...原创 2020-01-14 12:19:04 · 257 阅读 · 0 评论 -
类在实例化时的执行顺序
顺序如下:1、父类静态代码块2、子类静态代码块3、父类非静态代码4、父类构造函数5、子类非静态代码6、子类构造函数举个例子:class X{ Y y=new Y(); public X(){ System.out.print("X"); }}class Y{ public Y(){ System....原创 2020-01-14 12:00:33 · 1211 阅读 · 0 评论 -
Thread的start方法和run方法的区别
1、start方法才能真正启动线程,此时线程会处于就绪状态,一旦得到时间片,则会调用线程的run方法进入运行状态。2、run方法只是普通方法,如果直接调用run方法,程序只会按照顺序执行主线程这一个线程。可以通过一个Demo例证:public class Main { public static void main(String args[]) { Thread t...原创 2020-01-14 11:54:12 · 276 阅读 · 0 评论 -
关于String、StringBuffer、StringBuilder的区别
最近看到了一道题目:正确答案:C下面就这题的其他选项给出解析:StringString不可变!先来看看String的源码:public final class String implements Serializable, Comparable<String>, CharSequence { private final byte[] value; priva...原创 2020-01-14 11:26:21 · 4423 阅读 · 2 评论 -
Java中引用类型、对象数组的两种定义方法
所谓的对象数组,就是指包含了一组相关的对象,但是在对象数组的使用中一定要清楚一点:数组一定要先开辟空间,但是因为其是引用数据类型,所以数组里面的每一个对象都是null值,则在使用的时候数组中的每一个对象必须分别进行实例化操作。直接上代码算了,注释里面写的蛮清楚的了!import java.util.Arrays;public class Ar...原创 2019-07-17 23:02:22 · 1580 阅读 · 0 评论