自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构常见 算法

【代码】数据结构常见 算法。

2022-11-28 11:28:39 186 1

原创 springboot使用自定义注解

(自定义注解用途很多,这里针对业务使用的是拦截器和方法参数解析器来袭实现用自定义注解为属性赋值的作用。)使用自定义注解首先需要了解三个注解:@Target、@Documented、@Retention@Target:注解的作用目标@Target(ElementType.TYPE)——接口、类、枚举、注解@Target(ElementType.FIELD)——字段、枚举的常量@Target(ElementType.METHOD)——方法@Target(ElementType.PARAMETER)—

2021-12-13 15:36:55 1037

原创 #Jenkins

JenkinsJenkins是一个开源的、提供友好操作界面的持续集成(CI)工具CI/CD是什么?**CI(Continuous integration,持续集成)**持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。**CD(Continuous Delivery, 持续交付)**是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。如果代码没有问题,可以继续手动部署到生产环境。文档步骤所涉及

2021-10-29 13:29:17 357 1

原创 kafka部署安装和原理加强

安装官网下载kafka安装包#上传:rz#解压:tar -zxvf 包名#在2.几之后包内是已经编译完成的,直接解压。bin下的为启动,config中为配置文件启动zookeeper#直接启动zookeeper,加-daemon参数,可以在后台启动Zookeeper,输出的信息在保存在执行目录的logs/zookeeper.out文件中。/bin/zookeeper-server-start.sh -daemon config/zookeeper.properties注意:此处zo

2021-09-17 09:50:08 391 1

原创 linux安装部署nginx

##############################################################################需要gcc编译环境,因为nginx由c语言进行编写#yum install gcc-c++#需要安装pcre库,PCRE库支持正则表达式,Nginx的的HTTP模块需要使用PCRE解析正则表达式#yum install -y pcre*#需要安装opsenssl#yum install -y openssl*#一步准备,安装好需要的库yu

2021-08-31 10:08:58 131 1

原创 随机数生成工具类(主要包括生成随机经纬度和随机生成固定范围内的时间戳)

