自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MVC与MVVM的区别

MVC,MVP,MVVM是三种常见的前端架构模式。 MVC模式是MVP,MVVM模式的基础。对于MVC模式:将html看成view;js看成controller,负责处理用户与应用的交互,响应对view的操作(对事件的监听),调用Model对数据进行操作,完成model与view的同步,将js的ajax当做ModelMVVM与MVC最大的区别就是:它实现了View和Model的自动同步,也就是当Model的属性改变时,我们不用再自己手动操作Dom元素,来改变View的显示,而是改变属性后该属性对应V

2020-10-27 20:25:01 378

原创 【设计模式:行为型】装饰者模式

动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。适用场景:扩展一个类的功能或者给一个类添加附加职责给一个对象动态的添加功能,或动态撤销功能。下面我们通过一个案例来了解装饰者模式创建一个抽象类——饼public abstract class Bing { public String desc="a"; public String getDesc(){ return desc; } public void setDesc

2020-09-21 19:10:50 148

原创 缓存穿透,击穿,雪崩

穿透:用户发送缓存和数据库中都没有的请求。如id为-1的数据。解决方案:1.接口层增加校验,用户鉴权,不符合条件的不让查询。2.对于击穿的数据,可以将key-value写成key-null。缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击击穿:用户发送缓存中没有,数据库存在的数据。高并发时频繁请求会造成数据库压力过大。解决方案:1.设置热点数据永不过期。2.加互斥锁。(请求数据库前先加锁)雪崩:缓存中的大批数据到了过期时间,

2020-09-10 20:11:36 167

原创 线程安全的Hashtable, ConcurrentHashMap 的 key和value 为什么不能为null?

线程安全时不能为Null的原因:线程安全代表集合会在多线程场景下使用。假设使用map.get(key1)时返回为null。会有两种可能:1.key1不存在,所以返回为null;2.key1对应的值为null。对于单线程的HashMap,可以通过contains(key1)来检查是哪种情况;多线程场景下:假设concurrentHashMap允许存放值为null的value。有A、B两个线程。线程A调用concurrentHashMap.get(key1)方法,返回为null我们用contai

2020-08-20 17:01:29 1516 5

原创 什么是服务器的“HA部署”?“HA”是什么的简称?

HA是High Availability的简称。国内译成双机热备部署方案。 这个顾名思义就是:高可用性。 意思是为了减少系统停工时间,最大限度地保持服务的高度可用性。

2020-08-17 19:17:57 4840

原创 冒烟测试

1.冒烟测试是什么?针对每个版本或每次需求变更后,在正式测试前,对产品或系统的一次简单的验证性测试。2.冒烟测试的目的为正式测试前,验证是否产品或系统的主要需求或预置条件是否存在bug。3.冒烟测试怎么做?最好的方法,设计出自动化测试脚本,每一次版本更新后都可以去执行脚本验证一下。...

2020-08-17 16:50:26 203

原创 [GIT进阶一]git的工作空间,暂存区,本地仓库,远程仓库,GIT与SVN的区别

GIT和svn的区别:1.git是分布式版本控制系统。 svn是集中式版本控制SVN只能有一个指定中央版本库。当这个中央版本库有问题时,所有工作成员都一起瘫痪直到版本库维修完毕或者新的版本库设立完成。使用GIT做版本控制时,每一个开发人员的电脑上都有一个Local Repository,所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作,等网络再次连接上Push到Server端。2.git的版本号使用的SHA-1加密。(SHA-1和MD5一样,是一种不可逆的加密方式。)

2020-08-12 20:50:22 1098 2

原创 分布式事务的解决方案,mq消息队列如何保证数据一致性

分布式事务用户在支付完成后会调用选课表添加学生选课记录。选课记录添加完成学习即可在线开始学习。如果更新支付表成功,远程调用添加选课成功(选课数据库commit成功),最后更新支付表commit失败,此时出现操作不一致。上边的问题涉及到分布式事务控制。1、什么是分布式系统?部署在不同结点上的系统通过网络交互来完成协同工作的系统。比如:充值加积分的业务,用户在充值系统向自己的账户充钱,在积分系统中自己积分相应的增加。充值系统和积分系统是两个不同的系统,一次充值加积分的业务就需要这两个系统协同工作来完

2020-08-10 19:30:42 5061 1

原创 Variable used in lambda expression should be final or effectively final jdk1.8 lambda表达式外部变量为final

lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误。原因:在lambda表达式中对变量的操作都是基于原变量的副本,不会影响到原变量的值。假定没有要求lambda表达式外部变量为final修饰,那么开发者会误以为外部变量的值能够在lambda表达式中被改变,而这实际是不可能的,所以要求外部变量为final是在编译期以强制手段确保用户不会在lambda表达式中做修改原变量值的操作。...

2020-08-10 19:18:42 1532

原创 spring Date JPA进行增删改时不加事务,会报错 - cannot reliably process ‘remove‘ call]

