- 博客(18)
- 收藏
- 关注
原创 Redis 链表的好处
typedef struct listNode{ //前置节点 struct listNode *prev; //后置节点 struct listNode *next; //节点的值 void *value;}listNode;typedef struct list{ //头节点 listNode *head; //尾节点 listNode *tail; //链表的大小 unsigne.
2021-09-17 14:43:58
108
原创 设计模式理解
建造设计模式领导:负责指挥产品经理:负责提需求产品:我们最终需要交付的东西开发:负责模块开发总结下来就是,产品经理提出需求,以及最后产品的模型,然后交给部门老大,部门老大出设计方案,然后再分配到开发手里面,最终提测到时候,部门老大吧代码合并,最终就是产品。例如:需要生产一辆单车Bike 类。 -- 这个产品经理提出的需求设计方案 抽象类Builder 类。 -- 这是部门老大出的设计方案模块开发 MobikeBike 去继承Builder。 -- 也就是去实现老大出的..
2021-07-02 15:24:59
132
原创 Java线程池总结
线程的生命周期创建-就绪-运行-阻塞-死亡调用start和运行run方法创建多线程的方法:继承Thread类,重写run方法,使用start方法创建一个线程 实现Runnable接口,重写run方法,通过new Thread(Runnable target).start创建一个线程通过start去创建一个线程,属于线程级别的的调用,而run方法属于方法级的调用,我们常说的现场复用,其实也是做了cas的方法级的调用,让我们误以为是一个多线程。线程池executorService1
2021-01-28 16:19:59
151
原创 初识RabbitMQ
RabbitMQ的工作原理Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue。Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的消费方。Producer:消息生产者,即生产方客户端,生产方客户端将消息发送到MQ。Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。发布/接收消息的流程 消息发布流程: ...
2020-11-07 21:08:40
125
原创 流量控制和拥塞控制
流量控制 就是让发送方的发送速率不要太快,要让接受方有时间接收。 利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。 TCP接收方利用自己的接受窗口的大小来限制发送方的窗口大小。 TCP发送方收到接受方的0窗口通知后,应启动持续计时器,持续计时器超时后,向接收方发送0窗口探测报文。拥塞控制 概念:在某段时间,如果对网络中的某一资源的需求超过了该资源所能提...
2020-11-07 20:16:19
1097
原创 传统方式和SpringBoot连接数据库的两种方式
1.传统方式 1.编写db.properties的配置文件 2.编写jdbcConfig的工具类 @Configuration@PropertySource("classpath:jdbc.properties")public class JdbcConfig { @Value("$ {jdbc.driverClass}") private String driverClass; @Value...
2020-10-09 17:51:36
398
原创 ssm框架整合步骤流程
1.导入maven的jar包。<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target>
2020-09-13 16:35:07
211
原创 DFS和BFS的总结
如果我们使用 DFS/BFS 只是为了遍历一棵树、一张图上的所有结点的话,那么 DFS 和 BFS 的能力没什么差别,我们当然更倾向于更方便写、空间复杂度更低的 DFS 遍历。不过,某些使用场景是 DFS 做不到的,只能使用 BFS 遍历。这就是本文要介绍的两个场景:「层序遍历」、「最短路径」。还有写DFS/BFS的算法模版。1.DFS深度遍历 递归模版:void dfs(TreeNode root){ if(root != null){ retu...
2020-09-12 20:01:22
225
原创 SpringMVC常用注解
1.@RequesParam 当请求参数和实体类参数不一样时,可以命名一个别名,在参数前加上@RequesParam(name = "请求参数")2.@RequesBody 获取请求体的内容,get方法不适用(因为使用表单异步请求)3.@PathVariable 获取占位符4.@cookieValue 获取指定cookie名称的值5. @ModelAttribute 作用于方法时,当请求某个URL链接时,注解的方法会优先执行。6.@SessionAttribute 执行控制器方法之间的.
2020-09-10 23:52:13
82
原创 SpringMVC 总结一
SpringMVC在三层架构中属于表现层的东西,它是由一个个的组件集合而成的,底层的是基于servlet实现的,和Struts2不同,Struts2的底层是由Filter实现的。1.SpringMVC的组件 前端控制器:它是整个的核心,由它来调度其他的组件。<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class> o...
2020-09-09 20:43:35
115
原创 Spring之开发搭建编写
Spring个人开发总结(一)1.搭建环境 准备工作,jdk1.8,tomcat,maven,git。 创建一个新的工程,在maven里选择webapp,然后选择工作组,和项目名并创建项目,接下来创建Java目录和resources目录,右击选择对于的资源。配置数据库的db.properties文件,数据库新手建议可以用持久层mybatis框架来做,最后就是创建bean.xml文件,这里编写可以减少程序的耦合,多多考虑代码的扩展性,例如: 每一次数据库的访问都...
2020-09-09 00:16:14
78
原创 基于子类和接口的动态代理
动态代理我们常用的动态代理分类两类,接口代理,也就是JDK提供给我们的,它的特点就是字节码随意改动,随用随加载。还有一类就是子类代理,通过第三方CGLIB实现代理。1.接口代理 *创建代理对象的要求: * 被代理的类至少实现一个接口,没有则不能用。 * newProxyInstance方法的参数: * classloade:类加载器 它是加载代理对象的字节码文件,和被代理对象使用相同的类加载器,固定写法。 *
2020-09-08 23:46:53
139
原创 Spring总结篇三
1.Spring新注解@Configuration 指定当前类是一个配置类@ComponentScan 用于通过注解需要扫描的包,可以替代xml文件中的:<context:component-scan base-package="cn"></context:component-scan>
2020-09-06 23:01:06
75
原创 Spring总结篇(二)
1.注解开发 最开的配置,我们通过xml配置,但是有点繁琐,例如:<bean id="user" class="cn.domain.User"></bean>现在我们通过注解,可以大大方便我们的开发:Component:作用把当前类对象存入spring容器中,属性value用于指定bean的id,当我们不写时,默认事当前类名的首字母改小...
2020-05-09 16:14:44
127
原创 Spring 总结篇(1)
一、Spring获取ioc核心容器 三种加载配置文件的方式:ClassPathXmlApplicationContext加载类路径下的配置文件。 FileSystemXmlApplicationContext加载磁盘下任意路径的配置文件(必须有访问权限) AnnotationConfigApplicationContext用于读取注解 注意:1)Applicat...
2020-05-05 23:19:10
148
原创 Servlet执行原理
Servler执行原理 通俗的理解: 1.用户发送在浏览器发送请求到服务器,服务器会对URL进行解析,获取访问到servlet的资源路径。 2.查找到web.xml文件,是否有对应的<url-pattern>标签体内容。如果有,则会找到<servlet-class>全类名,然后tomcat会对字节码文件加载到内存,并创建对象。(具体...
2019-11-19 20:05:34
168
原创 tornado两种启动方式
第一种方法:import tornado.ioloop #I/O 时间循环import tornado.web #web服务class Mainhandler(tornado.web.RequestHandler): def get(self): self.write("hello world!")#建立路由表app = tornado.web.A...
2018-10-16 20:28:23
3141
原创 装饰器!!
装饰器的功能:1.简单的说,就是方便你在不改变原函数的情况下,对函数(开放封闭)进行修改和调试。2.走心啊!!来点实际对东西:#测试1def fun1(): print("hello world!!")#测试2def fun2(): matrix = [[0 for i in range(4)] for j in range(3)] print(matrix)de...
2018-06-26 16:05:35
170
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人