自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JAVA 多线程解析

而再之后的AbstractExecutorService则是实现了ExecutorService,而ExecutorService是实现了Executors,而AbstractExecutorService的submit方法则是先把Runnable封装成FutureTask(上面的父类有Runnable),之后执行Executors的execute(Runnable)方法。Callable和Future和Rannable通过一系列的组合操作,才让开发者感觉Callable也是实现多线程的一种方式。

2023-06-11 17:42:38 80

原创 nginx简单创建ssl配置https,实现https静态访问图片和页面

最重要的两点:1、配置nginx开放端口80和443 2、找到nginx对应的文件地址(默认地址为/usr/local/nginx)1、通过openssl生成rsa非对称密钥创建一个文件夹,推荐在直接在conf或者在conf下建一个文件夹存放密钥生成私钥文件openssl genrsa -des3 -out cert.key 2048去除口令mv cert.key cert.key.backopenssl rsa -in cert.key.back -out cert.key创建请求

2020-09-07 17:45:35 4306

原创 LeetCode 1160.拼写单词

给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。返回词汇表 words 中你掌握的所有单词的 长度之和。输入:words = ["cat","bt","hat","tree"], chars = "atach"输出:6解释: 可以形成字符串 "cat

2020-08-08 17:46:09 128

原创 LeetCode 674. 最长连续递增序列

给定一个未经排序的整数数组,找到最长且连续的的递增序列,并返回该序列的长度。输入: [1,3,5,4,7]输出: 3解释: 最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开。 输入: [2,2,2,2,2]输出: 1解释: 最长连续递增序列是 [2], 长度为1。思想:滑动窗口法:因为每个连续的子序列是不相交的,并且每当nums[i-1] >= nums[i]的时候,这个子序列才会断开,而且断

2020-08-05 23:20:02 146

原创 spring security+jwt实现认证授权

执行流程用户登录,根据url跳转到spring security内置好的UserDetailService中进行认证,最后会把返回的authentication放入到securityContext中,然后会调用认证成功的AuthenticationSuccessHandler,这里面会从authentication中获取用户对象,然后把这个对象转换成一个vo对象(这里随自己的喜好而定,主要目的是返回一个jwt,此jwt无论是后端还是前端封装,最后都会把他放入到以后的请求头或者请求体中),并返回给前端,然后

2020-07-22 21:06:16 473

原创 shiro+JWT实现简单认证

首先定义一个ShiroConfig配置类,在此类里面创建sessionManager和securityManager对象,并把他们放入IOC中,然后对自定义的过滤器进行定义,主要就是把定义的filter放入到过滤器链中 @Bean public ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition chainDefinition = new Defaul

2020-07-11 11:47:49 387

原创 MySQL where和having的区别

从sql运行的角度来说,where是从磁盘中的库中一条一条的取数据,然后对这一条条的数据进行判断,符合则把此条数据放入到内存中,不符合where条件则直接抛弃,然后对select的字段都是从内存中的数据取的。而having则是在group by,group by 则是在where之后进行的操作,由此可以判断,group by是对内存中的数据进行分组,having是对分组完的数据进行判断,这也是在where中不能用select字段的别名,而having能用别名的原因。...

2020-05-27 22:30:24 110

原创 使用Bamboo部署服务

首先需要在服务器的对应目录下创建对应的service,如我需要在/etc/systemd/system/下创建一个account.service的服务,然后才能在bamboo进行配置,account.service的躯体内容如下:[Unit]Description=accountserverAfter=syslog.target network.target[Service]Type=simpleEnvironment="APOLLO_META=对应的apllo地址"ExecStart=/u

2020-05-25 16:47:20 1849

原创 Spring Cloud 使用Eureka的feign调用

1、导入依赖 <!--引入EurekaClient--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-e...

2020-02-13 23:24:41 225

原创 mybatis 根据父节点查询所有子节点(三级联动+resultMap三级映射)

最近写的关于分布式的项目涉及到三级联动,需要根据后端通过一个方法向前端返回一个树形list,如:根据大佬的思路:数据库sql:自查询,查询出所有的字段mybatis:需要使用resultMap嵌套collection,然后在connection中嵌套resultMap,然后再在resultMap中嵌套collection,最后在collection中嵌套最后一个resultMap关于映射...

2019-12-22 01:16:39 2974 1

原创 服务的注册于发现(Eureka版本)