int deleteById(Integer id);我用的 jpa 报错最后发现没有加 @Transactional正确写法:@Transactionalint deleteById(Integer id);

2020-08-08 14:12:55 1156

原创 抽数,数据抽取,增量数据的抽取方式

数据抽取(抽数),是指从源数据系统抽取数据到目标数据源系统。数据抽取分为全量抽取和增量抽取:全量抽取:将数据源中的表或视图原封不动的从数据库中抽取到目标系统。增量抽取:捕获变化数据,仅对自上次导出之后变化数据(增、删、改)进行抽取。对捕获方法有两点要求----1:准确 2:不要对业务系统造成太大压力捕获方法:1.触发器捕获:源表在增删改时加触发器。把变化数据录入临时表。目标系统从临时表中抽取数据。2.源表中增加时间戳,数据变化后更新时间戳值,根据时间判断去抽取。3.全表删除插入:抽取时

2020-08-05 16:28:44 6811

原创 mysql删除表

1、Delete from 表名; 这个语句可以删除表中的所有记录,但表的结构仍然存在。特点是删除速度慢,当表中记录超过百万级时,删除记录的时间超过几个小时(大概)。但出现误操作时,通过Rollback语句可以恢复。2、truncate Table 表名 ; 这个语句无论表的记录有多,都可以在不到1秒时间删除全部记录,但表结构仍然存在。特点是速度快,无法恢复。这个语句没有删除过程,直接把记录链接指针从根上截断。操作一定要小心。3、Drop Table 表名; 这个语句是把表结构和记录一起删除,而且是立即

2020-07-28 20:01:45 2919

原创 @Value注入不生效,@Value注入静态变量

当使用@Value注入配置参数时报错,报错原因不一定是@Value注入失败。可能是用到配置参数的地方需要的是静态配置参数。所以解决办法是改成get()获取。改正前private static final Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);改正后private Auth getAuth() { return Auth.create(ACCESS_KEY, SECRET_KEY);// 密钥 }另一个问题:sp

2020-07-27 16:07:50 2168

原创 es6语法特性,解构,箭头函数,尾调用优化,proxy,primise,async,装饰器

1.let,constlet,const定义的变量,不是绑定在window下。2.解构,ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。//数组解构let [a, b, c] = [1, 2, 3];//对象解构let { foo, bar } = { foo: 'aaa', bar: 'bbb' };foo // "aaa"bar // "bbb"//字符串解构const [a, b, c, d, e] = 'hello';

2020-07-14 10:21:21 431

原创 什么是cdn?

CDN:Content Delivery Network,内容分发网络。将网站的内容发布到最接近用户的网络边缘,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。通俗的说,在用户和我们的服务器之间加一个缓存机制,动态获取IP地址根据地理位置,让用户到最近的服务器访问。CDN的工作流程: 用户在自己的浏览器中输入要访问的网站的域名,浏览器向本地DNS请求对该域名的解析,本地DNS将请求发到...

2020-01-24 21:46:47 133

原创 jQuery总结

Jquery的入口是默认等DOM树加载完就开始执行,而JS的入口等页面所有的元素加载完才执行。为了使Jq能正常使用,所以把它的入口函数也设置为所有元素加载完。(document).ready(匿名函数)或者(document).ready(匿名函数)或者(document).ready(匿名函数)或者(function(){})。//在Jquery里"$"=“jQuery”DOM对象:使用js...

2019-10-09 18:29:06 118

空空如也

空空如也

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

TA关注的人

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