- 博客(31)
- 收藏
- 关注
原创 深刻理解kmp 的 next 数组的构造,深入浅出
next数组的值的含义和功能:1、含义:表示前后相同最长长度2、功能:如果和文本串进行当前位不匹配时,需要将pattern串的指针跳回到当前指针 j 的上一个的next[j - 1]作为下标的pattern的位置, 就是j = next[j -1]3、功能:设置前后相同最长长度。 当前位位置pattern[i] 如果匹配 pattern[j] , 则next[i] = next[j] + 1, 就是当前位置 pattern[i] 前后相同最长长度+1...
2022-04-17 15:07:13 171
原创 java多线程tcp网络通信
server:import java.io.IOException;import java.io.InputStream;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;public class SocketServer { private static boolean flag = true; private sta
2022-03-10 10:54:22 847
原创 动态代理、工厂模式、注解相结合实现对象创建
import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public cl.
2022-03-04 18:31:05 272
原创 通俗易懂的注释,让你一看就懂的java动态代理
package com.jun.music.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.nio.file.attribute.AclEntry;public class ProxyTest { public static void main(String[] args) {
2022-03-02 21:29:32 259
原创 volatile结合多线程抢票讲解
变量在进行引用时,原本需要从保存在内存中的内容进行拷贝,引用完或修改完后再重新赋值回原本的变量 但是这样会导致在有些时候,多线程条件下, 出现在未返回修改后的结果到原本的变量中,则对原始的变量进行引用, 则会出现数据的不一致性。 volatile 只能保证变量在进行引用时,直接引用原本的变量,不经过副本拷贝的操作。这样就数据的一致性, 但是在多线程条件下,单纯的保证数据的一致性还不够,因为多个线程会在同一时刻对同一个变量引用进行多次的获取,
2022-02-24 17:11:36 354
原创 用idea 查看mybatis进行调试的sql语句
mybatis查看sql语句org.mybatis.spring.SqlSessionTemplate.SqlSessionInterceptorinvoke方法
2022-02-17 18:08:11 2880
原创 享元设计模式
享元模式:package com.demo;import java.util.HashMap;public class FlyweightPattern { public static void main(String[] args) { FlyweightFactory factory = new FlyweightFactory(); Flyweight f01 = factory.getFlyweight("a"); Flyweig
2022-02-09 18:49:24 63
原创 适配器模式(结合SpringMVC实战讲解)
适配器模式:public interface Duck { public void quack(); public void fly(); }public interface Cock { public void gobble(); public void fly(); }public class WildCock implements Cock { public void gobble() { System.out.println(
2022-02-09 18:48:31 1506 2
原创 建造者模式
建造者模式:建造模式分成两个很重要的部分:a) 一个部分是Builder,这里是定义了如何构建各个部件,也就是知道每个部件功能如何实现,以及如何装配这些部件到产品中去。b) 另外一个部分是Director,Director是知道如何组合来构建产品,也就是说Director负责整体的构建算法,而且通常是分步骤地来执行。建造者模式:class User { private String name; private String password; private String
2022-02-09 18:46:40 157
原创 原型设计模式
原型模式 : 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象由于 Java 提供了对象的 clone() 方法,所以用 Java 实现原型模式很简单。Object 类中有一个 clone() 方法,它用于生成一个新的对象,当然,如果我们要调用这个方法,java 要求我们的类必须先实现 Cloneable 接口,此接口没有定义任何方法,但是不这么做的话,在 clone() 的时候,会抛出 CloneNotSupportedException 异常
2022-02-09 18:45:56 61
原创 设计模式原则
开闭原则:开扩展,闭修改原来的代码访问类通过定义想访问的接口,通过多态的特性实现扩展性。里氏替换原则: 里氏替换原则通俗来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。 子类需遵守父类的规则,不能对其进行修改。几维鸟不能飞,所以没有速度,不能直接继承鸟类接口可以提供更泛的接口。依赖倒置原则: 依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象其核心思想是:要面向接口编程,不
2022-02-09 18:44:36 179
原创 代理设计模式(静态代理,动态代理)
代理设计模式静态代理模式:package proxy;import java.lang.reflect.InvocationTargetException;// 静态代理模式/* 1、创建接口 2、创建实现接口的普通类 3、创建实现接口的代理类 4、通过对代理类创建有参构造,参数类型为接口的类型,从而实现普通类能通过参数传进代理类,成为变量,通过变量获取代理类中的方法,从而实现不直接通过普通类创建实例的对象调用方法 */public class Stat
2022-02-09 18:41:44 183
原创 单例设计模式
标题单例设计模式编写单例模式的代码其实很简单,就分了三步:将构造函数私有化在类的内部创建实例提供获取唯一实例的方法// 饿汉模式class Singleton2 { private static Singleton2 singleton = new Singleton2(); private Singleton2() { } // 使用私有构造函数,避免外部创建类实例对象 public static Singleton2 getInstance3()
2022-02-09 18:35:24 98
原创 工厂设计模式
一、简单工厂设计模式package reflect;/* 工厂设计模式: 1、创建接口 2、普通类继承接口 3、创建工厂类Factory,创建匹配的方法 4、实例化工厂类* *///1、创建接口interface Person{ void eat();}//2、普通类继承接口class Man implements Person{ @Override public void eat(){
2022-02-09 18:34:20 261
原创 vue入门练习
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>vue</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script></head><body><div id.
2022-02-09 18:23:04 446
原创 实际例子深刻理解c++参数的引用传递和指针传递
void change(int& a,int &b){ int tmp; tmp=a; a=b; b=tmp;}void change2(int *p, int *q){ int ch; ch = *p; *p = *q; *q = ch;}void change3(int *p, int *q){ int* ch; ch = p; p = q; q = ch; st
2021-11-22 20:25:28 490
原创 Spring实战笔记
Spring实战笔记1、DI其实就是把在想解耦的地方,避免创建对象的操作,引进左值句柄, 右边创建对象的句柄放到其他地方去,实现解耦。2、切面<bean id=“myaspect” class=“com.jun.myaspectclass”><bean><aop:config> <aop:aspect ref=“切面,就是要切的类名->myaspect”> <aop:pointcut id=“mypointcut”>
2021-11-06 12:21:49 87
原创 SpringMVC
SpringMVCrequest 和 response 的区别:request 是 客户端 向服务器发送请求。response 是 服务器 接收到 request 而返回的 相应内容。get 和 post 的区别:get是浏览器向服务器发送请求,服务器响应数据,客户端接收数据,接收这个动作称为get, get是浏览器向后台发送请求(通过url,可以添加参数的形式建立request请求),后台发送数据,controller写GetMappingpost是浏览器想目标发送表单数据
2021-11-06 12:18:03 148
原创 SSM整合
SSM整合IoC / DI:依赖注入是指对持久层和实体类的一种数据注入方式,持久层的创建连接称为数据源DataSource通过service之间创建setXX() 方法,进行调用service操作,实现依赖注入DI思路:需求分析 --> 设计数据库 --> 业务 --> 前端界面创建maven javaWeb项目maven依赖:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http
2021-11-06 12:16:03 149
原创 反射及注解
package com.jun;import java.util.Random;public class OOM { private String str = "zhangjun "; // 默认情况下,分配的总内存是电脑内存的 1/ 4 ,可用的初始化内存是 1/ 64; // 出现oom的情况下, // 一、 先尝试扩大内存, // 二、 使用专业工具进行内存分析;(jprofiler) /** GC 的 四种优化算法
2021-11-06 12:12:49 47
原创 C++程序设计笔记
C++程序设计笔记机器语言:由二进制代码构成汇编语言: 将机器指令映射为一些助记词解释程序:翻译一条语句,计算机执行一条编译程序:打包执行,计算机全部执行Java语言是半编译半解释的高级语言C++是直接翻译成目的语言0101 ^ 0000 = 01010101 ^ 1111 = 10100101 ^ 1111 ^ 1111 = 01010101 ^ 1111 ^ 0101 = 1111a = 0101 = 5, b = 1111 = 13a = a ^ b = 0101 ^ 11
2021-11-06 12:09:23 828
原创 ArrayList原码解读
ArrayList 的元素存储在其中的数组缓冲区。 ArrayList 的容量就是这个数组缓冲区的长度。 添加第一个元素时,任何带有 elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA 的空 ArrayList 都将扩展为 DEFAULT_CAPACITYpublic static void main(String[] args) { new ArrayList<>().add(1);}/** * The size of t
2021-11-06 12:08:07 94
原创 # 一看就懂的i++和++i详解
一看就懂的i++和++i详解我相信很多朋友可能之前已经百度过i++和++i的相关文章了,也做过不少的练习,觉得自己已经深刻掌握了它们之间的原理了,真的是这样的吗?来试试计算一下我下面提供的几道练习,你就会发现你又不会了!示例代码请先自己心算一下答案,然后找个本子记下来,然后再跟我后面的答案对比,看你能做对几道题,能做对两题以上的我喊你大哥!!示例1int i = 0;i = i++; System.out.println("i = " + i); 示例2int a = 2; int b
2021-11-06 12:06:20 303
原创 git常用操作
git常用操作全局用户配置C:\Users\Administrator\.gitconfig ( 是全局用户配置 )[filter "lfs"] clean = git-lfs clean -- %f smudge = git-lfs smudge -- %f process = git-lfs filter-process required = true[user] name = JUN-95 email = 1205450959@qq.com配置全局用户名git
2021-11-06 11:59:15 227
原创 最新方法!解决windows安装docker和centos冲突问题!
标题解决windows安装docker和centos冲突问题!最新方法!docker3.6版本,会有这个选项,开启即可。
2021-08-20 01:24:21 216
原创 详细注解,通俗易懂!Java编写八皇后问题
Java编写八皇后问题public class Recursion { // 皇后的数量 private int maxSize = 8; private int[] arr = new int[maxSize]; // 解法的数量 private static int count = 0; public static void main(String[] args) { Recursion queue8 = new Recursion
2021-08-10 02:35:16 142
原创 详细注解,通俗易懂!Java编写shell希尔排序算法(交换和移动法)
详细注解,通俗易懂!Java编写shell希尔排序算法(交换和移动法)1、交换法 public Integer[] shellSort(Integer[] arr) { for (int gap = (arr.length) / 2; gap > 0; gap /= 2) { // 这里不能gap=(arr.length-1) / 2, 因为如果原数组个数为2, 则无法进行排序 for (int i = gap; i < arr.length
2021-08-10 02:31:56 163
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人