java基础知识
文章平均质量分 81
smilezmh
这个作者很懒,什么都没留下…
展开
-
程序基本功:排序算法经典算法
快速排序:import org.junit.Assert;import org.junit.Test;import java.util.Arrays;public class Sort { int[] initNums = {2, 45, 23, 11, 45, 3, 88, 19, 55, 109, 1998, 1, 26, 46, 67, 99}; @Test public void getFinalNum() { testAlgorithm(ini原创 2021-03-23 14:00:29 · 185 阅读 · 0 评论 -
数据库
阿里规范中有关数据库索引的规定:【强制】超过三个表禁止 join。需要 join 的字段,数据类型保持绝对一致;多表关联查询时, 保证被关联的字段需要有索引。说明:即使双表 join 也要注意表索引、SQL 性能。 【强制】业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。说明:不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,但提高查找速度是明显的;另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生。【推荐】如果有order原创 2021-01-14 15:47:38 · 211 阅读 · 0 评论 -
字节数组和基本类型转换
基础知识boolean 一位byte 8位 一个字节short char 2个字节int float 4个字节double long 8字节java是unicode编码,一个char可以占两个bai字节,可以存储一du个汉字。一个String,要zhi看有几个字母或者dao几个汉字,一个英文字母就是一个字节,一个汉字就是两个字节,以此类推计算。带符号按位左移 << 带符号右移>> 不带符号右移 >>>1.内存中的位运算,都会先转换成int,4个字节原创 2020-12-22 16:13:45 · 2177 阅读 · 0 评论 -
运维
8.0以后的mqsqlCREATE USER 'root'@'%' IDENTIFIED BY '你的密码'; GRANT ALL ON *.* TO 'root'@'%'; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';FLUSH PRIVILEGES;原创 2020-12-15 11:39:44 · 112 阅读 · 0 评论 -
Netty
一个Chennel信道包括一个pepeline管道。可以有多个ChannelHandlerContext信道处理者上下文,成员变量包含ChannelHandler信道处理者 ,并实现了ChannelInboundInvoker(入口信道调用者),看以下方法public interface ChannelInboundInvoker { /** * A {@link Channel} was registered to its {@link EventLoop}. *原创 2020-12-04 14:21:19 · 149 阅读 · 0 评论 -
ReferenceQueue与Reference
Reference的enqueue()方法 public boolean enqueue() { return this.queue.enqueue(this); }ReferenceQueue 的enqueue方法 boolean enqueue(Reference<? extends T> r) { /* Called only by Reference class */ synchronized (lock) {原创 2020-11-16 10:53:07 · 373 阅读 · 0 评论 -
完美解决FastJson出现 com.alibaba.fastjson.JSONObject cannot be cast to model的bug
/** * 将map转list * * @param maps map * @param clazz clazz * @param <T> T * @return list * @throws NoSuchMethodException * @throws IllegalAccessException * @throws InvocationTargetException * @throw.原创 2020-11-12 16:41:45 · 2619 阅读 · 3 评论 -
自定义工具类:数据统计处理四分位数据,日期工具类
public class Tools { private static final double oneDayLong = 24 * 60 * 60 * 1000;// 一天时间 private static final double oneWeekLong = 7 * oneDayLong;// 一周的时间 private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); p原创 2020-11-07 11:10:06 · 120 阅读 · 0 评论 -
Enum类型
package cmtech.soft.biz.utils.model;import cmtech.soft.biz.utils.MyStrTool;/** * 工单状态 */public enum WorkOrderStatus { CREATED("created", "未开始生产"), RUNNING("running", "生产开始"), PAUSED("paused", "生产暂停"), ENDED("ended", "生产结束"); pri原创 2020-09-25 13:52:09 · 121 阅读 · 0 评论 -
Diboot mybatis plus辅助工具
diboot mybatis plus辅助工具原创 2020-09-24 11:37:24 · 410 阅读 · 0 评论 -
java 闭包与lambda
https://developer.ibm.com/zh/articles/j-java8idioms10/[闭包]转载 2020-09-23 14:34:00 · 164 阅读 · 0 评论 -
匿名内部类(转)
匿名内部类转载 2020-09-18 16:02:42 · 84 阅读 · 0 评论 -
mqtt的使用 broker:EMQ
MqttConfig类package cm.soft.collect.config;import cm.soft.collect.biz.CollectBiz;import cm.soft.collect.service.OnMqttCallBack;import org.eclipse.paho.client.mqttv3.*;import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;import org.springfr原创 2020-09-11 13:47:15 · 1178 阅读 · 0 评论 -
线程工具类
自定义线程package cm.soft.collect.threadUtil;import java.util.Queue;import java.util.concurrent.LinkedBlockingDeque;import java.util.concurrent.locks.LockSupport;/** * 仿照线程池的形式封装一个任务队列存放没有完成的老任务 */public class CustomThread extends Thread { private原创 2020-09-11 13:44:12 · 162 阅读 · 0 评论 -
字符串工具类
package cmtech.soft.equipment.utils;import cmtech.soft.equipment.utils.Aop.InterceptAction;import com.bestvike.linq.Linq;import org.joda.time.DateTime;import java.text.SimpleDateFormat;import java.util.*;public class MyStrTool { /** * 根据原创 2020-09-11 13:39:24 · 198 阅读 · 0 评论 -
集合工具类
package cmtech.soft.equipment.utils;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;import java.util.function.Function;import java.util.stream.Collectors;/** * 集合工具类 * * @param <T> 范型 */pub原创 2020-09-11 13:38:06 · 99 阅读 · 0 评论 -
函数式引用
所谓方法引用,是指如果某个方法签名和接口恰好一致,就可以直接传入方法引用。方法签名只看参数类型和返回类型,不看方法名称,也不看类的继承关系。不论方法是静态方法还是实例方法。FunctionalInterface允许传入:接口的实现类(传统写法,代码较繁琐);Lambda表达式(只需列出参数名,由编译器推断类型);符合方法签名的静态方法;符合方法签名的实例方法(实例类型被看做第一个参数类型);符合方法签名的构造方法(实例类型被看做返回类型)。FunctionalInterface不强制继承关系原创 2020-09-10 14:41:20 · 317 阅读 · 0 评论 -
值类型和引用类型
通过查看源码forEach的源码是增强for说明增强for不是对源数据的修改,是对原来集合的拷贝。package com.example.test;import java.util.ArrayList;import java.util.List;import java.util.Optional;public class TestOptional { public static void main(String[] args) { List<Student>原创 2020-09-09 14:27:27 · 157 阅读 · 0 评论 -
java的回调
使用Mqtt的时候用到了回调,消息到达和连接上时触发回调函数的执行。java的回调类似于C#中的委托,事件。和函数接口,函数式接口(@FunctionalService),lambda紧密相关。一些常用的设计模式如发布订阅模式都使用了委托。一个含有委托类的类负责委托中函数的触发时机,委托类的函数的具体执行,放到实现委托类接口的类中实现。这样就减少了耦合性,灵活性,可以实现更复杂的功能。下边自己实现一个智能温控计的功能,使用回调实现,到达报警温度时,停止加热并报警的功能。先上回调类,用一个函数式接口实原创 2020-08-29 13:37:16 · 226 阅读 · 0 评论 -
分布式锁和分布式事务
分布式锁入门1分布式锁入门2seata分布式事务mybatis plus集成seata分布式事务转载 2020-08-29 08:37:45 · 182 阅读 · 0 评论 -
AQS:AbstractQueuedSynchronizer(队列同步器)
分析下边两个比较绕的方法: /** * Inserts node into queue, initializing if necessary. See picture above. * @param node the node to insert * @return node's predecessor */ private Node enq(final Node node) { for (;;) { Node原创 2020-08-19 20:59:35 · 334 阅读 · 0 评论 -
转:LockSupport 及Unsafe
concurrent包是基于AQS (AbstractQueuedSynchronizer)框架的,AQS框架借助于两个类:Unsafe(提供CAS操作) LockSupport(提供park/unpark操作) 因此,LockSupport非常重要。park函数是将当前调用Thread阻塞,而unpark函数则是将指定线程Thread唤醒。两个重点(1)操作对象Thread归根结底,LockSupport.park()和LockSupport.unpark(Thread thread)调用的.转载 2020-08-18 13:35:15 · 200 阅读 · 0 评论 -
java retry的作用:小实验
package com.example.test;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class TestApplicati原创 2020-08-14 14:29:57 · 163 阅读 · 0 评论 -
Java设计模式:代理模式
使用代理模式来实现数据库连接池,代码部分转自廖雪峰的官方网站代理模式我的理解是:代理类继承了被代理类。存储了真正的被代理类对象的访问钥匙或途径,封装在代理类的变量中,代理类可以有自己的功能,如鉴权等一些操作,等到真正需要用时才用钥匙获取被代理对象。定义抽象类(可以不实现接口中方法)执行被代理类中对应方法可以作为访问的钥匙,此方法在代理类中没有,于是去找父类被代理类中的此方法,这个方法引用又需要到代理类中获取,先到父类,又到子类,用了继承和多态两个特性...原创 2020-08-11 12:50:59 · 138 阅读 · 0 评论 -
设计模式:单例和抽象工厂
单例模式:全局只允许有一个实例对象,可以有饿汉和懒汉式抽象工厂:工厂和产品有多个,产品接口可以派生出多个产品,根据不同产品的组合可以派生出多个工厂。只关心想要的产品,不用关心工厂创建和产品生产的过程,将这个过程隐藏在程序内部。工厂方法:常用静态方法来实现。自己写的一个将工厂模式和单例模式结合起来的实例,工厂是单例,产品的获取用工厂模式。定义产品接口:可以吃的接口package com.example.designModel.factory;public interface IEat {原创 2020-08-10 17:08:27 · 320 阅读 · 0 评论 -
转:数据库的乐观锁和悲观锁
悲观锁当我们要对一个数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发。定义:这种借助数据库锁机制在修改数据之前先锁定,再修改的方式被称之为悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)。悲观锁认为并发下同一条数据被修改的可能性比较大。处理加锁的机制会让数据库并发效率降低,浪费CPU、服务器资源(一个事务如果锁定了某行数据,其他事务就必须等待该事务处理完才可以处理那行数据。),还有增转载 2020-08-07 13:45:15 · 279 阅读 · 1 评论 -
转:Spring循环依赖及解决方式
https://blog.csdn.net/YeaiqFeng/article/details/89057194转载 2020-08-07 12:28:38 · 135 阅读 · 0 评论 -
Spring Boot的多线程
Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程。使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor。而实际开发中任务一般是非阻碍的,即异步的,所以我们要在配置类中通过@EnableAsync开启对异步任务的支持,并通过在实际执行的Bean的方法中使用@Async注解声明其是一个异步任务。此外,还提供一种Java的实现方式,多种方式去尝试如何去实现多线程。一、基于Spring注解定义配置类import java.util.con原创 2020-08-06 14:55:48 · 305 阅读 · 0 评论 -
JVM内存模型、对象结构、JVM性能优化
jvm内存模型模型图各个内存块存放内容JVM内存结构主要有三大块:堆(heap space)、方法区(method area)、本地区(native area)。堆内存堆内存(heap space)存放所有线程共享的对象和数组。在虚拟机启动时创建,Java堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC堆”。GC回收的策略是按代回收。对象在实例化后的整个运行周期内,都被存放在堆内存中。堆内存又被划分成不同的部分:是JVM中最大的一块由年轻代(Young Generation S原创 2020-08-04 14:08:27 · 393 阅读 · 0 评论 -
零散知识点
1.如果不想通过构造方法产生对象,那么可以将构造方法声明为private2.如果父类只有有参构造方法,那么子类必须也有这个有参构造方法,因为要构造出子类必须先构造出父类。原创 2020-07-29 17:18:29 · 114 阅读 · 0 评论 -
java设计模式:发布订阅模式(观察者模式)
定义一个产品package com.example.observer;public class Product { private String name; private double price; public Product(String name, double price) { this.name = name; this.price = price; } public String getName() { return name; } public dou原创 2020-07-29 16:36:14 · 648 阅读 · 0 评论 -
java多线程:Future模式
Request-Per-Task每个请求一个任务可以实现异步任务,但是不能获取任务的结果,Future模式可以获取异步任务的结果一个Data的接口package com.FutureExample;public interface Data { public abstract String getContent();}RealData实现Data,构造方法延时产生真正数据,包含获取真正的数据getContent方法package com.FutureExample;publ.原创 2020-07-28 09:16:53 · 819 阅读 · 0 评论 -
java多线程:每个请求(任务)一个线程 模式Thread-Per-Task(request)和线程池模式
一次请求分配给一个线程public class ThreadAssign{ public void assign(Object... obj){ new Thread(){ public void run(){ ... }.start(); } }}原创 2020-07-15 21:50:32 · 1025 阅读 · 0 评论 -
java多线程:Readers-Write模式读写分离
多个线程读不会冲突;多个线程读的时候,别的线程不能写;一个线程写的时候,其他线程不能读使用public class Data{ private final ReadWriteLock lock=new ReadWriteLock(); public void read(){ lock.readLock(); try{ // ... }finally{ lock.readUnlock(); } } public void write(){ lock.w.原创 2020-07-15 21:39:47 · 124 阅读 · 0 评论 -
java多线程:生产消费模式(缓冲区Chennel)
缓冲区package com.example.ConsumerAndProducer;public class ChannelCake { private final String[] buffer; private int putPos;// 放置的位置 private int takePos;// 拿走的位置 private int count;// 缓冲区放置实时个数 public ChannelCake(int maxCount){ t原创 2020-07-15 20:33:07 · 571 阅读 · 0 评论 -
java多线程:Balk(if return)模式
除了守卫暂停模式(while),守护条件的模式,一种是Balk模式 Balk模式:模拟服务器自动保存文件,用户修改同一个文件,如果服务器判断文件没有被修改,就不执行保存。定义被保护对象:向文件修改并保存数据,changed被synchronized保护表示文件状态的改变,用if来判断守护条件,如果文件没有被修改 changed=false那么就直接退出,即balk的含义package com.example.Balking;import java.io.FileWriter;import j原创 2020-07-07 10:46:57 · 251 阅读 · 0 评论 -
java多线程示例:守护暂停(wait notify while)模式
Immutable请求package com.example.GuardSuspension;/** * Immutable类 */public class Request { private final String name; public Request(String name){ this.name=name; } public String toString(){ return "[Request"+name+"]";原创 2020-07-06 21:08:47 · 202 阅读 · 0 评论 -
字符串的不可变
package com.example.test;public class TestString { private static String s="123"; private static final String sFinal="123"; private static StringBuffer stringBuffer=new StringBuffer("23"); public static void main(String[] args){原创 2020-07-02 13:36:46 · 2087 阅读 · 0 评论 -
java多线程示例:Arraylist的线程安全实现方式Collections.synchronizedList和new CopyOnWriteArrayList
package com.example.test;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.concurrent.CopyOnWriteArrayList;public class TestArrayListSafe { public static void main(String args[]){// List<I原创 2020-07-02 09:43:12 · 375 阅读 · 0 评论 -
java多线程:信号量(Semaphere)使用示例和Immutable不可变类
共享信号资源package com.example.BankExample;import java.util.Random;import java.util.concurrent.Semaphore;public class SharedResource { private final Semaphore semaphore; private final int permits; private final static Random rndom=new Random(3原创 2020-07-01 15:31:59 · 179 阅读 · 0 评论