自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 学习杂谈1

多线程编程中一般线程的个数都大于CPU核心的个数,而一个CPU核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU采取的策略是为每个线程分配时间片轮询的形式。当一个线程的时间片用完的时候就会重新处于就绪状态让给其他线程使用,这个过程就属于一次上下文切换。用大白话来说:当前的任务在执行完CPU时间片切换到另一个任务之前会先保存自己的状态,以便下次再切换回这个任务时,可以再加载这个任务的状态。使用Linux当做服务器的有点有一点就是因为它切换上下文和模式切换所需要的时间很短。

2023-10-22 01:27:09 162

原创 入门ElasticSearch :为什么选择ES作为搜索引擎?

随着数据量的不断增长,搜索和分析大规模数据集变得越来越重要。传统数据库在面对这种需求时往往表现不佳,这时候就需要一种专门用于搜索和分析的引擎。ElasticSearch (简称ES)就是这样一款强大的搜索引擎,它具有许多优势,使得它成为许多企业和开发者的首选。是一个的的引擎在我看来ES最强的其实是它的模糊搜索功能。那有的人就会问了:我数据库一样可以实现模糊搜索啊?例如这个sql就可以查出姓名中带有宁正两字的学生的确,这这样做是可以模糊搜索的,但是。

2023-09-02 16:37:53 2524

原创 Java中Timer的使用

说一下是因为什么会出现这些问题,看源代码可以知道。

2023-07-30 21:33:07 420

原创 初识定时任务

我们在开发系统的时候,常常会遇到需要定时的去执行一些业务,例如:定时备份数据库、定时生成报告、定时发送通知、定时批处理等各种自动化操作。那此时我们就需要通过使用定时任务来完成这些业务需求。并且在日常的开发中定时任务可以提高系统的效率、自动化重复性操作,极大程度上减少了人工工作量。常见的定时任务分别有Timer(定时任务线程池),Quartz……和其中Timer(定时任务线程池),都是基于实现的Quartz包括还有一些更为复杂的定时任务大部分都是基于实现的中的@Scheduled。

2023-07-08 18:38:06 293

原创 java中针对于枚举类中通过code获取value的改进方法

虽然使用反射可以会影响一点性能,但是这样提高了代码的复用性,在我看来整体来说还是利大于弊。的两个方法,当然使用该方法的前提的是枚举类中必须有这两个方法,要不然就会抛异常。该文章仅限于自我学习,并没有什么比较值得学习的地方,只是"针对于这种一一对应的情况,我们一般都会使用枚举类去实现。该方法主要是基于反射去实现的,通过反射去获取枚举类中。在今天之前我的枚举类都是这样写的。

2023-06-03 13:47:53 572

原创 浅谈之Java多线程

Java多线程是Java语言中一个非常重要的特性,它允许程序同时执行多个任务。通过多线程,程序可以同时处理多项任务,从而缩短程序的执行时间。另外,多线程也有助于利用多核处理器,更好地发挥计算机硬件的性能。今天我们就从最简单的的ThreadRunnable讲到现在比较常用的。

2023-04-29 16:46:26 966

原创 了解分布式Session

大家好,我这名又来了,最近我的一个同事突然在看分布式Seesion的问题,然后我们两个也是互相讨论了一下,今天我就想着把分布式Session的知识点好好的梳理一下。在很多系统中,用户的登录功能都是用Session去实现的,客户端填写好用户名和密码,发送一个请求,服务器收到请求之后,创建Session,然后返回当前Session对应的一个JessionId,浏览器存储在cookie中,当客户端调用其他方法给服务器发送请求的时候就会携带JessionId,服务端收到请求后,验证Session。

2023-04-15 16:27:44 1290

原创 谈谈Java爬虫

说起网络爬虫,大家想起的估计都是 Python ,我在没有接触Java爬虫之前也是只听过python是为爬虫而生。于是我就在网上查询有关于Java爬虫的资料,不查不知道一查吓一跳,其实 Java 也能做网络爬虫并且还有专门的库,并且Java在某些复杂页面做爬虫还能做的非常好,在开源社区中有不少优秀的 Java 网络爬虫框架,例如 webmagic。