对于前面的rest风格的分布式的缺点十分明显,url方面和服务器方面,所以springcloud引入的eureka实现服务的注册和发现,eureka相当于一个代理商(server),把provider和consumer的基本信息都存储到代理商(server)中,如果consumer需要请求user,只需要找到eureka,eureka会帮助consumer找到provider而我当时照着视频创建...

2019-11-16 22:40:13 1071

原创 springcloud父工程的创建

创建springcloud父子工程遇到的问题初学spring cloud,按照视频上的步骤创建eureka会出现maven异常和各种前所未见的错误,但是经过反复检查,除了导入的springboot依赖版本不一样之外,无别的不同,基于此,通过查找资料发现,springboot和springcloud版本存在着一些冲突,而目前比较新的springboot 2.2.1.RELEASE和springcl...

2019-11-16 19:06:46 701

原创 SpringBoot项目使用视图解析器解决Circular view path 问题

controller:@Controllerpublic class HelloController { @GetMapping("/hello") public String hello(@RequestParam(name = "name")String name, Model model) { model.addAttribute("name",name...

2019-11-11 17:20:51 380

原创 LeetCode 26. 删除排序数组中的重复项 27. 移除元素

因都使用双指针法,删除数组中的一个数,所以整理到一块26、给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你...

2019-11-02 20:02:07 85

原创 LeetCode 1.两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]注意:最好转变思维...

2019-11-02 19:15:49 98

原创 LeetCode 35.搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0...

2019-11-02 18:52:09 69

原创 直接选择排序和堆排序

直接选择排序:从头到尾比较数组元素,找到数组中最小的数,跟数组中的第一个元素进行交换;然后继续进行比较,找到除了数组中第一给位置以外的最小的元素,把他和数组第二个元素进行交换,重复以上步骤例如:数组: 6,1,2,9,7第一次:1,6,2,9,7第二次:1,2,6,9,7第三次:1,2,6,9,7第四次:1,2,6,7,9第五次:1,2,6,7,9public static ...

2019-10-23 14:33:40 162

原创 归并排序

归并排序采用分治法,将待排序的元素分成两个长度相等的子序列,为每一个子序列排序,排序完,再把他们合并成一个子序列;合并两个子序列的过程叫做二路归并...

2019-10-22 21:33:35 80

原创 希尔排序

希尔排序是插入排序的一种,也叫缩小增量排序,是直接插入排序的改进,是一种非稳定的排序算法他交换的是不相邻的元素已对数组进行局部排序,首先需设置一个增量step一般为length/2,他先使数组中任意间隔为step的元素有序,遍历一遍之后,把增量除二,得到新的增量,再重复以上的步骤public static int[] shellSort(int[] a){ int length=a.len...

2019-10-22 16:24:15 77

原创 插入排序和优化

刚开始的时候,把左面的第一个数当作是有序的,把从第二个数为起始,以最后一个数为终止,作为无序的,此时数组呗分为有序和无序的两个小数组因为默认左面的第一个是有序的,所以i从1开始public static int[] insertionSort(int[] a){ int length=a.length; for(int i=1;i<length;i++){ for(int j=i...

2019-10-22 11:17:52 88

原创 Java基础复习

方法的重载:访问修饰符,返回值类型,方法名一致,但是方法中的参数列表不一致方法的重写:访问修饰符,返回值类型,方法名和参数列表都一致,但是方法中的内容不一致类和对象:类是一个模子,是对一类事物的抽象,一个类包含这一类事物具有的相同属性和行为;而对象是对类的实例化,他具有这一类事物的共有属性和行为,而且他可能还有这一类事物共有的属性和行为所没有的属性和行为static:静态变量:类中共享一个...

2019-10-21 22:17:58 71

原创 快速排序算法和优化

快速排序算法又称为划分交换排序,是对冒泡排序的一种改进,还是采用分治法先设置一个关键字key作为比较对象(一般取数组的最前或最后的数),key=length-1设置两个变量left=0,right=length-2left一直往后走,直到找到一个大于key的值,left停下;此时right一直往前走直到找到一个小于key的值,停下;此时两数交换重复操作,直到left和right同时指向一个...

2019-10-21 22:16:23 120

原创 冒泡算法和优化

双层for循环,外层负责要总体循环的次数(n-1),内层外循环负责一次外层for循环里面的两两数字比较的次数,通过内层for循环,每完成一次外层for循环,就会确定一个最大(最小)的数简单实现public static int[] bubbSort(int[] a){ int length=a.length;//防止for循环中重复计算长度 for(int i=0;i<length...

2019-10-20 14:55:45 122

原创 AspectJ

Aspect时基于Java语言的AOP框架切入点表达式execution() 用于描述方法语法:execution(修饰符 返回值 包.类.方法(参数) throws 异常)修饰符:一般省略,* 任意,public 公共的返回值:void 没有返回值包:...

2019-09-15 21:17:47 88

原创 Spring AOP

是函数式编程的一种衍生泛型,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率AOP采取横向抽取机制,取代了传统的纵向继承体系复制性代码经典应用:性能监视、事物管理、安全检查、缓存、日志等Spring AOP使用纯Java实现,不需要专门的编译和类加载器,在运行期通过代理方式向目标类植入增强代码AOP的实现原理ao...

2019-09-12 10:52:34 94

原创 spring配置文件的头部

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="h...

2019-09-11 14:42:50 114

原创 spring框架

web网页:js、jquery服务器:web层:struts、springMVCservice层:springdao层:hibernate、mybatisSpring:开源框架、轻量级Spring核心:***IOC(控制反转)***、DI(依赖注入)、AOP(切面编程)Spring优点:方便解耦,简化开发(高内聚低耦合)AOP编程的支持声明事务的支持方便程序的测试方便集成...

2019-09-10 17:06:57 124

原创 数据库视图

视图是一种虚拟存在的表,是一个逻辑表,本身并不包含数据,作为select语句保存在数据字典里,通过视图可以展示基表(用来创建视图的表)中的部分数据。视图的好处:简单:对用户来说视图是已经过滤好的复合条件的结果集安全:使用视图的用户只能访问他们被允许查询的结果集数据独立:一旦视图建立,就会屏蔽表结构变化对用户的影响创建视图:单表创建视图:create view view_table...

2019-09-06 11:11:21 75

原创 Mysql基本数据类型

MySQL常见的数据类型有:整数型,定点型,浮点型,字符串,时间,布尔,位## 整数型:tinyint:2的8次方smallint:2的16次方mediumint:2的32次方integer:2的64次方bigint:2的128次方int[M] [unsigned] [zerofill]:M为位数,默认为10,unsigned表示只能为正数(包括0),zerofill默认只能为正数,...

2019-06-27 21:35:33 82

原创 Spring对bean的管理细节

**spring对bean的管理细节**1、创建bean的三种方式2、bean对象的作用范围3、bean对象的声明周期创建对象的三种方式1、使用默认构造函数创建在spring配置文件中使用bean标签,配以id和class属性使用的时默认构造函数,此时若对应类中没有默认构造函数,则对象无法创建<beran id="accountService" class="com.zz...

2019-06-19 10:26:03 1181

原创 反射

反射是架构设计的灵魂反射的其中一个作用就是强制在内存中创建某个类或接口的java.lang.Class对象(反向加载类)使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)反射的概述Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有的属性和方法;对于任意一个对象,都能够调用他的任意一个方法和属性;这种动态获取的信息以及动态调...

2019-05-31 20:47:58 98

转载 java基础之—类加载器

要了解类加载器先要了解类的加载一、类的加载(类的加载概述)当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。1、加载就是指将class文件读入内存,并为之创建一个Class对象。任何类被使用时系统都会建立一个Class对象。其中class对象也就是下一章节要将的反射的重点。其中这个class对象描述了这个对象的所有信息,比如...

2019-05-31 19:37:11 50

转载 Java面向对象

面向对象:面向对象是向现实世界模型的自然延伸,是一种万物皆对象的编程思想,在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例,类似于生物分类学一般,分为域、界、门、纲、科、属、种一般,面向对象就是把现实中的事物抽象为一类事物。以事物为中心,先开发类,得到对象,通过对象之间相互通信实现功能现有数据结构,后有算法面向过程:思想:由过程、步骤、函数组成,以过程为核心,现有...

2019-05-29 21:22:01 79

原创 Java关键字

Transient关键字只能修饰变量,而不能修饰方法和类,本地变量不能被transient关键字修饰被transient关键字修饰的变量不能被序列化,一个静态变量不管是否被transient修饰,均不能序列化一旦变量被transient修饰,变量将不再是第项持久化的一部分,该变量内容在序列化后无法获得访问。也可以认为在将持久化的对象反序列化后,被transient修饰的变量将按照普通类成员变量...

2019-05-29 21:20:13 54

空空如也

空空如也

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

TA关注的人

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