- 博客(61)
- 收藏
- 关注
原创 数据结构-递归07
数据结构-递归07定义递归是一种应用非常广泛的算法(或者编程技巧)。之后我们要讲的很多数据结构和算法的编码实现都要用到递归,比如DFS深度优先搜索、前中后序二叉树遍历等等。所以,搞懂递归非常重要,否则,后面复杂一些的数据结构和算法学起来就会比较吃力。递归需要满足的三个条件1.一个问题的解可以分解为几个子问题的解2.这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样3.存在递归终止条件写递归代码的关键就是找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,
2021-11-05 15:57:37
144
原创 数据结构-队列在线程池等有限资源池中的应用06
数据结构-队列在线程池等有限资源池中的应用06定义队列这个概念非常好理解。你可以把它想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进者先出,这就是典型的“队列”我们知道,栈只支持两个基本操作:入栈push()和出栈pop()。队列跟栈非常相似,支持的操作也很有限,最基本的操作也是两个:入队enqueue(),放一个数据到队列尾部;出队dequeue(),从队列头部取一个元素。所以,队列跟栈一样,也是一种操作受限的线性表数据结构。队列的概念很好理解,基本操作也很容易掌握。作为一种非常
2021-11-01 20:24:12
182
原创 数据结构-栈05
数据结构-栈05定义后进者先出,先进者后出,这就是典型的“栈”结构。栈是一种“操作受限”的线性表,只允许在一端插入和删除数据当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,这时我们就应该首选“栈”这种数据结构。如何实现一个“栈”?栈主要包含两个操作,入栈和出栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈。我们来回顾一下今天讲的内容。栈是一种操作受限的数据结构,只支持入栈和出栈操作。后进先出是它最大的特点。栈
2021-10-25 21:04:19
165
原创 数据结构-链表技巧04
数据结构-链表技巧04技巧一:理解指针或引用的含义将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。插入结点时,一定要注意操作的顺序删除链表结点时,也一定要记得手动释放内存空间针对链表的插入、删除操作,需要对插入第一个结点和删除最后一个结点的情况进行特殊处理异常处理如果链表为空时,代码是否能正常工作?如果链表只包含一个结点时,代码是否能正常工作?如果链表只包含两个结点时,代码是否能正常工作?
2021-10-21 14:16:16
274
原创 数据结构-链表03
数据结构-链表03定义和数组的区别:数组需要一块连续的内存空间来存储,对内存的要求比较高。链表恰恰相反,它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用分类单链表链表查询较复杂,因为链表中的数据并非连续存储的,所以无法像数组那样,根据首地址和下标,通过寻址公式就能直接计算出对应的内存地址,而是需要根据指针一个结点一个结点地依次遍历,直到找到相应的结点。第一个结点叫作头结点,把最后一个结点叫作尾结点。其中,头结点用来记录链表的基地址。有了它,我们就可以遍历得到整条
2021-10-14 21:21:20
296
原创 数据结构-数组02
数据结构-数组02定义数组是一种线性表数据结构,用一组连续的内存空间,存储一组具有想同类型的数据。什么是线性表排成一条线一样的结构,数据最多只有前后两个方向,除了数组,链表,队列,栈也是线性表结构非线性表:树,堆,图,不是简单的前后关系有连续的内存空间和相同类型数据,查询高效,增删低效数组越界java :java.lang.ArrayIndexOutOfBoundsException。c是不会报错的容器类ArrayList最大有事是将很多数组操作的细节封装起来,支持动态扩容1.5倍,如
2021-10-11 22:31:33
67
原创 数据结构-复杂度分析01
数据结构-复杂度分析01分类:常量阶O(1)对数阶O(logn)线性阶O(n)线性对数阶O(nlogn)平方阶O(n²)立方阶O(n³)k次方阶O(nk)非多项式量级,NP问题指数阶O(2的n次方)阶乘阶O(n!)总结复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,用来分析算法执行效率与数据规模之间的增长关系,可以粗略地表示越高阶复杂度的算法,执行效率越低分类最好情况时间复杂度最坏情况时间复杂度最好情况时间复杂度就是,在最理想的情况下,执行这段代码的时间复杂度。就像
2021-10-11 22:10:30
135
原创 CSS-选择器-03
CSS-选择器-03基本选择器标签选择器:选择一类标签类选择器:选择所有class属性一致的标签,跨标签id选择器:全局唯一<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title><!-- 内部样式--> <style> /* 标签选择器,会选
2020-11-22 19:51:15
77
原创 CSS-css导入方式-02
CSS-css导入方式-02<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title><!-- 内部样式--> <style> h1{ color:blue } </style> <!
2020-11-22 14:47:32
70
原创 CSS-什么是css-01
CSS-什么是css-01Cascading Style Sheet 层叠级联样式表CSS:表现层 (美化网页)字体,颜色,编剧,宽高,背景图片,网页定位,网页浮动[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YZN4FFu7-1606027196503)(/Users/shenrongrong/Library/Application Support/typora-user-images/image-20201122134554754.png)]CSS发展史CSS
2020-11-22 14:40:29
92
原创 JUC-Callable-05
JUC-Callable-05public interface **Callable<V>**返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。Executors 类包含一些从其他普通形式转换成 Callable 类的实用方法。可以有返回值可以抛出异常方法不同,run()/ca
2020-11-04 21:24:43
74
原创 JUC-集合类不安全-04
JUC-集合类不安全-04集合类不安全List不安全package com.rongrong.unsafe;import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;import java.util.UUID;import ja
2020-11-04 20:39:54
92
原创 JUC-8锁现象-03
JUC-8锁现象-03如何判断锁的是谁?永远知道什么锁,锁的到底是谁深刻理解锁package com.rongrong.lock8;import java.util.concurrent.TimeUnit;/** * 8锁就是关于锁的8个问题 * 1.标准情况下,两个线程先打印 发短信还是打电话 * 2.sendSms延迟4s,先发短信还是打电话 */public class Test1 { public static void main(String[] args) {
2020-11-04 18:25:16
112
原创 JUC-生产者消费者问题-02
JUC-生产者消费者问题-02生产者消费者问题面试的:单例模式,排序算法,生产者消费者问题,死锁sychronized版本package com.rongrong.pc;/** 线程之间通信问题,生产者消费者问题,等待唤醒,通知唤醒 线程之间交替进行,A,B操作同一个变量,num=0 A:num+1 B:num-1 */public class A { public static void main(String[] args) { Data data
2020-11-02 18:43:39
142
原创 JUC-什么是JUC-01
JUC-什么是JUC-01什么是JUCjava.util.concurrent 工具包业务:普通的线程代码ThreadRunnable:没有返回值,效率相比Callable相对较低线程和进程线程、进程进程:1个程序,程序的集合一个进程往往包含多个线程,至少包含1个java默认两个线程,mainGC线程:开了一个进程Typora,写字,自动保存(线程负责)对java:Thread,Runnable,Callablejava无法直接操作线程,通过本地方法并发,并行并发(多线程操作同一
2020-11-02 18:42:23
161
原创 java化测试神器-流量回放平台
# java化测试神器-流量回放平台作者:佳晖,荣荣文章结构基本介绍使用流程实现方案总结基本介绍背景目前公司正在进行php java化迁移工作。Java化测试本质上是一次回归工作。在测试过程中,我们发现某些后端字段类型的变更,app OK,m站却出了问题。人工的测试难免有疏漏和不足。为了让java化后的接口返回和线上一致,避免对前端的影响,所以流量回放工具诞生了!流量回放工具有以下几个优点:可以抓取app、m站、小程序流量支持流量的反复回放可自设参数去抓精准流量对比快且精
2020-10-29 16:58:24
2842
1
原创 Jacoco增量代码覆盖率
jacoco增量代码覆盖率作者:兰绿,荣荣文章结构背景Jacoco简介Jacoco 增量代码覆盖率设计方案Jacoco增量代码覆盖率+持续交付总结一、背景需求测试过程中,测试主要依靠需求及一些测试经验来主观保证质量。为了解决测试度量不清晰的问题,测试用jacoco从代码层面衡量测试覆盖率。分析未覆盖部分代码,从而反推前期测试设计是否重复,没有覆盖到的代码是否是测试设计的盲点。代码覆盖率可以作为测试自我审视的重要工具之一。jacoco代码覆盖率统计的是全量代码覆盖率,报告冗余,影响我
2020-10-27 18:56:18
10305
10
原创 Java集合-概述-集合01
Java集合-概述-集合01类型List:有序集合,可以重复Set:无序集合,不能重复Map:无序集合,键值对,key不能重复collection只能存储引用类型迭代器集合可以用迭代器去遍历集合Iterator:hasNext()next()remove()ArrayListArrayList底层用的是数组存储元素,适合查询,不适合频繁随机增删元素LinkedList底层采用双向链表来存储数据,链表适合频繁增删元素,不适合查询Vector和ArrayList相同,但是是
2020-10-25 17:55:55
62
原创 Redis-缓存穿透和雪崩-08
Redis-缓存穿透和雪崩-08缓存穿透概念:用户查询一个数据,redis没有。去持久化mysql中查询,发现也没有,查询失败,用户很多,给数据库造成压力例子:恶意攻击解决方案:布隆过滤器(对可能查询的参数以hash形式存储,控制层校验,u符合就对其)redis存key,值为null,设置较短的过期时间方法的问题:空值被缓存,需要更多空间存储key,可能有很多空值的键即使对空值设置过期时间,肯哪个还是存在缓存层和存储层数据的一定时间的不一致缓存击穿概念:一个热点key,不停扛
2020-10-25 17:34:40
91
原创 Redis-springboot集成Redis-07
Redis-springboot集成Redis-07springboot操作数据spring-data jpa jdbc mongodb redis等springboot在2.0后,原来的jedis被替换成了lettucejedis:直连,多线程操作不安全,避免不安全使用pool连接池,更像BIOlettuce:采用netty,实例可以在多个线程共享,不存在线程不安全情况,更像NIO源码分析public class RedisAutoConfiguration { public Red
2020-10-24 17:57:39
83
原创 Redis-Jedis-06
Redis-Jedis-06jedis导入依赖<dependencies> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency> <depen
2020-10-17 18:10:55
63
原创 Redis-事务操作和乐观锁-04
Redis-事务操作和乐观锁-04事务redis单条命令保证原子性,但是事务不保证原子性redis事务本质:一组命令的集合,一个事务的所有命令都会被序列化,这事务执行古城中,会按照顺序执行redis事务没有隔离级别概念事务:开启事务multi命令入队执行事务exec放弃事务:discard如果事务队列存在命令错误,事务其他命令不会执行如果事务队列中执行时出现异常,其他命令可以正常运行redis实现乐观锁悲观锁:认为什么时候都会出问题,无论做什么都会加锁乐观锁:认为什么时候都不
2020-10-16 17:44:03
118
原创 Redis-String类型-03
Redis-String类型-03incr key自增decr key自减incrby key 6按步长自增getrange key start stop获取范围字符串setrange key start (需要替换的字符串)替换制定位置开始的字符串setex key 30设置值,并设置过期时间setnx key不存在的时候才设置,已存在就设置失败批量设置 原子性操作mset k1 v1,k2,v2getset key value不存在值,返回nil;如果存在,返回原值,
2020-10-16 00:35:31
61
原创 Redis-基本命令-02
Redis-基本命令-02命令查询官网查询http://www.redis.cn/commands.htmlset key value存key值127.0.0.1:6379> set name rongget key取值127.0.0.1:6379> get namekeys *获得所有key127.0.0.1:6379> keys *move key 1清掉数据127.0.0.1:6379> move name 1Expire key设置过期时间
2020-10-15 23:47:48
112
原创 Redis-NoSQL分类简介-01
Redis-NoSQL分类简介-01分类KV键值对:Redismemecache文档数据库:MongoDB列存储数据库HBase图形关系数据库不是存图,存的是关系,如朋友圈社交关系简介:支持网络,内存,可持久化,key-value数据库,提供多种语言APIredis能干嘛?内存存储,持久化,内存断电即使,持久化很重要效率高,可以用于高速缓存发布订阅系统地图信息分析计数器,浏览量特性多样数据类型持久化集群事务学习网站
2020-10-15 23:24:14
63
原创 SpringMVC-JSON-04
SpringMVC-JSON-04JSON:数据交换格式文本格式JSON和JavaScript对象互换JSON->JavaScriptvar obj = JSON.parse(json)JavaScript->JSONJSON.stringify(user);JSON解析工具Jacksonpom配置导入jar包增加乱码配置类中new ObjectMapper对象用mapper的writeValueAsString方法中文乱码解决:方法1@RequestMa
2020-10-12 10:29:41
77
原创 SpringMVC-乱码问题-04
SpringMVC-乱码问题-04Web.xml增加过滤器配置<filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encodin
2020-10-10 17:16:31
71
原创 SpringMVC-数据处理-03
SpringMVC-数据处理-03处理提交数据提交的域名称和处理方法的参数名一致http://localhost:8080/user/t1/?name=rongrong@Controller@RequestMapping("/user")public class UserController { @GetMapping("t1") public String test1(String name, Model model) {// 接受前端参数
2020-10-10 15:41:13
69
原创 SpringMVC-结果跳转方式-03
SpringMVC-结果跳转方式-03ServletAPI通过HttpServletResponse进行输出,重定向,转发转发:forward@Controllerpublic class ModelTest1Controller { @RequestMapping("m1/ti") public String modelTest(Model model) { model.addAttribute("msg","hello~~test"); ret
2020-10-10 12:04:46
86
原创 SpringMVC-controller&restful-02
SpringMVC-controller&restful-02控制器Controller负责提供访问应用程序的行为,通常通过接口定义或注解定义实现控制器负责解析用户请求并转换为一个模型在springmvc中一个控制器类可以有多种方法对控制器的配置方式有很多种实现controller接口方法缺点:一个类只能写一个方法,比较麻烦一般使用注解方式@Controller 代表这个类会被spring接管被这个注解的类中的所有方法,如果返回值是String 并且有具体页面可以跳转,就会被
2020-10-10 11:42:52
66
原创 SpringMVC-springmvc基础-01
SpringMVC-springmvc基础-01springMVC的执行流程MVC:模型(dao,service),视图,控制器(servlet),是一种架构模式Controlller:控制器获得表单数据调用业务逻辑转向指定页面Model:模型业务逻辑保存数据的状态View:视图1.显示页面daoserviceservlet:转发和重定向jsp/htmljsp:本质是一个Servlet回顾ServletDispatchServlet:请求调度使用注解Contr
2020-10-09 19:04:12
82
原创 Spring-AOP-Spring02
Spring-AOP-Spring02代理模式为什么要学习代理模式,因为这就是Spring AOP的底层代理模式分类:静态代理动态代理静态代理角色分析:抽象角色,一般会使用接口或抽象类解决真实角色:被代理的角色代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作客户:访问代理对象的人代码步骤:接口public interface Rent { public void rent();}真实角色//房东public class Hos
2020-10-08 15:44:22
92
原创 Spring-简介,配置,ioc,自动装配,注解-Spring01
Spring-简介,配置,ioc,自动装配,注解-Spring01优点开源,免费的框架轻量级的,非入侵式的框架控制反转(IOC),面向切面编程(AOP)支持事务处理,对框架整合的支持Spring式一个轻量级的控制反转和面向切面编程的框架扩展Springboot一个快速开发的脚手架基于springboot可以快速开发单个微服务约定大于配置Spring CloudSpringCloud是基于springboot实现的因为现在大多数公司都在使用SpringBoot进行快速开
2020-09-29 16:28:50
129
原创 JavaWeb-cookie和session-JavaWeb02
JavaWeb-cookie和session-JavaWeb02会话会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,该过程可以称之为会话有状态会话:怎么证明自己的身份,一个同学来过,下次再来,真的曾经来过,称为有状态会话一个网站,怎么证明来过客户端 服务端服务端给客户端一个信,客户端下次访问服务端带上信 cookie服务端登记你来过了,下次你来的时候我来匹配你:session保存会话的两种技术cookie客户端技术(响应,请求)session
2020-09-23 00:06:34
66
原创 JavaWeb-基础-JavaWeb01
JavaWeb-基础-JavaWeb01TomcatwebserverWEB-INFHttprequestheader:accept 告诉浏览器,它所支持的数据类型accept-encodingL支持哪种编码格式accept-language 告诉浏览器,语言环境cache-controlL缓存控制connection 请求完成事断开还是保持连接responsecache-controlcontent-type----accept浏览器输入地址并回撤的一瞬间到页面能够展示什
2020-09-22 23:09:24
153
原创 SpringBoot-常用注解-Spring03
SpringBoot-常用注解-Spring03@Configration和 @Bean@Configration->beans标签@Bean ->bean标签id=方法名|注解中的name属性(指定后优先级更高)class = “方法的返回结果package com.example.firstspringboot.config;import com.example.firstspringboot.entity.User;import org.springframework.c
2020-09-18 10:17:26
171
原创 多线程-生产者消费者问题-中级进化07
多线程-生产者消费者问题-中级进化07分析是个线程同步问题,生产者消费者共享1个资源,并且生产者和消费者之间相互依赖,互为条件生产者生产产品前,要通知消费者等待,生产后,通知消费者消费消费者消费后,通知生产者已结束消费,需要生产线程通信Java提供了几个方法解决通信问题方法名作用wait()表示线程一直等待,知道其他线程通知,与sleep不同,会释放锁wait(long timeout)指定等待的毫秒数notify()唤醒一个处于等待状态的线程not
2020-09-14 20:34:10
88
原创 多线程-Lock-中级进化06
多线程-Lock-中级进化06Lock从JDK5.0开始,Java提供了更强大的线程同步机制–通过显式定义同步锁对象来实现同步。同步使用Lock对象充当java.util.concurrent.locks.lock接口是控制多个线程对共享资源进行访问的工具,锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象枷锁,线程开始访问共享资源前需要先获得Lock对象ReentrantLock类实现了Lock,可重入锁,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,
2020-09-14 15:41:55
281
原创 多线程-线程同步和死锁-中级进化05
多线程-线程同步和死锁-中级进化05多线程问题:多线程访问同一个对象,并且某些线程还想修改这个线程线程同步就是一种等待机制,多个同时访问此对象的线程进入这个对象的等待池行程队列并发同一个对象被多个线程同时操作队列和锁线程同步由于同个进程的多个线程共享同一块存储空间,为了保证数据中被访问时的正确性,在访问时加入锁机制sychronized,当一个线程获得对象的排它锁,独占资源,其他线程必须等待,使用后释放锁即可,但存在问题一个线程持有锁会导致其他所有需要此锁的线程挂起在多线程竞争下,加锁,
2020-09-14 15:25:07
108
原创 多线程-线程状态-中级进化04
多线程-线程状态-中级进化04线程的5种状态[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FWyxsXWd-1600053055673)(/Users/chenxiwen/Library/Application Support/typora-user-images/image-20200907092936502.png)]方法setPriority:更改线程优先级sleepjoin:等待该线程终止yield:暂停当前线程,让其他线程先行isAlive:测试线程
2020-09-14 11:11:21
87
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人