自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

五山口老法师

仰望星空,脚踏实地!

  • 博客(127)
  • 收藏
  • 关注

原创 框架:SpringMVC的工作原理

SpringMVC的工作原理图:SpringMVC流程1、  用户发送请求至前端控制器DispatcherServlet。2、  DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、  处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServl...

2019-01-31 17:55:42 350

原创 框架:AspectJ

AOP虽然是方法论,但就好像OOP中的Java一样,一些先行者也开发了一套语言来支持AOP。目前用得比较火的就是AspectJ了,它是一种几乎和Java完全一样的语言,而且完全兼容Java(AspectJ应该就是一种扩展Java,但它不是像Groovy[1]那样的拓展。)。当然,除了使用AspectJ特殊的语言外,AspectJ还支持原生的Java,只要加上对应的AspectJ注解就好。所以,使用...

2019-01-31 00:00:30 110

原创 行为型模式:责任链模式

定义:责任链模式(Chain of Responsibility)使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象能够处理它。类型:行为类模式考虑以下这样的场景:责任链,顾名思义,这个责任(请求)层层传递,直到能被正确的承担(处理)你要去给某公司借款 1 万元,当你来到柜台的时候向柜员发起 "借款 1 ...

2019-01-30 22:12:52 201

原创 框架:AOP思想

1.AOP的作用在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加。AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),切面将那些与业务无关,却被业务模块共同调用的逻辑提取并封装起来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。AO...

2019-01-30 20:33:29 312

