自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux中的ps命令详解

PS命令:可以查看进程瞬间信息这里展示命令所有参数的含义命令含义ps a显示所有进程(TTY不为?的)ps -a显示同一终端下所有程序ps -A显示所有进程ps -c显示进程的实际名称ps -e与ps -A相同ps -f显示完整格数的输出ps -F比ps -f多了SZ、RSS、PSR三列数据ps -u列出属于该用户的进程的状况ps -L显示进程中的线程ps -l显示长列表ps -N反向选择ps -

2021-11-03 20:58:46 3771

原创 IDEA每次启动都会Indexing

每次打开IDEA都会indexing好半天,大一点的项目要几个小时,很是搞人心态。网上找了两种方法:第一种是 File ->Invalidate caches -> Restart这种方式对我试了没啥用,仅供参考。第二种是File->Settings 中直接搜索index然后旁边两个选项都选择Don’t download,use local indexes亲测有用!...

2021-11-03 19:39:01 28199 6

原创 MySQL索引

索引目的:更快的获取数据本质:数据结构索引分类主键索引PRIMARY KEY唯一表示,不可重复,只能有一个列唯一索引UNIQUE KEY避免重复的列出现,可以有多个列常规索引KEY/INDEX默认的全文索引FULLTEXT特定数据库引擎才有索引的使用1、创建表时增加索引2、创建完毕后增加索引SHWO INDEX FROM table //显示所有索引信息//增加索引CREATE TABLE table( id INT

2021-10-23 17:59:41 158

原创 MySQL的事务

事务原子性: 要么都成功,要么都失败。一致性:事务前后数据完整性保持一致。持久性:事务提交后不可逆。隔离性:多个事务不互相干扰。隔离所导致的问题脏读:读到未提交事务的数据。不可重复读:多次读取表中数据时同时数据被更改,导致多次读取数据内容不一致。幻读:多次读取表中数据时同时有新插入的数据,导致多次读取数据行不一致。事务的执行MySql 默认开启事务自动提交。SET autocommit = 0 关闭自动提交SET autocommit = 1 开启自动提交commit

2021-10-23 17:54:47 119

原创 MySQL常用函数

更多方法可参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/built-in-function-reference.html数学运算SELECT ABS(-10) --绝对值 10SELECT CEILING(9.2) --向上取整 10SELECT FLOOR(9.2) --向下取整 9 SELECT RAND() --0-1的随机数SELECT SIGN(10) --判断正负数 正数返回 1 负数返回 -1字符.

2021-10-23 17:51:08 59

原创 17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"]class Solution { publ.

2021-09-27 18:42:27 61

原创 JWT(JSON Web Token)