2023-04-01 13:58:16 1095

原创 基于Redis实现的延时队列

实现延时队列还有一个比较大的问题,他并不像消息队列一样保证送达。这个问题也是开发者需要考虑的,根据自己的业务场景去判断。借助redis zset来实现延时队列,具体的实现代码很简单,就是从zset中取出score小于当前时间戳的数据。所以如果你的系统针对于延时队列这个时间要求十分严格,并且在同一时间内会有多个消息需要发生那我就不推荐使用。的延时队列,如果你的系统对于该业务并没有如此严格的要求,并且数量不多的情况下是可以使用的。过期监听实现延时队列方法较为便捷,但是该方法也存在一个很大的问题。

2023-03-18 19:54:45 2695

原创 基于DelayQueue实现的延时队列

当然监听的方法其实还有很多,不过同学们在实现队列的时候不要觉得实现了就好了,要去思考如何去保证数据的持久化,保证数据不会不会丢失。别急 这个只是个Demo嘛,如果需要使用在项目中可以写一个监听器去实时监听该延时队列。方法一样 都是在Spring Boot应用程序在启动后,对。该文章,我们这次主要是来实现基于。在控控制台中每隔1秒打印一行数据。通过timer定时定频率去获取。创建一个延时队列的生产者。定义一个延时队列的消费者。我这边暂时就只讲3种。

2023-03-11 15:30:03 750

原创 java中延时队列的实现

我是一名CRUD工程师,最近我朋友突然来问我如何实现延时队列,我脱口而出就是MQ。不过突然想到公司的项目好像用的是java的一个原生类。于是我就想着趁周末的时间好好的去探究一下各方法实现延时队列的优缺点

2023-03-04 22:26:06 2710

原创 springboot自定义参数解析器

因为很多项目每次获取用户信息,需要重复从请求头中获取token,用token再去redis或是sql中去拿到存储的计本对象,再将获取到的Json数据,转化为我们需要的对象等代码,作为一名程序员面对如此重复的代码实在是不能容忍当然很多人会说那我将这些步骤封装成一个方法,想要获取的时候调一下不就好了吗。当然这是一个解决办法,但是你依旧需要去在代码中去写对应的方法。于是我就在想是否可以在接受请求参数的时候就将这些步骤全部执行完毕,Controller接受的时候就已经是一个用户信息的实体类了。

2023-02-25 17:27:52 366

原创 SpringBoot实现统一返回接口(除AOP)

关于使用AOP去实现统一返回接口在之前的博客中我们已经实现了,但我突然突发奇想,SpringBoot中异常类的统一返回好像是通过。看控制台的报错信息发现是接口的返回参数转换的时候报错了,于是我们根据控制台上的报错信息进行断点排查。(Result 的代码我就不在这边重复贴了,读者可以去我直接用AOP实现的博客中拿)其实这个代码是有问题hhhhh,当接口的返回类型是String的时候就会提示报错。这个注解去完成的,那我是否也可以通过这个注解去实现统一返回接口。

2023-02-19 14:46:56 1194 3

原创 基于Java的分片上传功能