原创 框架:@Bean注解

Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。@Servicepublic class BeanTest { @Bean public BeanTest getBean(){ ...

2019-01-29 23:42:05 128

原创 框架:SpringMVC中Interceptor拦截器的两种实现

Spring中使用Interceptor拦截器        SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间。  一、定义Interceptor实现类 SpringMVC 中的Interceptor 拦截...

2019-01-29 23:01:05 666

原创 框架:Spring Aop、拦截器、过滤器的区别

Spring Aop、拦截器、过滤器的区别Filter过滤器:拦截web访问的url地址。Interceptor拦截器:拦截以.action结尾的url,拦截Action的访问。Spring AOP拦截器:只能拦截Spring管理的Bean的访问(业务层Service)Spring AOPSpring AOP,是AOP的一种实现,使用的是代理模式。FilterFilte...

2019-01-29 22:10:58 397

原创 框架:Spring的自动装配

提到依赖注入(DI),就不能不说装配。有些初学者总是会把这两个概念搞混,这个博文就是来跟大家讨论这两个概念以及其中详细的原理。        依赖注入的本质就是装配,装配是依赖注入的具体行为。这就是两者的关系。例如:       首先,确定一下装配的概念。《spring实战》中给装配下了一个定义:  创建应用对象之间协作关系的行为称为装配。也就是说当一个对象的属性是另一个对象时,实例化...

2019-01-29 21:55:32 264

原创 框架:简单实现Spring的IOC容器

学习过Spring的同学都知道,Spring框架的核心就是IoC和AOP。Spring可以理解为一个工厂,负责对象的创建和对象间关系的维护。IoC即控制反转,简单点说就是原来的对象是在要使用之前通过在代码里通过new 的方式创建出来的,而IOC的思想则是由spring容器来统一创建(配置文件中注册bean对象),在程序要使用到该对象的时候,自动注入。(spring默认在web容器启动的时候就创建了...

2019-01-29 21:17:14 290

原创 框架:DAO,Service,Controller,View层之间的逻辑关系

Dao层:       Dao层是数据访问层,负责与数据库进行联络的一些任务封装在此,Dao层的设计首先是设计Dao接口,然后在Spring的配置文件中定义此接口的实现类,最后就可以通过模块调用此接口来进行数据业务的处理,而不必关心此接口的具体实现类是哪个类。       优点:结构清晰,Dao层的数据源配置以及相关的有关数据库连接的参数都在Spring配置文件中进行配置。 Ser...

2019-01-26 17:29:58 2374 1

原创 创建型模式:工厂模式(简单工厂+工厂方法+抽象工厂)

一、引子话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰)、Bmw(宝马)、Audi(奥迪)),还雇了司机为他开车。不过,爆发户坐车时总是这样:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上 Audi后他说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?!而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的!幸...

2019-01-26 17:08:52 447

原创 单例模式:基于反射和反序列化破解单例模式的漏洞及其解决方法

单例模式使得在创建类对象的时候只创建一个对象实例。上一节讲解了五种实现单例模式的方式。分别为:饿汉模式、懒汉模式、double check、静态内部类、枚举但是基于反射和反序列化可以破解单例模式的单一实例,在使用反射时可以通过调用setAccesible()直接调用私有构造器,创建新的实例;在反序列化的时候会直接创建新的对象实例。但是以上漏洞只针对前四种方式,枚举由于是基于JVM底层实现机...

2019-01-26 11:58:23 368

原创 设计模式:纵观

设计模式的六大原则1、开闭原则(Open Close Principle)开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。2、里氏代换原则(Liskov Substitution Principle...

2019-01-26 10:58:42 150

原创 创建型模式:单例模式(懒汉+饿汉+双锁校验+内部类+枚举)

单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:·1、单例类只能有一个实例。·...

2019-01-26 10:55:09 354

原创 自定义注解和拦截器,实现接口限流防刷

我们的目的是在指定时间内,每个用户只能进行秒杀请求指定次数。首先,定义一个注解写一个拦截器。就是当执行某个方法之前,将请求截获:(这里实现的只是一个思路,由于StringRedisTemplate只能存字符串,不好递增,因此只是在指定时间内都只能访问一次,无论你指定多少次,懂得思路就行)这里可能出现的错误:解决方案。将拦截器注册到系统中,也即是Springboot...

2019-01-25 16:48:18 1059

原创 网络:各种网络攻击

在了解分布式拒绝服务攻击的原理之前,先要了解以下两个关键的基础原理1.TCP饿死:UDP这种传输方式不会控制自己在通信通道里的流量,可理解为不讲道理的人。他们来到了一个热闹地区的KFC中,但是他们不买东西只排队将所有食物的价格都问一遍,占满所有的座位和过道。而常规的TCP服务通过自己的弹窗机制来控制流量,好比讲道理的人,座位被占满了,TCP自然会离开KFC导致正常的服务不能进行。最终的结果...

2019-01-25 10:42:33 3327

原创 网络:浏览器静态资源缓存机制

一、前言为什么需要缓存?缓存可以说是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。对于一个数据请求来说,可以分为发起网络请求、后端处理、浏览器响应三个步骤。浏览器缓存可以帮助我们在第一和第三步骤中优化性能。比如说直接使用缓存而不发起请求(强缓存),或者发起了请求但后端存储的数据和前...

2019-01-25 10:18:48 1092

原创 网络:TCP/IP各层的协议

教程书上虽然介绍了这些协议,但是就单个协议分别介绍的,很容易忘了这个协议属于那一层,以及属于底层哪个协议。上图TCP/IP各层的协议很多,一张图就可以记住了。应用层协议0.  运行 在TCP\UDP之间NFS,Network FileSystem。顾名思义,网络文件系统,即通过网络,对在不同主机上的文件进行共享。1.  运行在TCP协议之上1、POP3,全名为“Post...

2019-01-24 16:33:50 654

原创 网络:IP协议与寻址

TCP/IP协议族中最核心的协议,提供不可靠、无连接的数据报传输服务。·不可靠:不能保证IP数据报能成功送达。·无连接:并不维护后续数据报的状态信息,每个数据报的处理都是相互独立。数据报可能不会按照发送顺序接收。同一站点向另一站点发送的多个数据报可能经过不同的路由到达。帧格式IP数据报格式如下。IP包头字段说明版本:4位,指定IP协...

2019-01-24 15:30:41 596

原创 网络:IP路由流程

TCP/IP协议簇是目前互联网应用最广的协议栈,谈到TCP/IP协议栈就不能不讲一讲IP路由的问题。因为在我们使用的网络通信中几乎每时每刻都在发生着IP路由的事件。当你在网络世界中还是一位新手的时候,你也许认为设备之间实现IP路由所需的仅仅是一台设备的IP地址而已,如果你真的这样认为那就错了。每台设备在进行IP路由的时候除了必需的IP地址外还需要很多其他信息来完成数据的封装!我将通过以下网络...

2019-01-24 14:56:40 977

原创 Java:Random.nextInt()

public int nextInt(int n)该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。

2019-01-23 22:42:14 324

原创 Mysql实战:主从同步

在两台机器上安装MySQL.主机地址分别为:Master:192.168.11.104Slave:192.168.11.103启动mysql服务:/etc/init.d/mysql start修改主库的配置文件 my.cnf (属性说明自行百度)修改从库的配置文件 my.cnf进入从库,配置主库,执行:change master to master_...

2019-01-23 20:54:19 179

原创 网络:TCP/UDP

定义:TCP(Transmission ControlProtocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在简化的计算机网络OSI模型中,完成第四层传输层所指定的功能。UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一...

2019-01-23 12:01:08 209

原创 网络:TCP停止等待、超时重传、滑动窗口、拥塞控制、快重传和快恢复

TCP超时与重传机制TCP协议是一种面向连接的可靠的传输层协议,它保证了数据的可靠传输,对于一些出错,超时丢包等问题TCP设计的超时与重传机制。其基本原理:在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号。  这里比较重要的是重传超时时间,怎样设置这个定时器的时间(RTO),...

2019-01-23 11:30:18 1750

原创 网络:TIME-WAIT

time_wait状态产生的原因,危害,如何避免0.请说说你对TCP连接中time_wait状态的理解?解答:先上TCP的状态变迁图上面这个图片展示了TCP从连接建立到连接释放的过程中,客户端和服务端的状态变化图。如果只看连接释放阶段,四次握手·        客户端先发送FIN,进入FIN_WAIT1状态·        服务端收到FIN,发送ACK,进入CLOSE_W...

2019-01-23 10:14:28 649

原创 网络:TCP协议3次握手4次挥手

三次握手流程1.    客户端发个请求“开门呐,我要进来”给服务器(SYN)2.    服务器发个“进来吧,我去给你开门”给客户端 (SYN+ACK)3.    客户端有很客气的发个“谢谢,我要进来了”给服务器 (ACK)四次挥手流程1.    客户端发个“时间不早了,我要走了”给服务器,等服务器起身送他(FIN)2.    服务器听到了,发个“我知道了,那我送你出门吧”给...

2019-01-23 09:38:23 200

原创 网络:TCP协议

TCP首部格式 tcp数据是被封装在IP数据包中的,和udp类似,在IP数据包的数据部分。tcp数据包的格式如下: 源端口号和目的端口号(寻址)与udp中类似,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址称为一个四元组。在网络编程中,一般一个IP地址和一个端口号组合称为一个套接字(socket)。   序号(seq):用来标识从TCP发端向...

2019-01-22 20:57:32 221

原创 网络:http请求之几种常见技术

无状态由于http是一种无状态的协议,因此无论是客户端还是服务器都不记录http的相关信息。这样设计一方面减轻了服务器端的负载,另一方面减小了http请求的开销。但是针对某些特殊的场景,需要时刻记录用户的相关信息,这该如何处理呢?Cookie恰好可以解决这个问题,Cookie的运行机制如下:Cookie是一种由服务器端确定,并保存在客户端浏览器中的内容。这样,就不需要每次都添加...

2019-01-22 20:27:48 564

原创 网络:HTTP的请求方法

http请求方式如何发送http有很多种方式,但是最常用的就是POST和GET。其他的有些出于安全性的考虑一般都不建议使用。那么POST与GET有什么区别呢?1 使用目标不同:POST与GET都用于获取信息,但是GET方式仅仅是查询,并不对服务器上的内容产生任何作用结果;每次GET的内容都是相同的。POST则常用于发送一定的内容进行某些修改操作。(例如表单验证)2 大小不同...

2019-01-22 20:12:01 379

原创 网络:HTTP状态码

http状态码

2019-01-22 18:00:30 200

原创 网络:HTTP报文格式

报文格式首先报文的格式如下:其中空行用于区分报文首部和报文主体内容,是由一个回车符和一个换行符组成。中间使用CR+LF的空行区分(\r\n)CR代表回车LF代表换行无论是请求报文还是响应报文都需要有报文首部,当然报文主体有的请求报文是没有的。HTTP请求报文主要由请求行、请求头部、请求正文3部分组成。1,请求行由3部分组成,分别为:请求方法、URL(见备注1)以...

2019-01-22 17:54:26 543

原创 网络:url?uri?

平时会经常接触到URL,他就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢?先看看官方的解释:URL:uniform resource location 统一资源定位符URI:uniform resource identifier 统一资源标识符这也就是说,URI是一种资源的标识;而URL也是一种URI,也是一种资源的标识,但它也指明了如何定位Locate到...

2019-01-22 17:37:39 173

原创 linux:su认证失败

2019-01-22 11:09:58 2461

原创 操作系统:链接

编译系统以下是一个 hello.c 程序:#include <stdio.h>int main(){ printf("hello, world\n"); return 0;}在 Unix 系统上,由编译器把源文件转换为目标文件。gcc -o hello hello.c这个过程大致如下: 预处理阶段:处理以 # 开头的预处理命令...

2019-01-22 09:41:07 370

原创 操作系统:了解一下磁盘结构

磁盘结构盘面(Platter):一个磁盘有多个盘面; 磁道(Track):盘面上的圆形带状区域,一个盘面可以有多个磁道; 扇区(Track Sector):磁道上的一个弧段,一个磁道可以有多个扇区,它是最小的物理储存单位,目前主要有 512 bytes 与 4 K 两种大小; 磁头(Head):与盘面非常接近,能够将盘面上的磁场转换为电信号(读),或者将电信号转换为盘面的磁场(写); ...

2019-01-22 09:41:02 217

原创 Stack:peek、pop、push、search

Java Stack 类栈是Vector的一个子类,它实现了一个标准的后进先出的栈。堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。 除了由Vector定义的所有方法,自己也定义了一些方法:序号 方法描述 1 boolean empty()  测试堆栈是否为空。 2 Object p...

2019-01-22 00:52:10 1635

原创 操作系统:死锁问题

死锁发生的四个必要条件 互斥:每个资源要么已经分配给了一个进程,要么就是可用的。 占有和等待:已经得到了某个资源的进程可以再请求新的资源。 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。 环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。处理方法主要有以下四种方法: 鸵鸟策略 ...

2019-01-21 21:33:15 524

原创 操作系统:哲学家进餐问题

哲学家进餐问题 五个哲学家围着一张圆桌,每个哲学家面前放着食物。哲学家的生活有两种交替活动:吃饭以及思考。当一个哲学家吃饭时,需要先拿起自己左右两边的两根筷子,并且一次只能拿起一根筷子。下面是一种错误的解法,考虑到如果所有哲学家同时拿起左手边的筷子,那么就无法拿起右手边的筷子,造成死锁。#define N 5void philosopher(int i) { wh...

2019-01-21 17:50:09 819

原创 操作系统:读写问题

 读者-写者问题允许多个进程同时对数据进行读操作,但是不允许读和写以及写和写操作同时发生。一个整型变量 count 记录在对数据进行读操作的进程数量,一个互斥量 count_mutex 用于对 count 加锁,一个互斥量 data_mutex 用于对读写的数据加锁。typedef int semaphore;semaphore count_mutex = 1;semaphore...

2019-01-21 17:49:15 847

原创 操作系统:生产者与消费者问题

使用信号量实现生产者-消费者问题 问题描述:使用一个缓冲区来保存物品,只有缓冲区没有满,生产者才可以放入物品;只有缓冲区不为空,消费者才可以拿走物品。因为缓冲区属于临界资源,因此需要使用一个互斥量 mutex 来控制对缓冲区的互斥访问。为了同步生产者和消费者的行为,需要记录缓冲区中物品的数量。数量可以使用信号量来进行统计,这里需要使用两个信号量:empty 记录空缓冲区的数量,full...

2019-01-21 17:47:49 3220

空空如也

空空如也

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

TA关注的人

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