自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (2)
  • 收藏
  • 关注

原创 短链平台设计

为什么需要短链?如果这个地址仅仅在网站内部,不需要用户操作是自动生成和跳转的,那也没有把它缩短的必要。但是如果我想把这个地址分享到外部平台或者发送给别人,那使用这种地址就很痛苦了。由此,我们需要设计一个系统,能够把这么长的地址,转换成一个相对较短的地址。并且当用户点击短链时,还能回到原来长链对应的内容。

2023-10-10 14:50:44 83

原创 通过位运算打多个标记

比如Java中的读写锁ReentrantReadWriteLock,就是通过在内部表示锁状态的state变量上的低16位,表示写锁,高16位,表示读锁。如果每增加一个类型,都增加一个字段标记是或者否的话,那每行记录的字段数,得增加到多少?还是可以通过不同位置标记1还是0实现,比如一个Long型标记,可以在低53位记录一个标记,在高10位记录另一个标记。引申一下,如果需要在一个字段中,记录多个标记,通过位运算,又该怎么实现呢?在实际的开发中,经常有这样的需求,需要用尽可能少的字段,记录多个标记?

2023-09-05 23:24:27 767

原创 RocketMQ事务消息原理简析

在项目中,经常遇到这样一个场景,需要保证数据持久化和消息发送要么同时成功,要么同时失败。比如当用户在交易系统下了一个订单,购物车需要消费订单消息清除加购数据、积分系统需要变更用户积分、短信平台需要给买家发送提醒等,交易系统要将订单落入DB和发送订单消息保证一致。利用RocketMQ事务消息特性,就可以达到这个目的。本文将探究RocketMQ事务消息使用方法及实现原理

2023-01-13 16:56:43 682

原创 Spring自定义标签