最近在工作中接到了一个大文件上传下载的需求,要求将文件上传到share盘中,下载的时候根据前端传的不同条件对单个或多个文件进行打包并设置目录下载。一开始我想着就还是用老办法直接就算是大文件,我只要慢慢等总会传上去的。(原谅我的无知。。所以我只能寻求切片上传的帮助了。

2023-02-11 23:57:13 1592 2

原创 Spring使用AOP完成统一结果封装

Spring使用AOP完成统一结果封装

2023-02-05 01:28:29 1339 8

原创 SpringBoot 全局异常处理

SpringBoot 全局异常处理在我们写项目时候,肯定会遇到各种各样的异常报错和用户传值错误需要返回对应的错误提示,如果我们都手动进行返回Result对象的话就会出现两个比较麻烦的问题:1、各种的异常无法返回Result对象,一旦报错就会直接在前端显示500的报错信息(除非你对于所有会报错的语句都进行try/catch捕捉),并且可以网路中看到对应的报错信息,如果你是自己的项目可能没有什么事情,但是如果是公司项目的话就会有很大的问题,因为500的报错信息中携带你部分的代码和你class文件的目录结构。

2022-04-14 20:36:30 4886 6

原创 数据结构中的栈,堆和队列

在学习数据结构的过程中经常会看到栈,堆,队列。那这三者互相之间是什么关系呢?今天我来给大家解释一下。栈:又名堆栈,是一种运算受限的线性表。只允许在栈顶插入和删除元素。栈顶是低位,栈底是高位。栈中没有元素时称为空栈,栈符合先进后出原则。简单点来说栈的插入和删除就跟叠箱子一样,我们取出放在箱子里面底下的东西(放入时间较早的物体),我们首先要移开压在它上面的物体(放入时间较晚的物体)。在栈中最重要的操作就是push(添加)和pop(删除)push:在栈的顶端放入一个元素pop:在栈的顶端移除一个元素,并

2022-04-08 00:35:15 1519

原创 API 接口签名

API 接口签名

2022-03-22 20:06:20 2458

原创 对于ElasticSearch的初步认识

官网:https://www.elastic.co/cn/downloads/elasticsearchElaticsearch,简称为es,es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。据国际权威的数据库产品评测机构DB .

2022-02-19 17:34:01 198

原创 将springboot项目打包成dockerfile挂载到docker上

将springboot项目打包成dockerfile挂载到docker上一、将springboot打成jar包1、在需要打包文件中的主启动类的pom.xml文件中添加对应的依赖<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId></plugin>2、打包成功后产生两个文

2022-01-04 22:04:43 991 5

原创 安装 Linux CentOS 8

1、还是老样子先打开官网CentOS 8 官网: https://www.centos.org版本介绍:X86是构架du 现在平台基本zhi都是X86构架PPC 是POCKET PC 也就是掌上电脑AMD64 可以理解为AMD公司的64位处理技术也可以说是CPU里的龙2、下载完后打开VMware Workstation点击文件 | 新建虚拟机设置安装程序光盘/镜像文件,也可以选择稍后安装操作系统就默认20gb这样就完成了然后我们修改一些设置选择语言界面,自己对哪一

2021-11-02 22:12:49 193

原创 10月14日-10月21日 Java软件开发面试

10月14日 温州中津先进研究院9点-9点半 笔试主要就是一些算法题,java的基础和,对于spring框架的看法……笔试结束后就直接进行面试,是技术部总监面试我的1、自我介绍2、谈一谈你的实习,你在实习中负责的是哪一块3、谈一谈你对于springsecurity的理解,他主要重写了哪一个接口4、如果不适用springsecurity,你应该用什么方式去实现权限管理5、给了一题SQL的题目让我写(由于我平时写的到时候就只用增删改查……就无了)不过这个最后也拿到了offer,但是因为工资只有

2021-10-25 13:19:19 401 1

原创 浅谈HashMap

这不是最近大四要开始找工作了嘛,我就仔细看了看HashMap的一些原理,今天就写在CSDN上跟大家分享一下,也算给自己加深一下印象1、HashMap的概述HashMap基于Map接口实现,元素以键值对的方式存储,并且允许使用null 建和null值,因为key不允许重复,因此只能有一个键为null,另外HashMap不能保证放入元素的顺序,它是无序的,和放入的顺序并不能相同。2、HashMap的底层数据结构1、在jdk 1.8之前 HashMap是数组+链表的数据结构,链表就是用来解决哈希冲突的,所

2021-10-06 19:11:23 555

原创 算法:二叉搜索树的后序遍历序列

二叉搜索树的后序遍历序列题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。样例:输入:[4, 8, 6, 12, 16, 14, 10]输出:true方法:递归后序遍历,数组的最后一个值是二叉树的根节点所以前面的值一部分小于根节点,一部分大于根节点,因为是二叉搜索树找到比根节点小的,则为左子树比根节点大的为右子树然后递归整个数组就可以了public boolean ve

2021-08-22 15:44:47 114

原创 Mybatis多表查询

我们先创建两张表 一张为老师表,一张为学生表数据库搭建:CREATE TABLE teacher ( id INT(10) NOT NULL, name VARCHAR(30) DEFAULT NULL, PRIMARY KEY (id)) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO teacher(id, name) VALUES (1, '秦老师'); INSERT INTO teacher(id, name) VALUES (2,

2021-08-20 00:26:19 97

原创 MyBatis动态sql之${}和#{}区别

动态sql是mybatis的主要特性之一。在mapper中定义的参数传到xml中之后,在查询之前mybatis会对其进行动态解析。mybatis提供了两种支持动态sql的语法:#{} 和 ${}。select * from t_user where username = '${username}' and password='${password}';select * from t_user where username = #{username} and password=#{password};

2021-08-10 14:47:56 243 1

原创 二分查找——解析

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。二分查找的主要思路就是:将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找;如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素。这里来举一个例子,例如在这个数组中,使用二分法寻找元素为5的位置,并返回其下标。二分查找涉及的很多的边界条件,逻辑比较简单,就是写不好。例如对于数组边界的处理例如到底是 while(left < right) 还是 while(left <=

2021-08-06 17:41:18 135

原创 每日一题:括号生成

leetCode:括号生成题目:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8方法:主要就是dfs+部分的减枝算法leftRemain表示当前还有多少左括号可以分配,rightRemain表示当前还有多少右括号可以分配,t

2021-08-01 16:45:19 86

原创 每日一练:有效的括号

LeetCode:有效的括号题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:tr

2021-07-29 17:15:04 120

原创 每日一练:删除链表的倒数第 N 个结点

LeetCode:删除链表的倒数第 N 个结点题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n

2021-07-28 14:58:28 66

原创 Java中的菱形继承

1、什么叫菱形继承菱形继承用通俗的话来说就是A继承B和C,B和C又继承于D。直接看图片会清晰很多但是由于java里是不允许抽象类多继承的,所以用接口代替public interface D{ void D();}public interface C{ void C();}public interface B{ void B();}public interface A implements B,C{ @Override public void

2021-07-27 15:56:06 912

原创 每日一练:最接近的三数之和

LeetCode:最接近的三数之和题目:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例 :输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 <= nums.length <= 10^310^3 <= nums[i]

2021-07-24 17:05:22 109

原创 Map、Set、List集合差别及联系详解

一、集合集合类存放于java.util包中。集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。集合类型主要有3种:set(集)、list(列表)和map(映射)。那这个三者有什么关系呢Collection├List│├LinkedList│├ArrayList│└Vector└SetMap├Hashtable├HashMap│└LinkedHashMap1、Iterator(接口)Iterator

2021-07-24 15:36:25 578 1

原创 每日一练:盛最多水的容器

LeetCode:盛最多水的容器题目:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值

2021-07-20 23:55:18 99

原创 每日一练:字符串转换整数

LeetCode:字符串转换整数题目:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 将前面步骤

2021-07-18 20:23:45 235

原创 每日一练:Z 字形变换

LeetCode:Z 字形变换题目:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入:s = "PAYPALISHIRING", num

2021-07-17 01:36:57 105 1

原创 每日一练:无重复字符的最长子串

LeetCode:寻找两个正序数组的中位数题目给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示

2021-07-14 20:40:07 66

原创 每日一练:Java基础题(2)

1-9 为单选题10 为多选题1、如果类的方法没有返回值,该方法的返回值类型应当是abstract。()a、正确b、错误2、下列描述中,错误的是( )a、java要求编程者管理内存b、java的安全性体现在多个层次上c、java中没有指针机制d、java有多线程机制3、已知int a[]=new int[10],则下列对数组元素的访问不正确的是()a、a[0]b、a[1]c、a[9]d、a[10]4、执行语句“int a= ’ 2 ’ ”后,a的值是( )

2021-07-14 20:10:16 600

原创 每日一练:Java基础题

1-7为单选8-10为多选1、下列不属于访问控制符的是()a、publicb、privatec、protectedd、static2、如下的Java程序 若采用命令行“java Test one two three”调用,则程序输出的结果为:()```javapublic class Test { public static void main(String[] args) { System.out.println(args[0]); } }

2021-07-13 17:30:31 707

原创 每日一练:无重复字符的最长子串

LeetCode:无重复字符的最长子串题目给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注

2021-07-13 15:02:26 91

空空如也

空空如也

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

TA关注的人

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