自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

memoryCoderC的博客

Make small but daily progress , Stay hungry ,Stay foolish

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

原创 生产环境问题

序列化采用更通用的方式,直接初始化实体类的时候由于多台机器代码不同导致上线一半的时候同时存在俩个版本的实体类,造成系统异常。如果采用了json的序列化方式,某些场景下就不会出现问题,在增加了字段的这种场景下就不会造成错误,...

2019-04-10 13:09:07 404

原创 mysql查询插入如果重复就更新

在MySQL中插入如果存在就更新,可以使用 ON DUPLICATE KEY UPDATE当有唯一索引时,如果唯一索引重复就会执行更新操作也可以使用分布式锁进行先查询在判断不存在再插入,存在更新.但是这只是一个简单业务,为了方便起见就使用 ON DUPLICATE KEY UPDATE进行,但是这样做会导致主键id不是连续的 insert into abnormal ...

2019-04-10 11:15:10 1624

原创 MySQL更新时根据条件判断是否要更新,解决并发场景下重复问题

在工作中遇到这样一个场景,老师可以在多个课程中选择自己可以上课的时间,但是当学生约老师的这个时间的时候就要求时间不可以有冲突(在相同的时间内只能有一个课程被约)数据库设计如下appointment表idteacher_idstart_timeend_timeappoint_status编号老师编号课程开始时间课程结束时间预约状态(0:未约,1:已约)1...

2018-10-24 15:27:25 3389

原创 源码阅读(一)HashMap

  自己刚毕业走入工作,在面试的时候被问很多源码以及实现。为了能提升自己的能力,同时找一个好的工作,决定开始阅读源码。都说Spring的源码是必看的,但自己觉得对于刚看源码的我来说会有点复杂把,决定先从jdk的一些常用简单工具的源码开始阅读,同时也是面试官总爱问的。首先,挑选了最能被问到的HashMap。这里看的是jdk10.0.1的源码。   要了解它首先要了解它的继承结构,我使用idea的J...

2018-07-22 13:41:27 264

原创 采用ip限制访问次数

由于项目可以使用burp遍历邮箱,以发现邮箱有没有被注册,所以需要采用限制ip访问次数的方式来限制采集 //获取请求的ip地址 String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) ...

2018-02-24 11:15:27 4138

转载 Dubbo tomcat启动报错

Dubbo tomcat启动报错Tomcat中duboo启动时候报错Caused by: java.lang.RuntimeException: java.io.IOException: invalid constant type: 18 at javassist.CtClassType.getClassFile2(CtClassType.java:204) ~[javassist

2018-02-02 16:07:28 949

原创 常用的idea快捷键

编辑 快捷键 功能 Ctrl+Shift +空格 补全剩余的未写 Ctrl+O 重写基类的方法 Ctrl+/ 单行注释 Ctrl+Shift+/ 多行注释 Ctrl + Alt + V 提取变量 Ctrl+I 实现抽象类接口方法 Ctrl+J 在类型上使用,加载模板 Ctrl+P 显示

2018-01-27 18:47:04 151

转载 缓存行、cpu伪共享和缓存行填充

由于在看disruptor时了解到缓存行,以及缓存行填充的问题,所以各处了解记在这里一、缓存行CPU 为了更快的执行代码。于是当从内存中读取数据时,并不是只读自己想要的部分。而是读取足够的字节来填入高速缓存行。根据不同的 CPU ,高速缓存行大小不同。如 X86 是 32BYTES ,而 ALPHA 是 64BYTES 。并且始终在第 32 个字节或第 64 个字节处对齐。这样,当 C

2017-07-07 23:23:35 4323

转载 Disruptor框架学习(为什么快)

一.锁的缺点Disruptor怎么解决悲观锁是将并行执行的代码串行化,其他线程还需要尝试着获取锁,它将比单线程执行更加慢,乐观锁要比悲观锁快上好多,但是它需要涉及操作系统。Disruptor中不使用锁,为了保证线程的安全它采用了CAS(Compare And Set/Swap)操作,它不涉及操作系统,它们直接在CPU上操作。但是它也不是没有代价。 Disruptor论文中讲述了我们所做的一个实验

2017-07-07 21:52:43 359

原创 创建型模式(一)ABSTRACT FACTORY(抽象工厂)-对象创建型模式

1.意图提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,2.别名Kit3.动机我的工厂需要生产的产品是一系列的对象,而不是一个单一的对象时需要抽象工厂来解决。 首先我们先来了解俩个概念 1)产品等级结构:即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品