为什么需要自定义标签?提供可配置化支持比如事务注解,配置即开启事务<tx:annotation-driven transaction-manager="transactionManager" />如何自定义标签1.创建一个需要拓展的组件@Datapublic class User { /** * 相当于BeanName */ private String id; private String username; pri

2022-05-31 13:54:04 377 2

原创 简述乐观锁和悲观锁

简述乐观锁和悲观锁乐观锁和悲观锁都是一种思想,并不是真实存在于数据库中的一种机制。悲观锁当认为数据被并发修改的几率比较大,需要在修改之前借助于数据库锁机制,先对数据进行加锁的思想被称为悲观锁,又称PCC(Pessimistic Concurrency Control)。在效率方面,处理锁的操作会产生了额外的开销,而且增加了死锁的机会。当一个线程在处理某行数据的时候,其它线程只能等待。悲观锁...

2019-04-08 15:01:21 6882

原创 简述正向代理和反向代理

正向代理和反向代理正向代理是一个位于客户端和目标服务器之间的服务器(代理服务器),为了从目标服务器取得内容,客户端向代理服务器发送一个请求并指定目标,然后代理服务器向目标服务器转交请求并将获得的内容返回给客户端。比如科学上网。正向代理是代理服务器代理了客户端,和目标服务器进行交互。目标服务器不知道真正的客户端是谁。正向代理可以突破访问的限制,比如科学上网。正向代理可以通过代理服务器的缓...

2019-03-02 11:46:53 333

原创 Session和Cookie

Session和Cookie关于网络编程中的会话,维基百科是这样解释的:在计算机科学领域来说,尤其是在网络领域,会话(session)是一种持久网络协议,在用户(或用户代理)端和服务器端之间创建关联,从而起到交换数据包的作用机制,session在网络协议(例如telnet或FTP)中是非常重要的部分。在不包含会话层(例如UDP)或者是无法长时间驻留会话层(例如HTTP)的传输协议中,会话的...

2018-12-25 15:19:50 161

原创 HashSet、LinkedHashSet源码解析

HashSet、LinkedHashSet源码解析HashMap的底层结构是HashMap,所以很多方法也是调用Map的方法来实现的。LinkedHashSet是HashSet的子类,只是它的底层结构是LinkedHashMap,它的大部分方法也是调用父类HashSet实现的1.总体概览HashSet的继承体系:LinkedHashSet的继承体系:2.属性分析private tr...

2018-11-29 11:30:58 411

原创 LinkedList源码分析

LinkedList源码分析1.总体概览LinkedList的继承体系:2.属性分析LinkedList总共有三个属性:transient int size = 0;transient Node&lt;E&gt; first;transient Node&lt;E&gt; last;size:即是LinkedList的大小Node first:即是LinkedList...

2018-11-12 23:12:41 130

原创 Lambda表达式初探

Lambda表达式初探Lambda表达式是java8的重要更新,是被广大开发者期待已久的新特性。使用Lambda表达式可以用更简洁的代码来创建函数式接口的实例。lambda表达式的类型,也被称为目标类型,Lambda表达式的目标类型必须是函数式接口。函数式接口代表只包含一个抽象方法的接口,函数式接口可以包含多个默认方法、类方法、但只能声明一个抽象方法。使用@FunctionalInterfac...

2018-11-10 15:22:44 141

原创 深入理解JVM(一):运行时数据区

深入理解JVM(一):运行时数据区运行时数据区JVM在执行java程序的过程中,会把内存分为几个不同的数据区域,如上图所示。程序计数器虽然图片中程序计数器所占的面积比较大,但实际上程序计数器所占的内存非常小,也是唯一一块在所有JVM中都没有规定OOM的区域。它的作用是当前线程所执行的字节码的行号指示器、字节码行号的记录器。在JVM的概念模型中,字节码解释器就是通过读取和改变这个计数器的...

2018-10-31 16:29:42 144

原创 设计模式总结(7)

设计模式总结(7)建造者模式建造者模式用于解决在细节上经常变化,但是组合上却相对稳定的场景。比如我们去快餐店点餐,可能有时候点的是素食汉堡,有时候点的是鸡肉汉堡,但不管点的是哪种汉堡,它们都是装在纸盒中的;同理,有时候喝的的百事可乐,有时候喝的是可口可乐,它们都是状态瓶子中的。虽然点的餐不同,但是组合是大致不变的,变的只是价格和食材。**优点:**建造者独立易拓展,便于控制细节**缺点:*...

2018-10-29 10:27:56 105

原创 设计模式总结(6)

设计模式总结(6)抽象工厂模式抽象工厂模式是对工厂模式的"抽象",负责创建实现类的工厂从底层向上,首先创建两个不同功能的接口,所有具体的实现类都是实现这两个接口:interface Shape { void draw();}interface Color { void fill();}创建实现这些接口的具体实现类:class Rectangle impleme...

2018-10-26 16:30:09 99

原创 设计模式总结(5)

设计模式总结(5)工厂模式工厂模式是java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。比如hibernate框架在更换数据库时只需要更换方言和驱动即可。**优点:**对外隐藏实现逻辑,调用不同的对象只需要知道类名即可;拓展性高,增加相似功能时...

2018-10-26 15:02:07 116

原创 ArrayList源码解析

ArrayList源码解析1.总体概览  ArrayList的继承体系:蓝色的是继承关系绿色虚线是实现关系  ArrayList的定义:public class ArrayList&lt;E&gt; extends AbstractList&lt;E&gt; implements List&lt;E&gt;, RandomAccess, Cloneable, ja...

2018-10-13 14:43:44 106

原创 equals()和hashCode()

equals()和hashCode()String中的equals()和hashCode()equals():1.首先比较两个对象的引用,若引用相同,则返回true2.判断anObject是否是String类型,如果是,将两个字符串转为字节数组逐字节进行比对,始终相同返回true,有一个字节不同返回false3.返回falsepublic boolean equals(Object a...

2018-10-02 16:46:04 124

原创 设计模式总结(4)

设计模式总结(4)多例模式单例模式限制了只能使用一个实例,有时候为了提高效率需要有限个相同的实例以供使用public class Emperor { /** * 可以产生实例个数 */ private static int maxNumOfEmperor = 2; /** * 实例信息 */ private static...

2018-10-02 09:52:31 106

原创 设计模式总结(3)

设计模式总结(3)观察者模式观察者模式定义了对象间的一种一对多的依赖关系,当被依赖的对象发生了改变的时候,所有依赖的类都会得到通知并自动更新。观察者观察者角色一般是一个接口,它只有一个update方法,在被观察者状态发生变化时,这个方法就会被触发调用interface Observer { public void update();}具体的观察者观察者接口的具体实现,在这...

2018-09-22 15:12:24 104

原创 设计模式总结(1)

设计模式总结(1)单例模式单例模式是java设计模式中较为简单但使用广泛的一种创建型模式。使用这种设计模式的类不需要实例化,可以直接使用并且只能有一个自己创建的实例。这样的优点是在一个类如果需要被频繁使用的场景下可以减少内存开销。单例模式有多种实现方法:饿汉式** * 饿汉式 */class Singleton1 { private static Singleton1 si...

2018-09-22 14:58:35 99

原创 设计模式总结(2)

设计模式总结(2)策略模式如果写了一个接口的多个实现类,而这些实现类功能相似,这个时候若还使用传统的类似if…else…的方法进行判断,其效率会非常低下。可以将这些功能相似的实现类封装起来,使它们可以相似替换。这就是策略模式。策略模式是一种行为型模式,类的行为或者算法可以在运行时更改。抽象策略通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类来封装这部分公共的代码,此时...

2018-09-22 14:57:54 95

原创 Spring的事务管理

Spring的事务管理事务概念1.什么是事务 “一荣俱荣,一损俱损”这句话很能体现事务的思想,很多复杂的事务要分布进行,但它们组成了一个整体,要么整体生效,要么整体失效。这种思想反映在数据库上,就是多条sql语句,要么所有执行成功,要么所有执行失败。 2.事务的四个特性(ACID) - 原子性(Atomic):表示组成的一个事务的多个数据库操作是一个不可分割的原子单元,只有所有...

2018-09-16 23:53:26 153

原创 Spring中的jdbcTemplate操作

Spring中的jdbcTemplate操作准备工作1.设置数据库信息 DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.setUrl("jdbc:mysql...

2018-09-04 23:10:42 128

原创 SpringMVC拦截器

SpringMVC拦截器拦截器的定义自定义的拦截器需要实现一个接口HandlerInterceptor,并实现接口的三个方法:public class UserHandlerInterceptor implements HandlerInterceptor { /** * 该方法在目标方法之前被调用 * 若返回值为true,则继续调用后续的拦截器和目标方...

2018-09-02 23:22:37 91

原创 AOP面向切面编程

AOP面向切面编程aop:面向切面编程,采取的是横向抽取机制,取代了传统的纵向继承体系重复性的代码,简单的来说就是拓展功能的时候可以不通过修改源码实现。举个例子,在最原始的机制中,当我们要给一个类中的方法添加某个功能的时候,比如为了后期维护系统方便,要给方法添加日志打印的功能,这个时候只能通过修改源代码的方式实现,当系统中有很多类的时候,修改源代码就显得费时费力了。这个时候可以采用纵向...

2018-09-02 17:45:50 704

原创 接口和抽象类的区别

抽象类和接口的区别1.抽象类  在了解抽象类之前先了解抽象方法,抽象方法是一种特殊的方法,它只有声明,没有具体的实现,声明格式为: abstract void fun();   抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,那么这个类就是抽象类。因为抽象类含有未实现的方法,所以抽象类不能实现。所以抽象类视为了继承而存在的。如果定义了一个抽...

2018-08-19 17:47:53 1309

原创 为springMVC的controller编写测试方法

新建一个controller:@RequestMapping("controllerTest")public String controllerTest(User user) { user.setAge( 0 ); //返回json return JSON.toJSONString(user);}用到的User类:public class User im...

2018-08-10 15:56:43 1771

原创 SpringMVC自定义数据转换

将string类型转换为Date类型:定义一个转换器StringToDate.java:public class StringToDate implements Converter&lt;String,Date&gt; { public Date convert(String source) { // TODO Auto-generated method...

2018-07-30 15:58:07 157

原创 SpringMVC实现文件上传与下载

单文件上传:pom.xml:&lt;dependency&gt; &lt;groupId&gt;commons-io&lt;/groupId&gt; &lt;artifactId&gt;commons-io&lt;/artifactId&gt; &lt;version&gt;1.3.2&lt;/version&gt;&lt;/dependency&amp

2018-07-28 14:38:32 143

转载 IDEA中SVN项目不同颜色含义

绿色,已经加入控制暂未提交红色,未加入版本控制蓝色,加入,已提交,有改动白色,加入,已提交,无改动灰色:版本控制已忽略文件

2018-07-19 10:15:44 11871 4

原创 Linux下mysql的远程连接与开启关闭MySQL服务

Linux下mysql的远程连接1.登录数据库2.创建用户远程连接    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;3.执行flush privileges;命令立即生效Linux启动与关闭mysql服务    service MySQL start;    service My...

2018-03-24 23:24:32 2222

原创 tomcat启动报错Cannot find ./catalina.sh

tomcat启动报错Cannot find ./catalina.shThe file is absent or does not have execute permissionThis file is needed to run this program原因:没有权限解决 : chmod 777 *.sh    GMT   Det...

2018-03-24 23:21:57 952

原创 Linux常用命令

ls  查看当前文件夹下的内容 文件夹以蓝色显示,文件以白色显示 -a 显示所有文件夹(包括隐藏文件) -l 以列表方式显示文件的详细信息 -h 配合-l人性化显示文件详细信息(ls -l -h/ls -lh) 通配符 * 代表任意个字符 ?代表任意一个字符,至少1个 [] 代表可以匹配字符组中的任意一个 [abc] 代表匹配a、b、c中任意一个 [a-f] 代表从a到f范围中任意一个字...

2018-03-24 23:20:37 151

原创 ubuntu安装Java和MySQL

安装Java 1.添加ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get update 2.安装jdk8 sudo apt-get install oracle-java8-installer 3.设置系统默认jdk sudo update-java-alternatives -s java-8-oracle 安...

2018-03-24 23:17:56 334

转载 Ubuntu 16.04 LTS 删除不常用的软件

软件包清单libreoffice-common libreoffice(可以换 WPS)unity-webapps-common Amazon 链接thunderbird 雷鸟邮件客户端totem 自带的播放器rhythmbox 自带的音乐播放器empathy 自带的即时聊天应用brasero 自带的光盘刻录器simple-scan 扫描仪gnome-mahjongg 对对碰游戏aisleriot...

2018-01-07 13:52:27 11635

原创 hibernate约束

hibernate.cfg.xml<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> com.mysql.jdbc.Dr

2018-01-05 17:06:37 2281

原创 检测变量是否存在的方法

一般检测一个变量是否存在一般用if语句:if (true) {}但是这种检测方法存在一个问题,当检测的条件本来就是false时,将会出错,如:var result=false;if (result) alert("该变量已存在");else alert("该变量不存在");所以一个更好的检测方法是使用typeof操作符:var result=""if(typeof so

2016-11-17 19:56:43 1360 2

原创 javascript dom 编程艺术第十章的一个问题

最近在看《Javascript Dom编程艺术》,在阅读到第十章“用javascript实现动画效果”时遇到一个问题,思考之后记录在此。function moveElement(elementID,final_x,final_y,interval){ if(!document.getElementById(elementID)){ return false; } var elem = d...

2016-11-03 11:26:00 1205

原创 理解函数参数

即便你定义的函数只接受两个参数,在调用这个函数的时候也未必一定要传递两个参数。可以传递一个,三个甚至不传递参数。因为ECMAScript的参数在内部是用一个数组来表示的。function sayHi(){ for(var i=0;i<arguments.length;i++){ alert("hello "+arguments[i]);

2016-10-27 15:02:16 279

原创 CSS定位详解

1.相对定位(relative):(1)不会影响元素本身的特征(2)元素不脱离文档流,元素移动之后原始位置被保留。(3)如果没有设置偏移量,对元素没有任何影响。(4)提升层级,移动之后会覆盖原来的元素。 div{ border: 1px solid black; } #all{ width: 500px; height: 500px; position:

2016-10-23 13:01:42 322

原创 CSS解决父元素坍塌的问题

在涉及到浮动的时候,有时候会出现父元素“坍塌”的情况,类似这样:.all{ border:1px solid red;}.box{ width:100px; height:100px; border:1px solid blue; padding:20px; margin:10px; float:left;} box1 box2

2016-10-22 22:52:43 1881

Spring框架2016版视频资料

黑马程序员,传智播客Spring框架2016版视频资料需要的人下载

2018-02-19

hibernate框架开发2016版视频资料

黑马程序员,传智播客hibernate框架开发2016版视频资料

2018-02-19

空空如也

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

TA关注的人

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