
java
tangshuai96
探索者
展开
-
Socket客户端服务端收发对象
对象类代码import lombok.Data;import lombok.experimental.Accessors;import java.io.Serializable;@Data@Accessors(chain = true)public class Userinfo implements Serializable { private long id; private String username; private String password;原创 2022-04-23 21:43:02 · 392 阅读 · 0 评论 -
国密SM2非对称加密算法(对本地文件的加解密)代码展示
代码package com.example.demo.MIMAXUE.SM;import java.io.*;import java.math.BigInteger;import java.security.SecureRandom;import java.util.Arrays;import org.apache.commons.io.FileUtils;import org.bouncycastle.crypto.params.ECDomainParameters;import or原创 2022-04-07 11:30:16 · 2343 阅读 · 1 评论 -
国密SM4对称加密算法(对本地文件的加解密)代码展示
代码package com.example.demo.MIMAXUE.SM;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.regex.Matcher;import java.util.regex.Pattern;p原创 2022-04-07 11:22:50 · 4771 阅读 · 0 评论 -
java获取你的电脑硬件信息
Maven包包使用较新的版本,旧版本在amd或者win11会有参数不齐的bug<dependency> <groupId>com.github.oshi</groupId> <artifactId>oshi-core</artifactId> <version>5.8.1</version></dependency>具体代码imp原创 2022-04-02 15:54:21 · 2003 阅读 · 2 评论 -
countDownLatch
CountDownLatch所提供的功能是判断count计数不为0时则当前线程呈wait状态,也就是在屏蔽处等待实现等待的方法是await(),实现继续运行的是countDown()代码演示import java.util.concurrent.CountDownLatch;public class Service { private CountDownLatch down = new CountDownLatch(2); public void test(){ tr原创 2021-09-22 20:14:06 · 327 阅读 · 0 评论 -
高并发学习-seamphore
seamphorepackage com.example.demo.JUC.Semaphore;import java.util.concurrent.Semaphore;public class service { private Semaphore semaphore = new Semaphore(2); public void testMehtod(){ try { semaphore.acquire();原创 2021-09-21 21:13:45 · 147 阅读 · 0 评论 -
注解开发AOP
配置类@Configuration//声明当前类是一个配置类,相当于一个Spring的XML配置文件@EnableAspectJAutoProxy //表示开启AOP代理自动配置public class LogConfigation {}注解@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface LogAnnotation { String value() default "";原创 2021-06-09 10:30:05 · 96 阅读 · 0 评论 -
手写实现一个本地缓存
非并发的条件使用hashmap,并发的条件使用ConcurrentHashMap考虑过期和缓存淘汰过期策略常见定时删除设置键值的过期时间,创建一个定时时间。当到达过期时间后,事件处理器会执行删除过期键的操作。它的优点是可以及时的释放内存空间,缺点是需要开启多个延迟执行事件来处理清除任务,这样就会造成大量任务事件堆积,占用了很多系统资源。惰性删除不会主动删除过期键,而是在每次请求时才会判断此值是否过期,如果过期则删除键值,否则就返回正常值。它的优点是只会占用少量的系统资源,缺点是清除不够及原创 2021-05-28 16:21:53 · 688 阅读 · 0 评论 -
java对封装类的使用(student)
对封装类的使用申明类,执行构造方法 Student stu=new Student();添加成员变量的参数 stu.setName("钱*"); stu.setAge(18); stu.setMale(true);显示结果 System.out.println("学生姓名是:"+stu.getName()+",年龄为:"+stu.getAge()+",是男性吗?...原创 2019-09-19 09:11:43 · 641 阅读 · 0 评论 -
java标准封装类(student)
标准封装类成员变量(建议用private)以学生为例private String name;private int age;private boolean male;构造方法以及Getter/Setter方法实现(idea快捷键Alt+ins)无惨构造 public Student() { //this.name = name; System.out.printl...原创 2019-09-19 08:55:22 · 2512 阅读 · 0 评论 -
wireshark秘籍
wireshark秘籍基本使用捕捉事例下载地址过滤表达式过滤表达式参考网址首先说几个最常用的关键字,“eq” 和 “==”等同,可以使用 “and” 表示并且,“or”表示或者。“!" 和 "not” 都表示取反。一、针对wireshark最常用的自然是针对IP地址的过滤。其中有几种情况:(1)对源地址为192.168.0.1的包的过滤,即抓取源地址满足要求的包。表达式为:ip.src == 192.168.0.1(2)对目的地址为192.168.0.1的包的过滤,即抓取目的地址满足要原创 2021-01-19 19:04:16 · 405 阅读 · 1 评论 -
消息队列和延迟消息队列
应用场景1.商品秒杀短时间内出现爆发式的用户请求,如果不采取相关的措施,会导致服务器忙不过来,响应超时的问题,轻则会导致服务假死,重则会让服务器直接宕机。这个时候加上了消息队列,服务器接收到用户的所有请求后,先把这些请求全部写入到消息队列中再排队处理,这样就不会导致同时处理多个请求的情况;如果消息队列长度超过可以承载的最大数量,那么我们可以抛弃当前用户的请求,通知前台用户“页面出错啦,请重新刷新”等提示,这样就会有更好的交互体验。2.系统解耦使用了消息队列之后,我们可以把系统的业务功能模块化,实现原创 2020-12-28 20:32:40 · 1727 阅读 · 0 评论 -
本地缓存与分布式缓存-手动实现一个缓存系统
缓存是什么,有什么作用?缓存(Cache)是指将程序或系统中常用的数据对象存储在像内存这样特定的介质中,以避免在每次程序调用时,重新创建或组织数据所带来的性能损耗,从而提高了系统的整体运行速度。以目前的系统架构来说,用户的请求一般会先经过缓存系统,如果缓存中没有相关的数据,就会在其他系统中查询到相应的数据并保存在缓存中,最后返回给调用方。本地缓存程序级别的缓存组件,特点是本地缓存和应用程序会在运行同一个进程中,本地缓存的操作特别快,在同一个进程中不会有网络上的延迟和开销。本地缓存适用于单节点非集群原创 2020-12-18 21:17:05 · 570 阅读 · 1 评论 -
动态代理如何实现?JDK Proxy和 CGLib有什么区别
动态代理动态代理是程序在运行期间动态构建代理对象和动态调用代理方法的一种机制。在业务中使用动态代理,一般是为了给需要实现的方法添加预处理或者添加后续操作,但是不干预实现类的正常业务,把一些基本业务和主要的业务逻辑分离。我们一般所熟知的Spring的AOP原理就是基于动态代理实现的。动态代理的常用实现方式是反射。反射机制是指程序在运行期间可以访问、检测和修改其本身状态或行为的一种能力,使用反射我们可以调用任意一个类对象,以及类对象中包含的属性及方法。但动态代理不止有反射一种实现方式,例如,动态代理可以原创 2020-12-17 21:10:46 · 138 阅读 · 0 评论 -
深克隆浅克隆-JAVA
浅克隆把原型对象中成员变量为值类型的属性都复制给克隆对象把原型对象中成员变量为引用类型的引用地址也赋值给克隆对象即原型对象中如果有成员变量为引用对象则此引用对象的地址是共享给原型对象和克隆对象的示意图深克隆深克隆会将原型对象中所有类型,无论是值类型还是引用类型都复制一份给克隆对象java中实现克隆的代码实现的对象要实现Cloneable接口,并实现clone()import lombok.Data;public class CloneLearn { public stati原创 2020-12-17 16:45:40 · 143 阅读 · 0 评论 -
java中对锁的理解
模拟死锁代码:public class LockLearn { public static void main(String[] args) { deadlock(); } private static void deadlock() { Object lock1=new Object(); Object lock2=new Object(); //线程1 拥有 lock1 试图获取lock2原创 2020-12-17 14:26:56 · 246 阅读 · 0 评论 -
synchronized和ReentrantLock的实现原理
synchronized和ReentrantLock的实现原理JDK1.5之前用synchronized和volatile是共享对象的协调机制1.5之后加入ReentrantLock目的不是替代synchronized,而是在其不适用的情况下提供一种可以选择的高级功能synchronizedsynchronized属于独占式资源悲观锁,通过JVM隐式实现的,同一时刻只允许一个线程操作资源在 Java 中每个对象都隐式包含一个 monitor(监视器)对象,加锁的过程其实就是竞争 monitor 的原创 2020-12-15 20:14:08 · 299 阅读 · 0 评论 -
ThreadPoolExecutor-线程池知多少
ThreadPoolExecutor创建线程池的目的?线程池为了避免频繁的创建和销毁所带来的的性能消耗,而建立的一种池化技术,它是把已经创建的线程放入到池中。当有任务来临的时候可以重用已有的线程,无需等待创建的过程,这用有效的提高程序的响应速度。为什么用ThreadPoolExecutor创建而不是Executors线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的读者更加明确线程池的运行规则,规避资源耗尽的风险。Executors返原创 2020-12-14 20:11:29 · 149 阅读 · 0 评论 -
java线程的状态有哪些?
java线程的状态有哪些?如何工作的线程的状态有哪些6种状态(源码分析) public enum State { /** * Thread state for a thread which has not yet started. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 */ NEW, /** * Thread state for a run原创 2020-12-14 09:59:47 · 159 阅读 · 0 评论 -
String学习笔记
JAVA-StringString如何实现String内部是char数组重要构造方法String 为参数的构造方法char[] 为参数的构造方法StringBuffer为参数的构造方法StringBuilder 为参数的构造方法String字符串equals()重写了Object中equals方法, 先判断对比值是String类型源码 if(anObject instanceof String)判断参数是String类型之后,循环对比两个字符串中的每一个字符String字符串comp原创 2020-12-11 16:14:24 · 194 阅读 · 1 评论 -
HashMap底层原理实现
简述在jdk1.7之前,使用数组加链表的形式组成的1.8之后新增红黑树的组成结构,链表大于8且容量大于64的时候转为红黑树结构数组中的元素叫做hash桶组成结构图如下:每个hash桶中包含四个字段,hash,key,value,next为什么会加入红黑树?一旦链表过长,会严重影响HashMap的性能,红黑树具有快速增删改查的特点,可以有效解决链表过长时间操作比较慢的问题为什么加入红黑树而不选择AVL树(完全平衡二叉树)为什么HashMap使用红黑树而不使用AVL树-感谢Running-W原创 2020-12-06 15:47:06 · 177 阅读 · 1 评论 -
ArryList与LinkedList的区别-(自用)
ArrayListArrayList实质是一个封装好了的数组,但是是可变长度的。初始化arraylist的时候,长度为10.源码private static final int DEFAULT_CAPACITY = 10;add是默认加1public void add(int index, E element) { rangeCheckForAdd(index); ensureCapacityInternal(size + 1); // Increments原创 2020-12-05 18:02:14 · 807 阅读 · 1 评论 -
idea 插件 better-mybatis-generator 1.5.5 在 mysql8.0以上遇到的坑
下载插件,重启idea在Settings->Tools中找的Mybatis generator plugin设置如下图:一些选项含义:一个是dao package:generator还有dao postfix java类文件后缀 Mapperxml package xml文件存放路径:generatormodel folder: src.main/java 实体类包路径dao 同上 持久层接口xml原创 2020-10-19 21:26:57 · 1388 阅读 · 1 评论 -
springBoot04@value与@ConfigurationProperties
@ConfigurationProperties属性名匹配规则:自动注入配置文件对应的值与对象的属性一一对应spEl表达式不支持校验对lastname使用邮箱校验@Validated//校验使用,@configurationProperties比较用的public class Person { @Email//邮箱格式的校验方式 private String l...原创 2020-02-19 17:58:36 · 147 阅读 · 0 评论 -
SpringBoot03全局配置文件与指定配置文件
springboot全局配置文件@ConfigurationProperties上一章节已经介绍了用法这里就不再赘述了详情见:yaml全局配置文件为了更好的书写,我们使用properties文件作为配置文件相关的改动:person.lastname=张三person.age=18person.birth=2017/12/12person.maps.k1=v1person.ma...原创 2020-02-19 17:35:29 · 269 阅读 · 0 评论 -
SpringBoot02配置文件,yaml具体说明
SpringBoot配置文件1.介绍:SpringBoot使用一个全局的配置文件,配置文件名是固定的;application.propertiesapplication.yml配置文件的作用:修改SpringBoot自动配置的默认值SpringBoot在底层都给我们自动配置好了yaml以数据为中心的配置文件比json,xml更适合yaml:配置例子server:port:80...原创 2020-02-18 16:44:14 · 200 阅读 · 0 评论 -
SpringBoot01
编写第一个SpringBoot程序1.创建一个Maven项目具体参考:Maven介绍感谢分享!2.在pom.xml中配置对应的参数<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20...原创 2020-02-15 11:26:21 · 148 阅读 · 0 评论 -
Object IO Exercise
Object IO Exercise介绍:解决多个对象存储到文件中,从文件中取出多个对象分析:1.定义一个存储person类的集合的ArrayList2.往ArrayList中存储Person对象3.创建一个序列化流ObjectOutputStream对象4.使用ObjectOutputStream对象中的方法writeobject,对集合进行序列化5.创建一个反序列化Objec...原创 2020-02-13 19:34:08 · 125 阅读 · 0 评论 -
ObjectInputStream
ObjectInputStream介绍public class ObjectInputStream extends InputStreamObjectInputStream反序列化先前使用ObjectOutputStream编写的原始数据和对象。ObjectInputStream(InputStream in)创建从指定的InputStream读取的ObjectInputStream。...原创 2020-02-13 19:30:24 · 1491 阅读 · 0 评论 -
ObjectOutputStream
ObjectOutputStreampublic class ObjectOutputStream extends OutputStream将Java对象的原始数据类型和图形写入OutputStream。作用:将对象以流的方式写入到文件中保存构造方法:ObjectOutputStream(OutputStream out)创建一个写入指定的OutputStream的ObjectOutp...原创 2020-02-13 19:27:41 · 2017 阅读 · 0 评论 -
IO Exercise
IO Exercise1.转码:转换GBK编码的文本文件,转换为UTF-8编码的文本文件分析1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称GBK2.创建OutputStreamwriter对象,构造方法中传递字节输出流和指定的编码表名称UTF-83.使用InputStreamReader对象中的方法read读取文件4.使用OutputSt...原创 2020-02-13 19:21:19 · 127 阅读 · 0 评论 -
Properties
Properties介绍propertiespublic class Propertiesextends Hashtable<Object,Object> implements Map<k,v>Properties类表示一组持久的属性。 Properties可以保存到流中或从流中加载。properties集合是一个唯一和IO流相结合的集合可以使用proper...原创 2020-02-12 19:12:17 · 236 阅读 · 0 评论 -
BufferedOutputStream
BufferedOutputStream介绍继承父亲的成员方法java.io.OutputStream这个抽象类是表示字节输出流的所有类的超类。 输出流接收输出字节并将其发送到某个接收器。定义了一些子类共性的成员方法:1.public abstract void write(int b)throws IOException将指定的字节写入此输出流。 write的一般合同是将一个字节...原创 2020-02-12 19:07:15 · 2206 阅读 · 0 评论 -
BufferedInputStream
BufferedInputStream介绍继承自父类的成员变量方法:abstract int read()从输入流读取数据的下一个字节。int read(byte[] b)从输入流读取一些字节数,并将它们存储到缓冲区 bvoid close()关闭此输入流并释放与流相关联的任何系统资源。构造方法BufferedInputStream(InputStream in)创建一个 B...原创 2020-02-12 19:03:01 · 2653 阅读 · 0 评论 -
printStream
PrintStream介绍:public class PrintStream:打印流PrintStream为另一个输出流添加了功能,即能够方便地打印各种数据值的表示。特点:1.只负责数据的输出,不负责数据的读取2.与其他输出流不同, PrintStream从不抛出IOException ;3.有特有的方法:print,println构造方法:PrintStream(File f...原创 2020-02-12 18:46:15 · 585 阅读 · 0 评论 -
FileOutputStream
FileOutputStream介绍java.io.OutputStream这个抽象类是表示字节输出流的所有类的超类。 输出流接收输出字节并将其发送到某个接收器。子类:FileOutputStream:文件字节输出流作用:把内存中的数据写入到硬盘的文件中构造方法:FileOutputStream(String name)创建文件输出流以指定的名称写入文件FileOutputStr...原创 2020-02-12 18:27:09 · 1547 阅读 · 0 评论 -
FileInputStream及FileReader
FileInputStream及Filereader一些方法:abstract int read()从输入流读取数据的下一个字节。int read(byte[] b)从输入流读取一些字节数,并将它们存储到缓冲区 bvoid close()关闭此输入流并释放与流相关联的任何系统资源。public class FileInputStream extends InputStreamA F...原创 2020-02-12 16:52:32 · 1046 阅读 · 0 评论 -
常用的函数式接口
常用的函数式接口1.Comparator如果一个方法的返回值是一个函数式接口,那么就可以直接返回一个lambda表达式。当需要通过一个方法来获取一个java.util.Compartor接口类型的对象作为排序器时,就可以调该方法获取public class Demo03Comparator { public static Comparator<String > getC...原创 2020-02-11 19:34:41 · 346 阅读 · 0 评论 -
函数式接口
函数式接口介绍:函数式接口:有且只有一个抽象方法的接口,称之为函数式接口当然接口中可以包含其他的 方法(默认,静态,私有)@FunctionalInterface注解作用:可以检测接口是否是一个函数式接口是:编译成功否,编译失败(接口中没有抽象方法,或者抽象方法有多个)定义一个函数式接口@FunctionalInterfacepublic interface Demo01Fun...原创 2020-02-11 17:01:39 · 153 阅读 · 0 评论 -
lambda的延迟加载技术
lambda的延迟加载技术普通代码拼接字符串代码举例public class Demo01Logger { public static void show(int i,String message) { if (i==1) System.out.println(message); } public static void ma...原创 2020-02-11 16:54:39 · 954 阅读 · 5 评论