JSON Web Token 是目前最流行的跨域认证解决方案,在介绍JWT之前首先了解一下单点登录。单点登录单点登录的目的就是实现在访问同一家企业下的服务时,只需要一次登录就可以访问多个Server,如我们在豆瓣上登录之后,进入豆瓣读书和豆瓣电影时不需要登录。但问题在于如何实现呢,一般我们项目中会将登录信息存到cookie和session中,每次请求到服务器时都会对比传入的cookie的值;但是如果在集群环境中,如何保证在A服务器登录后访问到B服务器不需要重复登录呢(因为服务器之间的session.

2021-09-14 18:54:39 388 3

原创 责任链模式

责任链模式场景:工作中如果需要请假,只需要在OA系统上发起请假流程,系统需要根据请假的天数来决定具体的操作者,如请假三天内则只需要上级审批,如果大于三天小于七天需要经理审批,如果大于七天需要部门负责人审批。此时就可以用到责任链模式,即将一个请求的所有处理者形成一个链,请求在未被处理之前都会在这条链上依次寻找真正的处理者。//创建一个抽象的处理类abstract class Handler{ protected Handler nextHandler; public void se

2021-08-26 19:53:56 74

原创 剑指Offer 14.剪绳子

题目:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1/*自己写的垃圾代码:一个一个试,递归找出最大乘机。每次均匀切割,开始剪两刀,然后递增,剩下的绳子继续

2021-03-10 18:34:34 89 1

原创 剑指Offer 67.字符串转换整数

题目写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假如该字符串中

2021-03-08 14:23:55 64

原创 剑指Offer 09. 用两个栈实现队列

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )class CQueue { private Stack<Integer> Stack1 ; private Stack<Integer> Stack2 ; public CQueue() { Stack1 = .

2021-03-07 13:59:13 55

原创 剑指Offer . 重建二叉树

剑指Offer.重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。eg:  前序遍历 preorder = [3,9,20,15,7]          中序遍历 inorder = [9,3,15,20,7]返回如下二叉树     3    /  \  9  

2021-03-07 12:47:33 76

原创 多线程-线程池

线程池线程池的创建方式一共有四种创建方式:Executors.newCachedThreadPool(); 创建一个无限大的线程池,线程大小和任务数保持一致。Executors.newFixedThreadPool(int xxx); 创建一个自定义线程数的线程池。如果任务大于自定义数,多余任务会暂时放在任务队列中等待空闲线程的执行。Executors.newSingleThreadExecutor(); 创建一个线程数为1的线程池,如果任务大于1,多余任务会暂时放在任务队列中等待空闲线程的执行

2021-01-28 17:00:42 124

原创 线程通信-生产者和消费者问题

线程通信Java提供了几个方法解决线程之间的通信问题,这些方法均是Object中的方法。方法名作用wait()表示线程一直等待,直到其它线程通知,与sleep不同,sleep不会释放锁而wait会释放锁wait(long timeout)指定等待的毫秒数notify()唤醒一个处于等待状态的线程notifyAll()唤醒用一个对象上所有调用wait()方法的线程,优先级高的线程优先调度为什么这些方法被定义子啊Object中?Java的每个对象中都有一

2021-01-27 17:28:12 94

原创 Lock锁-用Lock完成三窗口卖票

Lock锁从JDK5.0开始,Java提供了更强大的线程同步机制-通过显式定义同步锁对象来实现同步,同步锁使用Lock对象充当java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在现实线程安全的控制中,比较常用的是ReentrantLoc

2021-01-27 16:08:29 188 2

原创 死锁

死锁多个线程各自占有一些共享资源,并且互相等待其它线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题。//死锁:多个线程互相持有对方的资源,相互僵持。public class DeadLock { public static void main(String[] args) { MakeUp makeUp1 = new MakeUp(0, "greed1"); MakeUp ma

2021-01-27 15:42:22 78

原创 同步方法-synchronized

由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种使用方法:synchronized方法和synchronized块。synchronized方法控制对“对象”的访问,每一个对象对应一把锁,每个synchronized方法都必须获得调用该方法的对象锁才能执行,否则线程会阻塞,方法一旦执行,就独占该锁,直到该方法返回才释放锁,后面被阻塞的线程才能获得这个锁,继续执行。同步方法:实现线程安全的三窗口.

2021-01-26 16:17:43 139

原创 守护线程

守护线程线程分为用户线程和守护线程用户 (User) 线程:运行在前台,执行具体的任务,如程序的主线程、连接网络的子线程等都是用户线程守护 (Daemon) 线程:运行在后台,为其他前台线程服务。也可以说守护线程是 JVM 中非守护线程的 “佣人”。一旦所有用户线程都结束运行,守护线程会随 JVM 一起结束工作虚拟机必须确保用户线程完毕,虚拟机不用等待守护线程执行完毕;main 函数所在的线程就是一个用户线程啊,main 函数启动的同时在 JVM 内部同时还启动了好多守护线程,比如垃圾回收线程。比较

2021-01-26 14:56:45 80

原创 线程的优先级

线程优先级Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。线程的优先级用数字表示,范围是1~10,默认优先级是5,公平竞争。使用getPriority().setPriorty(int xxx)方法可以获取优先级。优先级高的并不一定就一定先跑,但大多情况下会先执行。优先级低只意味获得调度的概率低,并不是优先级低就不会被调用,这都谁看CPU的调度public class 线程优先级 { public static void ma

2021-01-26 14:41:34 451

原创 线程状态的观测

人有生来病死,线程一样,线程主要有创建、就绪、运行、阻塞、死亡这五个状态。测试线程状态public class 测试线程状态 { public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(()-> { for(int i = 0 ; i < 10 ; i++) { try { Thread.sleep(1000); .

2021-01-26 14:25:28 66

原创 Join 合并线程(插队)

JoinJoin合并线程,待此线程执行完成后,在执行其它线程,其它线程阻塞,可以想象成插队。package 线程状态;public class JoinThread implements Runnable{ public void run() { for(int i = 0 ; i < 10 ; i++) { System.out.println("vip线程来了" + i); } } public static void main(String[] args) t

2021-01-26 14:08:58 99

原创 Yield 线程礼让

线程礼让礼让线程,让当前正在执行的线程暂停,但不阻塞;将线程从运行状态转换为就绪状态;让CUP重新调度,礼让不一定成功,看CUP心情。//礼让不一定成功 Yieldpublic class 线程礼让 { public static void main(String[] args) { MyYield myYield = new MyYield(); new Thread(myYield,"a").start(); new Thread(myYield,"b").start(); }

2021-01-26 13:57:55 72

原创 用多线程实现倒计时和时间戳

倒计时public class 倒计时 { public static void main(String[] args) { Time time = new Time(10); new Thread(time).start(); }}class Time implements Runnable{ //定义需要倒计时的时间 private int times ; Time(int times){ this.times = times; } public void ru

2021-01-26 13:46:52 429

原创 多线程-线程停止

停止线程:1、建议线程正常停止,线程自己停下来才是最安全的,利用次数,不建议死循环。2、建议使用标志位,设置一个标志位。3、不要使用stop或者destroy等过时或者JDK不建议使用的方法。public class StopThread implements Runnable{ //设置一个标志位 private boolean flag = true; public void run() { int i = 0; while(flag) { System.out.prin

2021-01-26 13:26:44 148

原创 Lambda表达式

简化程序的编写,避免匿名内部类定义过多,其实属于函数式编程的概念。函数式接口定义:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。 对于函数式接口,我们可以通过lambda表达式创建该接口的对象。一般情况下我们实现一个函数式接口都是下面这样的操作public class TestLambda { public static void main(String[] args) { Lam lam = new Lam(); //调用实现方法 lam.lambda(); }.

2021-01-24 17:21:14 113

原创 多线程-线程的创建

线程和进程**进程:**进程就是一个可执行的程序,拥有独立的内存空间,一个进程可也有多个线程,至少有一个线程。**线程:**线程是进程中的一个执行的任务(控制单元),多个线程可以共享数据。线程和进程的区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。每个进程都有独立的代码和数据空间,程序间切换有较大的开销;线程可以看作轻量级进程,同一类线程可共享代码和数据空间,每个线程都有自己独立的运行和程序计数器,线程间切换开销较小。创建线程方式1继承Thread类,重写run

2021-01-24 16:28:20 73

原创 多线程-三个窗口买票问题

//线程不安全 加同步锁/* * sybchronized(对象){}代码块 * sybchronized方法 * */public class 三窗口买票 { public static void main(String[] args) { S s=new S(); Thread t1=new Thread(s); Thread t2=new Thread(s); Thread t3=new Thread(s); t1.setName("一号窗口"); t2.set

2021-01-24 16:04:46 525 3

原创 SpringBoot整合Mybatis

1、导入相关jar包<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/

2021-01-12 14:31:27 59

原创 SpringBoot整合JDBC

SpringBoot可以实现自动装配数据源,所以使用SpringBoot连接数据库非常简单。SpringBoot有已经配置好的模板bean,可以直接拿来使用,在连接数据库时可以使用JdbcTemplate进行CRUD操作。1、Maven导JDBC和MySQL包<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w.

2021-01-12 14:24:36 73

原创 SpringBoot拦截器手动实现

当我们写一个web项目,都需要配置一个拦截器,这样就可以只有登录后才能访问其它页面。在之前学习的Spring中拦截器可以在XML文件中进行配置,而在SpringBoot中我们可以手动实现拦截器功能。首先我们需要实现一个登录功能。这里是一个简单的登录页面,可将用户名和密码发给后端。<!DOCTYPE html><html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"><head> <meta .

2020-12-29 16:05:25 649

原创 YAML配置和应用

SpringBoot可以使用两种配置文件,一种是application.properties;一种是application.yml。application.properties 语法: key=valueapplication.yml 语法:key:(空格)value配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们配置好了。YAML和XMLyaml配置:server: prot: 8080xml配置:<server> &l.

2020-12-24 18:49:12 195 1

原创 SrpingBoot入门-helloword

先回顾一下什么是Spring,Spring是一个开源框架,为了解决企业级应用开发的复杂性而创建的,实际上就是简化开发。Spring是如何简化Java开发的为了降低java开发的复杂性,Spring采用一下四中关键策略;1、基于POJO的轻量级和最小侵入性编程;2、通过IOC,依赖注入和面向接口实现松耦合;3、基于切面(AOP)和惯例进行声明式编程;4、通过切面和模板减少样式代码。什么是SpringBootSpring Boot 是就是一个JavaWeb的开发框架,和SpringMVC类似.

2020-12-24 15:27:10 106

原创 MyBatis参数处理

在写Mybatis的Mapper映射文件的时候,我们通常用#{}来获取传进来的参数,对于参数的处理其实还是有非常多的规则。单个参数对于单个参数,MyBatis不会做参数处理,用#{}取值,里面括号内不管写什么都可以取到值。//定义接口 public User selectById(int id); //通过id查询<!-- 单个参数查询--> <select id="selectById" resultType="User" > select .

2020-12-21 15:28:11 79

原创 MyBatis的基本操作CRUD

在配置好环境后,MyBatis就可以进行数据库的连接和操作,这里简单演示一下数据库的增删改查。1、编写接口import Util.User;public interface MybatisI { public User select(int id); //查询 public void insert(User user); //添加 public void update(User user); //修改 public void delete(int id); .

2020-12-20 19:00:08 68

原创 MyBatis的标签

<properties>标签可以用来获取外部properties配置文件的信息driver:com.mysql.jdbc.Driverurl:jdbc:mysql:///JDBCusername:rootpassword:root<!-- 加载配置文件dbconfig.properties--> <properties resource="dbconfig.properties"> </properties> &l

2020-12-15 17:40:03 62

原创 MyBatis基础入门

MyBatis简介MyBatis是一个优秀的持久化层框架,也就是跟数据库进行交互的框架。MyBatis是一个半自动ORM的轻量级框架,它避免了几乎所有的JDBC代码和手动设置参数以及结果集,可以使用简单的XML或注解来配置和映射原生类型。MyBatis和Hibernate的区别Hibernate是一个全自动ORM框架,这就意味着编写sql、设置参数、执行sql封装结果这些操作都不需要我们完成,我们只需要创建javaBean对象然后就可以在数据库中获取数据。所有这样以来Hibernate的缺点也就很明显

2020-12-15 15:30:44 145

原创 爬楼梯问题(一次爬1-n个楼梯,共有几种爬法)

题目:爬楼梯,每次可以爬1个或着2个台阶或者更多个台阶,共有几种爬法。分析:这种题一般有两种做法,第一种是找规律。第二种是动态规划。第一种:找规律法假如题目是每次爬1个或者爬2个。求所有的可能性首先我们先算出前十个的所有可能结果台阶个数12345678910可能情况123581321345589观察上表不难发现,从第三个台阶开始,当前的台阶数等于前两个数之和。这也就是斐波那契数列,得到这些信息后,编程就很容易了。public

2020-11-06 21:49:44 7134 1

原创 堆排序

堆排序平均时间复杂度:O(n log n)最好情况:O(n log n)最坏情况:O(n log n)空间复杂度:O(1)稳定性:不稳定排序思路1、将无序数组构建成一个堆,根据升降序需求选择大顶堆或小顶堆。2、将堆顶元素与末尾元素交换,将最大的元素放到数组末端。3、重新调整结构,然后继续交换堆顶元素与当前数组末尾元素,反复执行。import java.util.Arrays;public class 堆排序 { public static void main(String[

2020-11-05 17:36:23 59

原创 java——稀疏数组和二维数组的相互转换

稀疏数组当一个数组中大部分元素为0,或者为同一个值的数组时。可以使用稀疏数组来保存该数组,可有效减少存储空间。存储方法:1)记录数组一共有几行几列和有多少个不同的值2)把具有不同值的元素是的行列及值记录在一个小规模的数组中,从而缩小程序的规模例如下面二维数组将该数组转换成稀疏数组应该为下表所示行列值67803220615111...

2020-04-14 18:44:27 210

原创 KMP算法图文演示+详细解读

KMP算法介绍KMP算法俗称“看毛片算法”,是一个解决模式串是否在文本中出现过,若出现则返回其最早出现位置的经典算法。简单 的说就是字符串查找算法。先看一个案例:有一个字符串str1=“ABAACABABCAC”,和一个字串str2=“ABABC”;现在需要判断str1是否包含str2,如果包含则返回第一次出现的角标,否则返回-1对于这个案例大家最容易想到的就是用暴力匹配来判断,先演...

2020-04-14 14:04:26 1036 2

空空如也

空空如也

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

TA关注的人

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