2017-06-25 09:47:59 263

原创 单例模式补充

单例模式在细分之下可以有8种,它们有自己的有缺点1、饿汉式(静态常量)public class Singleton { private final static Singleton INSTANCE = new Singleton(); private Singleton(){} public static Singleton getInstance(){ retu

2017-04-13 22:10:06 185

原创 善用设计模式(三)享元模式

享元模式是设计模式中少数几个已提高系统性能为目的的模式之一。它的核心思想是:如果一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必每一次使用都创建新的对象。在享元模式中,由于需要构造和维护这些可以共享的对象,因此常常需要一个工厂类,用于创建和维护对象。 享元模式对性能的提升主要帮助主要有两点:可以节省重复创建对象的开销,因为享元模式维护的相同对象只会被创建一次,当对象创建比较耗时

2017-03-31 14:41:33 262

原创 善用设计模式(二)代理模式

使用代理模式的意图有很多,比如因为安全问题,需要屏蔽客户端直接访问真实对象;或者在远程调用中,需要使用代理类处理远程方法调用的技术细节(如RMI);也可能是为了提升系统性能,对真实的对象进行封装,从而达到延迟加载的目的。 在此主要讨论使用代理模式实现延迟加载,从而提升系统的性能和反应速度。 在系统启动时,将消耗资源多的方法使用代理模式分离,就可以加快系统的启动速度,减少用户的等待时间。在用户真正

2017-03-25 09:34:16 331

原创 善用设计模式(一)单例模式

单例模式是设计模式中使用最普遍的一种模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。 使用单例模式有俩大好处: 对于频繁使用的对象,可以省去对象创建所花费的时间,这对也那些重量级对象是很可观的。 由于new操作的减少,对系统内存的使用频率降低,这会减轻GC的压力,缩短GC的停顿时间。单例模式的核心在于通过一个接口返回唯一的对象实例。

2017-03-24 14:30:35 243

原创 java并发编程实践学习(16)Java存储模型

一、什么是存储模型,要它何用

2017-02-22 22:35:53 208

原创 java并发编程实践学习(15)原子变量与非阻塞同步机制

近来很多关于并发算法的研究机构都聚焦在非阻塞算法上,这种算法使用低层原子化的机器指令取代锁,比如比较并交换一、锁的劣势当频繁发生锁的竞争时,调度与真正用于工作的开销时间的比会变得很可观。volatile变量与锁相比是更清凉的同步机制,因为他们不会引起上下文的切换和线程调度。 加锁还有其他缺点。当一个线程正在等待锁时,它不能做任何其他事情。如果一个线程在持有锁的情况下发生了延迟,如果阻塞的线程是优先

2017-02-22 19:55:11 315

原创 java并发编程实践学习(14 ) 构建自定义的同步工具

一.管理状态依赖性在单线程化的程序中,如果调用一个方法时,依赖于状态的先验条件为满足(比如连接池非空),那么这个先验条件就无法变为真。但是在并发程序中,基于状态的先验条件会在其他线程的活动中被改变。对于并发对象,依赖于状态的方法有时可以再不能满足先验条件的情况下选择失败,不过更好的选择是等待先验条件变为真。 有一种依赖于状态的操作,能够被阻塞直到可以继续执行。内部条件队列的机制可以让线程一直阻塞,

2017-02-21 15:06:16 354

原创 java并发编程实践学习(13 ) 显示锁

与内部加锁机制不同,lock提供了无条件的,可轮询的,定时的,可中断的锁获取操作,所有的加锁和解锁的方法都是显示的。

2017-02-20 19:36:30 237

原创 java并发编程实践学习(11)性能和可伸缩性

很多改进性能的技术同样增加了复杂度,因此增加了安全和活跃度失败的可能性。11.1性能的思考无论是CPU周期、内存、网络带宽、I/O带宽、数据库请求、磁盘空间、以及其他一些资源。当活动因某个特定资源受阻时,我们称之为受限于该性能资源:受限于CPU,受限于数据库。 但是与单线程方法相比,使用多线程总会引入一些性能的开销:包括与协调相关的开销(加锁,信号,内存同步),增加上下文切换,线程的创建和消亡,以

2017-02-16 09:20:47 292

原创 java并发编程实践学习(10)死锁

安全性和活跃度通常相互制约。我们使用锁来保证线程安全,但是滥用锁可能引起锁顺序死锁。一.死锁当一个线程永远占有一个锁,而其他线程尝试去获得这个锁,那么他们将永远阻塞。当线程A占有锁L时,想要获得锁M,但是同时线程B持有M,尝试获得L,俩个线程将永远等待下去这被称作死锁(或称致命拥抱)。

2017-02-15 10:18:47 324

原创 java并发编程实践学习(9)GUI应用程序

为了维护安全,某一个任务必须运行在Swing的事件线程中。但是你不能在事件线程中执行耗时操作,以免UI失去响应。而且Swing的数据结构不是线程安全的所以你必须小心的把他们限制在事件线程中。 几乎所有的GUI工具集都是单线程化的子系统,意味着所有GUI的活动都被限制在一个单独的线程中。一.为什么GUI是单线程化的现代的GUI框架使用了一个模型:模型创建了一个专门的事件发派线程来处理GUI事件。多线

2017-02-14 14:00:06 700

原创 java并发编程实践学习(8) 应用线程池

一.任务执行策略间的隐性耦合Executor框架可以将任务的提交和执行策略解耦,但是并非能够适合所有的执行策略。有些任务需要明确指定一个执行策略:依赖性任务。如果你提交给线程池的任务要依赖于其它的任务,你就隐式的给执行策略带来了约束。这样你就必须仔细的管理执行策略以避免活跃度的问题。采用线程限制任务。单线程化的Executor相比于任意线程池,可以对同步作出更强的承诺。

2017-02-13 13:07:04 288

原创 java并发编程实践学习(7) 取消和关闭

一般来说线程在结束任务后自行停止,但有时也需要在自然结束前就停止它们。 安全、快速、可靠停止线程不容易。Thread.stop和suspend可以做到,但是它们有严重缺陷,应该避免使用。java提供了中断机制使一个线程要求另一个线程停止。立即停止会导致共享结构处于不一致的状态。当要求停止时,应该先清除当前进程中的工作然后再终止。

2017-02-12 13:08:23 303

原创 java并发编程实践学习(6 )任务执行

一.在线程中执行任务顺序的执行任务显式的为任务创建线程无限制创建线程的缺点二.Executor框架使用Executor实现的Web Server执行策略线程池Executor的生命周期延迟的并具周期性的任务三.寻找可强化的并行性可携带结果的任务Callable和Future并行运行异类任务的局限性CompletionService为任务设置时限

2017-02-11 11:01:16 349

原创 java并发编程实践学习(5)构建块为计算结果建立高效,可伸缩的高速缓存

几乎每一个服务器应用程序都会使用某种形式的高速魂村。复用已有的计算结果可以缩短等待时间,提高吞吐量,代价是占用更多的内存。

2017-02-11 00:09:29 254

原创 java并发编程实践学习(4)构建块

一.同步容器同步容器包括俩部分Vector和HashTable,这些类由Collection.synchronizedxxx工厂方法创建,这些类通过封装他们的状态,并对每一个公共方法进行同步而实现了线程的安全,这样一次只能有一个线程访问容器的状态。1.同步容器中的问题同步容器都是线程安全的。但是对于复合操作有时你可能需要使用额外的客户端加锁进行保护。这些复合操作即使没有客户端加锁技术上是线程安全的,

2017-02-09 12:04:48 303

原创 java并发编程实践学习(3)组合对象

一.设计线程安全的类设计线程安全类的过程应该包括下面3个基本要素确定对象状态是由哪些变量构成确定限制状态变量不受约束制定一个管理并发访问对象状态的策略 对象的状态首先要从域说起,如果对象的域都是基本类型,那么这些域就组成了对象的完整状态;如果一个域引用了其他对象,那么他的状态也包含了被引用的对象的域。 同步策略定义了对象如何协调对其的状态的访问,并且不会违反它的不变约束或是后验条件。他规定

2017-02-03 14:24:29 341

原创 java并发编程实践学习(2)共享对象

java,并发

2017-02-01 18:02:46 181

原创 java并发编程实践学习(1)线程安全

编写线程安全的代码就是管理对线程中的数据 共享是指一个变量可以被多个线程访问 可变是指变量的值可以在其生命周期内改变一.线程安全性**线程安全是指多个线程在访问一个类时,如果不需要额外的同步,这个类的行为仍然是正确的。1 无状态的对象永远是线程安全的@ThreadSafepublic class StatelessFactorizer implements servlet{ publi

2017-01-22 21:52:59 259

转载 java网络爬虫学习记录(二)抓包分析

抓包介绍

2016-10-04 21:48:32 1134

转载 java网络爬虫学习记录(一)概述

爬虫概述

2016-10-04 18:28:15 679

空空如也

空空如也

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

TA关注的人

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