自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 收藏
  • 关注

原创 ApplicationRunner

需要在容器启动的时候完成后做一些事情springboot有两个接口可以实现。这两个接口分别为CommandLineRunner和ApplicationRunner。他们的执行时间为容器启动完成的时候。实现run方法就可以。目前使用到的是ApplicationRunner@Componentpublic class MyRunner implements ApplicationRunner { @Override public void run(ApplicationArguments

2021-01-24 21:15:02 961

原创 Huffman树

基本概念什么是赫夫曼树给一组数据,构建一颗huffman树思路:举例实现过程:数据:13,7,8,3,29,6,11、第一步排序:1,3,6,7,8,13,292、第二步找最小的两个权值,组成新树3、第三步重复上述步骤(排序+组成新树),直到只剩一个权值图解如下:代码实现:/** * 为了让Node实现排序,实现Comparable的compareTo方法 */@Datapublic class Node implements Comparable<N

2021-01-12 00:10:24 321

原创 树的遍历

//定义节点及遍历方法@Datapublic class HeroNode { private Integer id; private String name; private HeroNode left; private HeroNode right; public HeroNode(Integer id, String name) { this.id = id; this.name = name; } /*.

2021-01-10 15:15:49 188

原创 数组+链表实现HashTable

/** * 存储的对象 */@Datapublic class Emp { private Integer id; private String name; private Emp next; public Emp(Integer id, String name, Emp next) { this.id = id; this.name = name; this.next = next; }}/*** 链

2021-01-09 23:53:31 256

原创 快速排序

public class QuickSort { public static void main(String[] args) {// int[] arr = {2, 4, 1, 6, 1, 3, 9}; int[] arr = {2, 2, 2, 1, 1, 1, 1}; quickSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); }

2021-01-09 23:02:35 84

原创 二分查找

思路:首先,二分查找必须在有序数组使用,如果无序先排序1.确定数组中间位置的下标mind=(left+right)/2;2.要查找的数findValue和中间数进行比较,如果findValue<arr[mind],向做递归查找,如果findValue>arr[mind],向右递归查找,如果相等就返回下标。(这里默认数组顺序从小到大)3.退出递归的情况两种一 找到了这个数二 根本没有这个数 left > right时,要结束递归代码:public class BinarySe

2021-01-05 00:10:50 122

原创 希尔排序

希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。public class ShallSort { public static void main(String[] args) { int[]

2020-12-16 00:48:36 330

原创 插入排序--直接插入排序

直接插入排序是将无序序列中的数据插入到有序的序列中,在遍历无序序列时,首先拿无序序列中的首元素去与有序序列中的每一个元素比较并插入到合适的位置,一直到无序序列中的所有元素插完为止。public class InsertSort { public static void main(String[] args) { int[] arr = {2, 4, 1, 6, 3, 9}; //将后面arr[1]到arr[n]的数往前面插 for (int i

2020-12-12 15:56:01 149

原创 选择排序

从arr[0]到arr[n-1]的数组里找出最小的,和第一个即arr[0]交换,确定最小值。第二趟,从arr[1]到arr[n-1]的数组里找出最小的,和第二个即arr[1]交换,确定第二个小值。依次类推到数组结束(n为数组长度,如果从大到小就找最大值)import java.util.Arrays;public class SelectSort { public static void main(String[] args) { int[] arr = {2, 4, 1,

2020-12-10 23:29:50 91

原创 冒泡排序

思路分析图两个指针一起往后移动,比较大小逆序就交换,完成一趟则可以确认一个最大的数。继续下一趟确认第二个较大的数代码实现import java.util.Arrays;/** * 冒泡排序 * 第一趟,比较相邻的两个(第i和i+1位置的)逆序则交换,i++后继续此操作,直到到 数组结束,完成一趟,此时最后一个即为最大的。 * 开始下一趟 只需要将前length-1个数字进行上述过程 * 直到最后一趟就剩一个数,结束排序 */public class BubbleSort {

2020-12-10 00:46:45 136

原创 回溯算法--8皇后问题

一、回溯算法主要用到递归调用1、递归概念:方法自己调用自己,每次调用时,传入不同的参数。有便于解决复杂问题,同时可以简洁代码2、能解决的问题和规则二、迷宫回溯/** * @author chengxn * @date 2020/11/26 * 迷宫回溯问题 */public class MiGong { public static void main(String[] args) { //数组模拟地图 int[][] map = new int[

2020-12-08 21:52:26 152

原创 栈实现逆波兰计算器

一、栈1、概念英文名stack,是一个先进后出的有序列表。插入和删除只能在栈顶进行操作,栈底固定。入栈push出栈pop2、应用场景1)子程序的调用:进入子程序之前,会先将下指令的程序地址存入栈中,子程序执行完成后,将地址取出,返回到原来的程序中。2)处理递归调用:和子程序调用类似,只是除了程序地址之外,还会将参数、区域变量等存进栈中。3)表达式的转换[中缀表达式转换后缀表达式]与求值4)二叉树遍历5)图形的深度优先搜索法3、数组模拟栈,入栈,出栈等操作/** * @author ch

2020-12-08 00:00:02 183

原创 单例模式(一)

一、定义保证一个类仅有一个实例,并提供一个全局访问点应用场景:想确保任何情况下都只有一个实例。例如;线程池、数据库连接池等二、优缺点优点:1、在内存中只有一个实例,减少内存开销。特别是需要频繁进行创建销毁的对象,而且创建和销毁时的性能无法优化2、避免对资源的多重占用3、设置全局访问点,严格控制访问缺点:没有接口,扩展困难三、重点1、私有构造器2、线程安全3、延迟加载4、序列化和反序列化安全5、反射,防止反射攻击关于这些重点,在下面的演示代码过程会讲到四

2020-11-21 22:19:56 375 1

原创 建造者模式

一、定义创建型设计模式将复杂对象的构建与表示分离,使得同样的构建过程可以有不同的表示用户只需要指定建造的类型就可以的到(需要将构建的组件传入),不需要知道建造的细节二、代码//要创建的课程对象public class Course { private String courseName; private String coursePPT; private String courseVideo; private String courseArticle;

2020-10-18 23:16:04 111

原创 抽象工厂

一、定义创建型提供一个创建一系列的相关或相互依赖对象的接口二、代码其实逻辑类似于工厂方法,只是将工厂创建对象扩展到多个类,即同一产品族的产品。参考工厂方法的业务场景,现在要求视频+手记才算是课程,那我们如何创建课程。//Video接口public abstract class Video { public abstract void produce();}//两个实现public class JavaVideo extends Video{ @Override

2020-10-15 01:07:52 127

原创 工厂方法

一、定义属于创建型设计模式定义一个创建对象的接口,让实现接口的类来决定生产哪一类对象。工厂方法让类的实例化推迟到子类中进行。二、代码实现参考之前的简单工厂业务场景将工厂类声明为一个抽象类或接口,定义具体的工厂类去分别实现创建不同类型的实例。客户端只需要调用相应的工厂类就可以获取到实例,无需关心对象创建的过程。这样也符合开闭原则,新增一个video的时候,我们只需要新增一个video类和videoFactory就可以,不会修改原来的代码。//Video抽象类public abstract c

2020-10-13 23:10:07 260 1

原创 简单工厂

首先说明,简单工厂并不属于23中设计模式。学习设计模式前,首先了解简单工厂,是代码设计中经常用到的。现在有个案例如下代码:// Video的抽象类public abstract class Video { public abstract void produce();}//Video的两个实现类public class JavaVideo extends Video { @Override public void produce() { System

2020-10-12 23:47:09 375

原创 java判断ip是否为指定网段

一、IP(ipv4)IP是Internet Protocol(网际互连协议),是计算机网络体系结构中的网络层协议。IP协议定义地址是一个32位的地址,(ipv6是128位),使用点分十进制表示法,每8位分开来表示也就是我们常说的IP地址,例如:30.14.234.254该地址分为两个部分network+host(网络位+主机位),具体各占几位,不一定。网络位是指你这个设备是处于哪个网段的,主机位是定位你是当前网络的哪一台设备。二、IP分类传统的ip地址分类:分为A\B\C\D\E五类abc

2020-10-12 23:25:28 3694 2

原创 钉钉markdown格式换行

使用场景:消息模版类似于:您好您的客户已下单,{a}。 \n 测试字段:{b} \n 测试字段2:{b}经过业务替换后,把消息内容写进消息表自动个跑任务去推送消息。问题:换行未生效解决:换行使用:\n 并且前后严格要用两个空格\n 存入数据库会被转译为\n 所以从数据库查出来要把\n替换为\n...

2020-09-17 12:42:40 4732

原创 钉钉isv接入三方应用授权鉴权流程

一、创建三方应用在钉钉管理后台–>应用开发–>第三方企业应用–>创建应用(这边创建的是H5微应用)创建成功之后,会得到应用凭证:ppid,suiteid,suitekey,suitesecert二、配置开发管理项进入创建好的应用–>开发管理,配置应用首页地址,选择推送类型及推送数据源,这边选择使用钉钉云推送,由于是本地测试,先提供一个可以外网访问的数据库地址来接收推送的数据(建库建表要根据开放平台的要求完全一致,否则会导致数据推送失败或数据乱码,参考地址)三、创建测试企业

2020-08-28 14:31:23 3235 2

原创 钉钉企业内部应用授权免登+鉴权

一、创建应用在钉钉管理后台-应用开发-企业内部开发-创建应用(我们这边创建的是H5微应用)创建好了之后,会拿到应用凭证:AgentId,AppKey,AppSecret这三个值在开发中会用到二、授权免登流程1、前端–获取微应用免登授权码具体参考API:获取授权码API2、后端–授权免登(1)获取access_token用AppKey和AppSecret换取access_token public static String getAccessToken(String appKey, Str

2020-08-16 18:46:22 6420

原创 钉钉鉴权报错:52019,errorCode 3 偶发现象

1、检查appKey、appSecret、corpid、agentid值是否正确2、鉴权url:当前网页的URL,不包含#及其后面部分发现都不是问题所在,查资料发现:jsapi_ticket有效期为7200秒,而且当你请求了新的ticket之后,旧的ticket就失效了然后修改代码将ticket缓存下来,缓存失效时重新获取并写入缓存,而不是每次鉴权重新获取,这样就可以了。总结:每次调用get_jsapi_ticket会获取到一个全新的jsapi_ticket(过期时间是2小时)旧的值会失效。多

2020-08-07 10:23:42 3808 5

原创 memcached实现分布式锁

@Componentpublic class BasicJob { @Autowired protected CacheUtils cacheUtils; private final int minutes = 180; public boolean judge(String key) { if (cacheUtils.get(key) == null) { if (cacheUtils.add(key, minutes, Sys

2020-07-15 23:17:06 394

原创 springboot中实现Redis分布式锁

使用StringRedisTemplate来实现1.添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.3.3.RELEASE</version>

2020-07-15 23:10:18 363

原创 端口及数据库 mybatis配置

端口及数据库 mybatis配置server.port=8081spring.datasource.url=jdbc:mysql://localhost:3306/spring_bootspring.datasource.name=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#对应mapper映射xml文件的所在路径mybatis.mappe

2020-06-26 00:13:24 940

原创 @Data注解

<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.6</version></dependency> 还有一些提供的注解:@Data :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、ca

2020-06-26 00:12:07 5467 2

原创 @Component, @controller @Repository, @Service的区别

在Spring2.0之前的版本中,@Repository注解可以标记在任何的类上,用来表明该类是用来执行与数据库相关的操作(即dao对象),并支持自动处理数据库操作产生的异常在Spring2.5版本中,引入了更多的Spring类注解:@Component,@Service,@Controller。@Component是一个通用的Spring容器管理的单例bean组件。而@Repository, @Service, @Controller就是针对不同的使用场景所采取的特定功能化的注解组件。(因

2020-06-26 00:10:19 596

原创 解决文件夹无访问权限问题:-bash: cd: /usr/local/mysql/data: Permission denied

进入该目录时 cd /usr/local/mysql/data无权限访问 -bash: cd: /usr/local/mysql/data: Permission denied 执行 sudo chmod 777 /usr/local/mysql/data 原因是没有权限,777代表,user,group ,others ,都有读写和可执行权限。再访问就可以了...

2020-06-25 19:36:19 9930 1

原创 jwt加密

jwt加密1.pom <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> <dependency> <groupId>com.auth0</groupId> <ar

2020-06-03 22:00:40 969

原创 JSON转换错误

JSONException: For input string: “Jan 1, 2018 12:00:00 AM”写缓存时用的谷歌json工具,读出来的时候用的ali的fastjson工具,一旦实体里包含时间字段就会转换错误。解决办法:在对象转json和json转对象时,使用的工具包保持一致...

2020-05-25 18:27:25 477

原创 @Component+@PostConstruct注入bean

@Componentpublic class MyUtil { @Resource private CacheUtils cacheUtils; public static MyUtil myUtil; @PostConstruct public void init(){ myUtil = this; myUtil.cacheUtils = this.cacheUtils; } public static MyUtil get

2020-05-22 13:12:48 1001

原创 mac修改数据库服务的编码方式

由于数据库保存表情包报错的情况 需要改编码方式为utf8mb4(可以支持四个字节)仅修改数据库,表,字段的编码方式是没用的,需要将数据库服务的编码方式改为utf8mb4mac的数据库默认是没有my.cnf文件的,要改配置的话,需要自己创建一个my.cnf文件 放在/etc/my.cnf路径添加要修改的配置[client]default-character-set = utf8mb4[mysql] default-character-set = utf8mb4[mysqld] ch

2020-05-16 19:14:44 248

原创 https访问http接口处理

下载openssl工具并安装https://www.openssl.org/下载生成证书1、生成私钥# genra 生成RSA私钥# -des3 des3算法# -out server.key 生成的私钥文件名# 2048 私钥长度openssl genrsa -des3 -out server.pass.key 20482、去除私钥中的密码openssl rsa -in server.pass.key -out server.key3、生成CSR(证书签名请求)openssl

2020-05-16 17:21:34 7062

原创 lucene搜索

1.什么是luceneLucene是一个开放源代码的全文检索引擎工具包,提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。2.依赖<lucene-analyzers-common.version>4.7.2</lucene-analyzers-common.version><lucene-core.version>4.7.2</lucene...

2019-11-17 21:00:21 123

原创 图片压缩

1.依赖 <!-- 图片压缩 --> <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> &...

2019-11-17 20:38:28 178

原创 base64加密的两种实现方式

import org.apache.commons.codec.binary.Base64;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;import java.io.IOException;public class TestController { /** * base64加密的两种实现方式 ...

2019-09-07 12:09:50 586

原创 Java面试题----Java基础----hashCode()相同 equals()也为true吗

答案:不是解释:两者都是用来比较两个对象是否相等equals:(效率低)如果重写了方法,一般是对象内容相同返回true否则返回false如果未重写方法,是两个对象==时返回true否则返回falsehashCode:(效率高)作用是获取哈希码,也称为散列码。它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置如果equals为true,则hashCode...

2019-08-06 23:06:46 429

转载 Java面试题----Java基础----final finally finalize

final作用1、修饰类(class)。①该类不能被继承。②类中的方法不会被覆盖,因此默认都是final的。③用途:设计类时,如果该类不需要有子类,不必要被扩展,类的实现细节不允许被改变,那么就设计成final类2、修饰方法(method)①该方法可以被继承,但是不能被覆盖。②用途:一个类不允许子类覆盖该方法,则用final来修饰③好处:可以防止继承它的子类修改该方法的意义和实现;...

2019-04-28 17:03:08 182

原创 Java面试题----Java基础---- == 和 equals区别

== 的作用:基本类型:比较的就是值是否相同引用类型:比较的就是地址值是否相同equals 的作用:用于引用类型:默认情况下,比较的是地址值包装类、String类中equals()被复写,比较两个字符串的内容代码示例:public class Main { public static void main(String[] arg){ //Car 未重写equals方法...

2019-04-23 17:06:33 170

原创 Java面试题----Java基础----jre、jdk区别

JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库JRE(Java Runtime Environment)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVM(Java Virtual Machine)是Java虚拟机,是整个java实现跨平台的最核心的...

2019-04-23 16:17:52 573

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除