/* 随机生成经纬度。 */public class RandomUtils { public static String randomLonLat(double minLon,double maxLon,double minLat,double maxLat,String type){ Random random = new Random(); BigDecimal bigDecimal = new BigDecimal(Math.random()*(maxLo

2021-03-23 12:00:35 943 1

原创 时间戳工具类

public class TimeStampUtil { //字符串时间转换为Unix时间戳 public static long dateToStamp(String year){ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy"); Date date; try { date = simpleDateFormat.parse(year);

2021-03-23 11:45:11 144

原创 设置list均分成n个list,主要通过偏移量来实现

在做一些简单的浮点数类型的想起来在对浮点数进行小数点后位数约束,在这里做一个简单的总结。首先,比如说在进行简单的成绩运算,钱财运算我们可能会用到一些对小数点后精确到多少位float a = 95.0f;String str = String.format("%.2f", a);System.out.println(str);//输出结果为:95.00...

2021-03-23 11:44:28 108

原创 HashMap线程不安全

HashMap本身并不能保证线程安全,在1.8之前,采用数组+链表的形式进行保存,1.8之后修改了存储方式,加入了分段锁技术和红黑树,并且避免了并发环境下循环链表和数据丢失的问题,但是依旧会导致数据覆盖的问题。HashMap并发环境中主要有三个问题在不同版本中,1.造成环状链表;2.数据丢失;3.数据覆盖问题。在1.8之前HashMap,出现问题主要是出现在扩容机制中(在网上能直接搜到),他出现的原因主要是在transfer函数中://一直用的是1.8,但是学习先知道源头,才能了解的更深void

2021-03-12 19:34:37 362 2

原创 积累的相关注解

public class TimeStampUtil { //字符串时间转换为Unix时间戳 public static long dateToStamp(String year){ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy"); Date date; try { date = simpleDateFormat.parse(year);

2021-03-12 10:35:37 98

原创 GZIP工具类

public class GZIPUtils { public static final String GZIP_ENCODE_UTF_8 = "UTF-8"; public static final String GZIP_ENCODE_ISO_8859_1 = "ISO-8859-1"; /** * 字符串压缩为GZIP字节数组 * @param str * @return */ public static byte[] comp

2021-03-12 10:34:40 182

原创 ==和equal的区别

==:当比较数据类型为数值类型的时候,比较的是值;当被比较对象为引用传递的时候,比较的是地址值equals:比较的是指向的对象的值如果使用的类对equals方法进行重写的话,使用重写过后的方法。比如String public boolean equals(Object anObject) { //判断是否地址值相等 if (this == anObject) { return true; } //判断内容是否相等

2021-03-06 15:46:16 133

原创 代理模式详解(含动态代理)

在很多框架中,代理模式使用的比较多,在学习mybatis源码过程中大量用到代理模式。今天复习一下几种代理模式:静态代理和动态代理代理模式就相当于一个中介,比如房产中介,婚庆公司,它本身并没有实现房产,但是他代理了房产。优点:1.具有高扩展性(因为中间插入了中间层,可以对原有功能进行扩展)2.职责清晰。缺点:由于增加了中间层,可能导致处理效率变慢第一种情况:静态代理package com.study.mybatis;public class ProxyDemo { public st

2021-01-20 19:36:24 165 1

原创 踩坑

2021/1/17Integer问题,所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较在学到CAS时,验证ABA问题,使用包装类Integer,使用的时候忘记规范,加深印象:Integer范围为-128~127,在超出范围的值会在堆上新声明对象,不会堆以前的对象复用,但是compareAndSet()源码使用 == 进行比较的,会造成由于地址值不同而造成赋值失败的情况。阿里巴巴开发手册中这样描述:【强制】所有的相同类型的包装类对象之间值的比较,全部使用 equals 方

2021-01-17 12:58:06 208

原创 单例模式详解

今天整理一下单例模式。单例模式应该是大学课程中,最先接触的设计模式,主要目的是保证生产出来的是一个实例。需要注意三点:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。第一种情况:饿汉式/** 饿汉式在不管调没调用方法,都会在类加载的时候事先声明一个对象,是线程安全的,* 因为每次在类加载的时候对其进行声明,但是会造成资源浪费。*///饿汉式public class SingleHungry { private stati

2021-01-16 16:23:57 210 5

原创 读写锁ReadWriteLock

读可以多条线程同时读,写的时候只能有一个线程去写public interface ReadWriteLockA ReadWriteLock维护一对关联的locks ,一个用于只读操作,一个用于写入。read lock可以由多个阅读器线程同时进行,只要没有作者。write lock是独家的。所有ReadWriteLock实现必须保证的存储器同步效应writeLock操作(如在指定Lock接口)也保持相对于所述相关联的readLock 。 也就是说,一个线程成功获取读锁定将会看到在之前发布的写锁定所

2021-01-08 18:38:30 157

原创 JUC三大常用辅助类

CountDownLatch(减法计数器)API文档public class CountDownLatchextends Object允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。A CountDownLatch用给定的计数初始化。 await方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await 调用立即返回。 这是一个一次性的现象 - 计数无法重置。 如果您需要重置计数的版本,请考虑使用Cyc

2021-01-08 18:36:17 115

原创 Callable接口的使用和介绍

Callablepublic interface Callable<V>返回结果并可能引发异常的任务。 实现者定义一个没有参数的单一方法,称为call 。 Callable接口类似于Runnable ,因为它们都是为其实例可能由另一个线程执行的类设计的。 然而,A Runnable不返回结果,也不能抛出被检查的异常。 该Executors类包含的实用方法,从其他普通形式转换为Callable类。 1.有返回值2.可以抛出异常3.方法不同,call()方法因为Callable不能

2021-01-07 15:29:32 522

原创 二分查找算法

二分查找算法,是一种基础算法。在做力扣第4题,需要用到二分查找,于是进行回顾和巩固。二分查找,有个前提,数组必须为有序,每次找出数组中间下标的元素与目标元素进行比较,若arr[mid]<target,证明目标元素只会出现在右半部分;反之,出现在左半部分。不断重复操作,直到找出目标元素的下标。这里,我有两种写法,一种是普通写法,一种运用递归,附上代码:public class BinarySearch { public static void main(String[] args) { in

2021-01-07 13:08:56 101

原创 JUC下的Condition

Condition下的await()和signal()与传统Synchronized的wait()和notify()有不同,Condition可以进行精准唤醒public class PCLockDemo2 { public static void main(String[] args) { Resource r = new Resource(); new Thread(()->{ for (int i = 0; i < 20;

2021-01-05 21:51:37 118

原创 Lock锁的生产者和消费者

Synchronized版的生产者消费者public class PCLock { public static void main(String[] args) { Container2 c = new Container2(); new Producer2(c).start(); new Customer2(c).start(); }}class Producer2 extends Thread{ Container2 con

2021-01-05 21:07:53 145

原创 线程的简单回顾

线程的三种创建方式1.继承Thread类;2.实现Runnable接口;3.实现Callable接口。LockJDK5.0出来的,Java提供了更加强大的线程同步机制–通过显示定义同步锁对象来实现同步。同步锁使用Lock对象充当java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象。ReentrantLock类实现了Lock,他拥有

2021-01-05 15:00:56 49

原创 生产者消费者

需要三个对象:生产者,消费者,以及容器作用:解耦法一:管程法public class TestPC { public static void main(String[] args) { SynContainer c = new SynContainer(); new Producer(c).start(); new Customer(c).start(); }}//生产者class Producer extends Thread{ SynContainer container;

2021-01-04 23:54:10 109

原创 力扣19

删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。解题思路:借助指针思想,假定给出一个单链链表,传入需要找出的倒数第n个数字,第1步,先让指针p2向后移n位,第2步,移动完之后需要考虑特殊情况,假设链表只有一个数字,满足条件,删除1个。链表变为空,所以

2021-01-03 23:55:14 78

原创 2020年秋招java

获取Class对象的四种方式:​ 1.知道具体类的情况​ 具体类.class2.通过class.forName(“传入具体的类的路径获取”)​ 3.通过对象实例instance.getclass()获取4通过类加载器xxxClassLoder.loadClass()传入路径获取synchronized和lock的区别:1.Synchronized是内置的java关键字,Lock是一个类。2.Synchronized无法判断所得状态,Lock可以判断所得状态。3.Synchroni

2021-01-03 23:17:07 102

原创 SpringMVC配置

web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-

2021-01-03 21:50:14 57

原创 json返回前端的乱码问题

在学习json解析的过程中,使用springmvc在前端返回一个jackson对象映射器将对象转换为json字符串时,引起乱码问题;解决方法有两种:一:使用 @RequestMapping(value="/*",produces = “application/json;charset = utf-8” )二:使用配置 <mvc:annotation-driven> <mvc:message-converters register-defaults="true"&

2021-01-03 21:37:19 645

原创 归并排序Java代码实现

归并排序归并排序,采用分而治之的策略,对一个数组比如{9,5,6}在进行排序时,对数组进行“分”,如下图所示:找出数组的中间下标:mid = (l+r)/2;依次对数组左半部分,右半部分进行“分”操作,直到划分成单个的数,在这里可以用到递归算法;在归并排序中,最重要的部分就是“治”操作,只要理解递归,理顺怎么去的,怎么回,在“治”操作中就比较容易理解。直接上代码:public class Test { public static void main(String[] args) {

2021-01-03 12:09:19 237

原创 力扣第三题,无重复字符的最长子串

本道题我知道的有两种算法,在没有看评论区之前,只知道暴力输出,找出所有的子串,去除有重复的子串,找出最大的子串。在学习别人的思想,观看了官方答案后,学会了滑动窗口的思想,话不多说直接上代码:/* * 力扣第三题: * 无重复字符的最长子串 * */public class SumTowNumber { public static void main(String[] args) { String s = "aaaaaaaa"; int res = 0; for(int

2021-01-02 11:57:44 135

原创 测试druid中的监控功能

在yml配置文件中需要先要求使用Druid数据源spring: datasource: username: root password: admin url: jdbc:mysql://localhost:3306/estore?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 driver-class-name: com.mysql.cj.jdbc.Driver #在原有基础上

2020-12-28 17:58:10 321

原创 服务器内部跳转和外部跳转

在Servlet中的跳转方式主要有两种:1.内部跳转/请求转发request.getRequestDispatcher("path").forword(request,response);在这种方法中,当Servlet接收到请求后并没有对客户端浏览器返回响应而是将此请求进行转发到服务器的别的组件,直至服务器的某一个组件返回响应。值得注意的是在该转发过程中客户端只会提供一次请求,在服务器进行响应之前,每次组件的转发都与用户提交的请求报文一样,直到得到响应。2.重定向跳转response.sendR

2020-11-24 00:12:19 745

原创 SpringBoot补充

SpringBoot中的配置文件优先级:​ 项目根目录下>项目根目录下的config下>classpath下config下>classpath​ 我们默认使用的是最低的,很容易被覆盖。

2020-11-10 21:51:12 40

原创 Redis中的TTL

Redis的ttl是在实战中的一个常用的命令,在学redis的过程中单纯的用过,没有更加深入的了解。下面附上Redis的官方文档:TTL key起始版本:1.0.0时间复杂度:O(1)返回key剩余的过期时间。 这种反射能力允许Redis客户端检查指定key在数据集里面剩余的有效期。在Redis 2.6和之前版本,如果key不存在或者已过期时返回-1。从Redis2.8开始,错误返回值的结果有如下改变:如果key不存在或者已过期,返回 -2如果key存在并且没有设置过期时间(永久有

2020-11-06 12:10:58 14317

原创 @Qualifier注解的使用场景

Spring @Qualifier在学习Redis的过程中,使用SpringBoot整合Redis的过程中,碰见的问题,这个在Spring系列中很常见,在注入多个相同类型的bean时,@Autowired只会默认按照类型进行匹配,框架可能NoUniqueBeanDefinitionException异常。可能会有这样一种情况,当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪

2020-10-30 22:44:49 542

原创 二叉树的最大深度详解!!!!

在向大佬的路上迈进的路上,我看见了一个简单到不能再简单的题emmmm,题目如下: 求给定二叉树的最大深度,最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。。(看代码注解)//小兄弟先自己做了做,因为太长时间没有做过编程题了...见谅/* * 在做二叉树之前,你需要熟悉二叉树的结构,了解二叉树的基本构造,这里 * 就不过多解释了。前段时间刚好用过递归,首先想到的就是递归,而用到递 * 归首先应该定义一个出口,毫无疑问,当当前节点为null时,递归结束。*/import j

2020-10-25 23:55:36 818 1

原创 ^异或

/* * 现在有一个整数类型的数组, * 数组中素只有一个元素只出现一次, * 其余的元素都出现两次。 * 要求:线性复杂度,不使用额外的内存 * [1,0,1] * 对题目进行分析:1.需要每次从拿出一个数字,跟原数组进行比较,但是需要用到循环嵌套,时间复杂度为o(n^2),不符合题目要求 。 * 在经过长时间的思考之后,我发现,对不起我是逗逼,然后仔细观看了打神们的解题思路(我现在还是很菜的emmmm) * 因为需要线性复杂度(理解为o(n)) * 所以需要借用^ :异或运算符,相同为

2020-10-21 16:26:24 187

原创 ResultSet随笔

ResultSet在java.sql包下,用来表示数据库中的结果集,通过执行数据库的查询语句生成。例如:ResultSet rs = st.executeQuery();ResultSet对象具有指向其当前数据行的光标,在最初指向第一行数据之前,用next()指向下一行,在下一行没有元素时返回为false,可以用来在数据库的登陆,判断结果集中是否有值:if(!rs.next()){ //结果集中没有值,数据库中不存在,登陆失败}值得注意的是:在javaAPI1.6文档中默认的ResultS

2020-09-08 20:19:11 196

原创 选择、冒泡、插入详解

选择排序,即为每次从一个数组中选出最大的数值进行排序,以升序为例,每次循环需要找出数组中最大的数进行排序。在这里需要注意,要实现选择排序,需要用到循环嵌套,每次内循环遍历未排序的数组,每进行一次外循环需要排好一个数据。核心代码如下://每进行一次外循环需要排好一个数据for(int i = 0;i<array.length;i++) { int max =0;//用于记录最大值的下标。 //内层循环执行一趟代表判断了一个数字是否超过最大值 //每运行一次外循环,界限会发生变化。j

2020-07-06 20:50:56 334

空空如也

空空如也

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

TA关注的人

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