java
文章平均质量分 53
ss无所事事
这个作者很懒,什么都没留下…
展开
-
学习杂谈1
多线程编程中一般线程的个数都大于CPU核心的个数,而一个CPU核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU采取的策略是为每个线程分配时间片轮询的形式。当一个线程的时间片用完的时候就会重新处于就绪状态让给其他线程使用,这个过程就属于一次上下文切换。用大白话来说:当前的任务在执行完CPU时间片切换到另一个任务之前会先保存自己的状态,以便下次再切换回这个任务时,可以再加载这个任务的状态。使用Linux当做服务器的有点有一点就是因为它切换上下文和模式切换所需要的时间很短。原创 2023-10-22 01:27:09 · 150 阅读 · 0 评论 -
初识定时任务
我们在开发系统的时候,常常会遇到需要定时的去执行一些业务,例如:定时备份数据库、定时生成报告、定时发送通知、定时批处理等各种自动化操作。那此时我们就需要通过使用定时任务来完成这些业务需求。并且在日常的开发中定时任务可以提高系统的效率、自动化重复性操作,极大程度上减少了人工工作量。常见的定时任务分别有Timer(定时任务线程池),Quartz……和其中Timer(定时任务线程池),都是基于实现的Quartz包括还有一些更为复杂的定时任务大部分都是基于实现的中的@Scheduled。原创 2023-07-08 18:38:06 · 283 阅读 · 0 评论 -
了解分布式Session
大家好,我这名又来了,最近我的一个同事突然在看分布式Seesion的问题,然后我们两个也是互相讨论了一下,今天我就想着把分布式Session的知识点好好的梳理一下。在很多系统中,用户的登录功能都是用Session去实现的,客户端填写好用户名和密码,发送一个请求,服务器收到请求之后,创建Session,然后返回当前Session对应的一个JessionId,浏览器存储在cookie中,当客户端调用其他方法给服务器发送请求的时候就会携带JessionId,服务端收到请求后,验证Session。原创 2023-04-15 16:27:44 · 1284 阅读 · 0 评论 -
基于Redis实现的延时队列
实现延时队列还有一个比较大的问题,他并不像消息队列一样保证送达。这个问题也是开发者需要考虑的,根据自己的业务场景去判断。借助redis zset来实现延时队列,具体的实现代码很简单,就是从zset中取出score小于当前时间戳的数据。所以如果你的系统针对于延时队列这个时间要求十分严格,并且在同一时间内会有多个消息需要发生那我就不推荐使用。的延时队列,如果你的系统对于该业务并没有如此严格的要求,并且数量不多的情况下是可以使用的。过期监听实现延时队列方法较为便捷,但是该方法也存在一个很大的问题。原创 2023-03-18 19:54:45 · 2676 阅读 · 0 评论 -
基于DelayQueue实现的延时队列
当然监听的方法其实还有很多,不过同学们在实现队列的时候不要觉得实现了就好了,要去思考如何去保证数据的持久化,保证数据不会不会丢失。别急 这个只是个Demo嘛,如果需要使用在项目中可以写一个监听器去实时监听该延时队列。方法一样 都是在Spring Boot应用程序在启动后,对。该文章,我们这次主要是来实现基于。在控控制台中每隔1秒打印一行数据。通过timer定时定频率去获取。创建一个延时队列的生产者。定义一个延时队列的消费者。我这边暂时就只讲3种。原创 2023-03-11 15:30:03 · 732 阅读 · 0 评论 -
java中延时队列的实现
我是一名CRUD工程师,最近我朋友突然来问我如何实现延时队列,我脱口而出就是MQ。不过突然想到公司的项目好像用的是java的一个原生类。于是我就想着趁周末的时间好好的去探究一下各方法实现延时队列的优缺点原创 2023-03-04 22:26:06 · 2620 阅读 · 0 评论 -
springboot自定义参数解析器
因为很多项目每次获取用户信息,需要重复从请求头中获取token,用token再去redis或是sql中去拿到存储的计本对象,再将获取到的Json数据,转化为我们需要的对象等代码,作为一名程序员面对如此重复的代码实在是不能容忍当然很多人会说那我将这些步骤封装成一个方法,想要获取的时候调一下不就好了吗。当然这是一个解决办法,但是你依旧需要去在代码中去写对应的方法。于是我就在想是否可以在接受请求参数的时候就将这些步骤全部执行完毕,Controller接受的时候就已经是一个用户信息的实体类了。原创 2023-02-25 17:27:52 · 345 阅读 · 0 评论 -
基于Java的分片上传功能
最近在工作中接到了一个大文件上传下载的需求,要求将文件上传到share盘中,下载的时候根据前端传的不同条件对单个或多个文件进行打包并设置目录下载。一开始我想着就还是用老办法直接就算是大文件,我只要慢慢等总会传上去的。(原谅我的无知。。所以我只能寻求切片上传的帮助了。原创 2023-02-11 23:57:13 · 1557 阅读 · 2 评论 -
SpringBoot 全局异常处理
SpringBoot 全局异常处理在我们写项目时候,肯定会遇到各种各样的异常报错和用户传值错误需要返回对应的错误提示,如果我们都手动进行返回Result对象的话就会出现两个比较麻烦的问题:1、各种的异常无法返回Result对象,一旦报错就会直接在前端显示500的报错信息(除非你对于所有会报错的语句都进行try/catch捕捉),并且可以网路中看到对应的报错信息,如果你是自己的项目可能没有什么事情,但是如果是公司项目的话就会有很大的问题,因为500的报错信息中携带你部分的代码和你class文件的目录结构。原创 2022-04-14 20:36:30 · 4868 阅读 · 6 评论 -
数据结构中的栈,堆和队列
在学习数据结构的过程中经常会看到栈,堆,队列。那这三者互相之间是什么关系呢?今天我来给大家解释一下。栈:又名堆栈,是一种运算受限的线性表。只允许在栈顶插入和删除元素。栈顶是低位,栈底是高位。栈中没有元素时称为空栈,栈符合先进后出原则。简单点来说栈的插入和删除就跟叠箱子一样,我们取出放在箱子里面底下的东西(放入时间较早的物体),我们首先要移开压在它上面的物体(放入时间较晚的物体)。在栈中最重要的操作就是push(添加)和pop(删除)push:在栈的顶端放入一个元素pop:在栈的顶端移除一个元素,并原创 2022-04-08 00:35:15 · 1448 阅读 · 0 评论 -
API 接口签名
API 接口签名原创 2022-03-22 20:06:20 · 2436 阅读 · 0 评论 -
将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 · 976 阅读 · 5 评论 -
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 · 385 阅读 · 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 · 550 阅读 · 0 评论 -
算法:二叉搜索树的后序遍历序列
二叉搜索树的后序遍历序列题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。样例:输入:[4, 8, 6, 12, 16, 14, 10]输出:true方法:递归后序遍历,数组的最后一个值是二叉树的根节点所以前面的值一部分小于根节点,一部分大于根节点,因为是二叉搜索树找到比根节点小的,则为左子树比根节点大的为右子树然后递归整个数组就可以了public boolean ve原创 2021-08-22 15:44:47 · 107 阅读 · 0 评论 -
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 · 94 阅读 · 0 评论 -
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 · 237 阅读 · 1 评论 -
二分查找——解析
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。二分查找的主要思路就是:将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找;如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素。这里来举一个例子,例如在这个数组中,使用二分法寻找元素为5的位置,并返回其下标。二分查找涉及的很多的边界条件,逻辑比较简单,就是写不好。例如对于数组边界的处理例如到底是 while(left < right) 还是 while(left <=原创 2021-08-06 17:41:18 · 131 阅读 · 0 评论 -
每日一题:括号生成
leetCode:括号生成题目:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8方法:主要就是dfs+部分的减枝算法leftRemain表示当前还有多少左括号可以分配,rightRemain表示当前还有多少右括号可以分配,t原创 2021-08-01 16:45:19 · 80 阅读 · 0 评论 -
每日一练:有效的括号
LeetCode:有效的括号题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:tr原创 2021-07-29 17:15:04 · 102 阅读 · 0 评论 -
每日一练:删除链表的倒数第 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 · 62 阅读 · 0 评论 -
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 · 882 阅读 · 0 评论 -
每日一练:最接近的三数之和
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 · 102 阅读 · 0 评论 -
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 · 568 阅读 · 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 · 92 阅读 · 0 评论 -
每日一练:字符串转换整数
LeetCode:字符串转换整数题目:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 将前面步骤原创 2021-07-18 20:23:45 · 222 阅读 · 0 评论 -
每日一练: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 · 103 阅读 · 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 · 62 阅读 · 0 评论 -
每日一练: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 · 539 阅读 · 0 评论 -
每日一练: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 · 677 阅读 · 0 评论 -
springboot整合MyBatis-Plus
什么是MyBatis-PlusMyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。mybatis plus 官网 :https://baomidou.com/整合MyBatis-Plus在pom中添加依赖 <dependency> <groupId>com.baomidou</groupId> <.原创 2021-05-28 14:42:19 · 280 阅读 · 1 评论 -
springboot整合JDBC
创建测试项目测试数据源1、先去新建一个项目测试: 引入相应的模块 jdbc2、项目建好之后,发现springboot自动帮我们导入了jdbc的启动器:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency&g.原创 2021-05-27 00:30:31 · 139 阅读 · 2 评论 -
Springboot传输文件
前端页面<form role="form" th:action="@{/upload}" method="post" enctype="multipart/form-data"> <div class="form-group"> <label for="exampleInputEmail1">邮箱</label> <input type="email" class="form-control" name="email" id="原创 2021-05-24 19:28:42 · 539 阅读 · 0 评论 -
SpringBoot 自动配置原理
分析自动配置原理我们以spring.factories中的MultipartAutoConfiguration为例//表示这是一个配置类,和以前编写的配置文件一样,也可以给容器中添加组件@Configuration(proxyBeanMethods = false)//判断当前项目有没有Servlet,StandardServletMultipartResolver,MultipartConfigElement这个三个类@ConditionalOnClass({ Servlet.class,.原创 2021-05-11 18:16:19 · 313 阅读 · 0 评论 -
SpirngBoot中yaml语法
配置文件SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的,文件类型分为两种application.properties语法结构 : key=valueapplication.yml语法结构 :key:空格 value配置文件的作用 :修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了比如我们可以在配置文件中修改Tomcat 默认启动的端口号(properties)server.port=8081yaml 概原创 2021-05-09 00:42:28 · 101 阅读 · 0 评论 -
SpringBoot运行原理深究
我们一开始写的HelloSpringBoot,是怎么运行的呢,Maven项目,我们一般从pom.xml文件探究起;Pom.xml父依赖其中它主要是依赖一个父项目,主要是管理项目的资源过滤及插件! <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId>原创 2021-05-07 00:21:21 · 362 阅读 · 1 评论 -
修改springboot启动图案
如何更改启动时显示的字符拼成的字母?只需一步:到项目下的 resources 目录下新建一个banner.txt 即可。图案可以到:https://www.bootschool.net/ascii 这个网站生成,然后拷贝到resources目录下创建的文件中即可!例如:叮当猫...原创 2021-05-06 18:30:15 · 133 阅读 · 0 评论 -
将springBoot打成jar包 运行
将项目打成jar包,点击 maven的 package如果打包成功,则会在target目录下生成一个 jar 包打成了jar包后,就可以在任何地方运行了!cmd :java -jar xxx.jar原创 2021-05-06 18:21:53 · 106 阅读 · 0 评论 -
第一个SpringBoot项目
准备工作我们将学习如何快速的创建一个Spring Boot应用,并且实现一个简单的Http请求处理。通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。我的环境准备:java version “1.8.0_181”Maven-3.6.1SpringBoot 2.x 最新版开发工具:IDEA创建基础项目说明Spring官方提供了非常方便的工具让我们快速构建应用 , Spring Initializr: https://start.spri.原创 2021-05-06 00:33:49 · 85 阅读 · 0 评论 -
Spring中快速构建实体类方法 Lombok
一、Lombok简介Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO),它通过注释实现这一目的。通过在开发环境中实现 Lombok,开发人员可以节省构建诸如 hashCode() 和 equals() 这样的方法以及以往用来分类各种 accessor 和 mutator 的大量时间。二、安装Lombok1、直接从http://plugins.jetbrains.com/下载,然后放到idea安装文件下面的plugins原创 2021-04-30 14:13:55 · 706 阅读 · 0 评论