数据迁移目标能够描述项目数据迁移的方案了解hbase的特点能够熟悉数据迁移中的数据包装和转换能够完成文章数据的全量和增量迁移能够完成热点文章数据的迁移1 为什么需要自动同步因为MySQL保存着我们爬取的以及自建的数据,对于爬取的数据,数据量比较大,使用mysql 存储会影响mysql的性能,并且我们需要对数据进
在资深开发的日常,经常能遇见和Page Cache相关场景:的load飙高的I/O吞吐飙高业务响应时延出现大的毛刺业务平均访问时延明显增加。这些问题,很可能是由于Page Cache管理不到位引起的,因为Page Cache管理不当除了会增加系统I/O吞吐外,还会引起业务性能抖动。这类问题出现后,开发人员往往
1 spring单例 V.S 设计模式的单例设计模式单例,在整个应用中只有一个实例spring单例,在一个IoC容器中只有一个实例但spring中的单例也不影响应用并发访问。大多数时候客户端都在访问我们应用中的业务对象,为减少并发控制,不应该在业务对象中设置那些容易造成出错的成员变量。成员变量的解决方式方法的参数,局部变量(相当于new)threadlocal、设置bean scope=proto
0 前言下单做一次支付,若还是使用HTTP协议,可能会被盯上。 你发送个请求,买娃娃,但该网络包被截获,于是在服务器回复你之前,先假装自己就是电商网站,然后给你回复一个假消息:“好呀,来把银行卡号、密码拿来。” 这时你真把银行卡密码发给它,就中招了。怎么解决这种问题?一般想法就是加密:对称加密加密、解密使用相同密钥。因此,要保证安全性,密钥就要做好保密。非对称加密加密使用的密钥和解密使用的密钥不同
暴力的直接Map对象toString()存,后面取出是就是用再转换为MapString转Map:JSONObject jsonobject = JSONObject.fromObject(str);rMap = (Map<S
静态工厂和构造器都有个局限:不能对大量可选参数做很好的扩展。比如一个类,表示包装食品上的营养标签。这些标签上有一些字段是必需的,如:净含量、毛重和每单位份量的卡路里;另有超过 20 个可选的字段,如:总脂肪、饱和脂肪、反式脂肪、胆固醇、钠等等。大多数产品只有这些
1 为什么面试官爱问这种面试题?因为招聘中大家都有这个要求。技术强的人,在互联网公司肯定负责过高并发模块,那夺取offer太简单了。可惜大部分初级工程师甚至高并发代码都没想过怎么写!不是说只要用个redis缓存,用个mq异步削峰就搞定了!真实的要复杂很多倍。面试官问你如何设计一个高
1 屈服于现实的磁盘MQ都使用磁盘来存储消息。这样服务器下电也不会丢数据。绝大多数用于生产系统的服务器,都会使用多块磁盘组成磁盘阵列,这样即使其中的一块异常,也可把数据从其他磁盘中恢复。另外磁盘也便宜,就可用较低成本,存储海量消息。所以,不仅仅是MQ,几乎所有存储
接口只是定义了一个标准,很多类可以实现这个接口:List list = new ArrayList(); // 实例化的是ArrayList这个类List list = new Vector(); // 实例化的是Vector这个类 其中:ArrayList 和 Vector 这两个类都实现了List接口A instanceof B 的作用:1、 对象A是否为B类的对象:objA instanceof B.class2、A对象是否实现了B接口我们平时经常用到以下代码:接口可被
1 概述该模式用在想使用 JNDI 查询定位各种服务时。由于为某个服务查找 JNDI 的代价很高,服务定位器模式(后文简称为 SLP)充分利用了缓存技术。在首次请求某服务时,服务定位器在 JNDI 中查找服务,并缓存该服务对象。当再次请求相同服务时,服务定位器会在它的缓存中查找,这可极大提高应用程序的性能。2 构成服务(Service)实际处理请求的服务。对该服务的引用可在 JNDI 服务器中查到Context / 初始的 ContextJNDI Context 带有对要查找的服务的引用服
在ZooKeeper、Netty、Quartz、Kafka 以及 Linux 都需要定时任务的管理功能。JDK 提供的 java.util.Timer 和 DelayedQueue 等工具类,可以帮助我们实现简单的定时任务管理,其底层实现使用的是堆这种数据结构,存取操作的复杂度都是 O(nlog(n)),无法支持大量的定时任务。在定时任务量比较大、性能要求比较高的场景中,为了将定时任务的存取操作以及取消操作的时间复杂度降为 O(1),一般会使用时间轮的方式。时间轮是一种高效的、批量管理定时任务的调度模型
1 为什么需要新的日期和时间库?Java开发人员的一个长期烦恼是对普通开发人员的日期和时间用例的支持不足。例如,现有的类(例如java.util.Date和SimpleDateFormatter)是非线程安全的,从而导致用户潜在的并发问题,这不是一般开发人员在编写日期处理代码时会期望处理的问题。一些日期和时间类还表现出相当差的API设计。例如,年份java.util.Date从1900开始,月份从1开始,天从0开始,这不是很直观。这些问题以及其他一些问题导致第三方日期和时间库(例如Joda-Time
HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成。响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599)。状态代码由 section 10 of RFC 2616定义信息响应100 Continue这个临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它。101 Switching Protocol该代码是响应客户端的 Upgrade 标头发送的,并且
内部类会用到,类在JVM是最顶级的,即使是内部类,编译以后,都会存在外部类$1这样的class文件;外部类是能完全访问内部的方法的,即使是private,但编译后编程2个文件了,怎么访问的,就是通过synthetic标识位实现的。在额外分享两篇R大关于逃逸分析的文章,里面涉及到了。http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2016-September/024535.htmlhttp://mail.openjdk.java.n
class SendResponse(request: Request, val responseSend: Send, val responseAsString: Option[String], val onCompleteCallback: Option[Send => Unit]) extends Response(request) { ......
面试题加锁和释放没有配对锁自动释放导致的重复逻辑执行的问题有什么方法来发现和解决这两种问题?讲解锁释放和重复执行问题:锁建议使用synchronized,在JDK1.6后,synchronized与Lock性能上差距很小了(优化了很多,自旋锁,自适应自旋锁、偏向锁,轻量级锁等),synchronized也不用程序获取和释放锁,同步代码块是通过monitorenter monitorexit实现的,同步方法是方法头中有ACC_SYNCHRONIZED标志;在分布式场景下,可以考虑etcd,etc
13 | 日志:日志记录真没你想象的那么简单2020-04-07 朱晔你好,我是朱晔。今天,我和你分享的是,记录日志可能会踩的坑。一些同学可能要说了,记录日志还不简单,无非是几个常用的API方法,比如debug、info、warn、error;但我就见过不少坑都是记录日志引起的,容易出错主要在于三个方面:日志框架众多,不同的类库可能会使用不同的日志框架,如何兼容是一个问题。配置复杂且容易出错。日志配置文件通常很复杂,因此有些开发同学会从其他项目或者网络上复制一份配置文件,但却不知道如何修改,甚至是
1 Period类方法getYears(),getMonths()和getDays()。import java.time.LocalDate;import java.time.Month;import java.time.Period;public class Test { public static void main(String[] args) { LocalDate today = LocalDate.now(); System.out.prin
1 SimpleDateFormat 之坑1.1 格式化1.1.1 案例初始化一个Calendar,设置日期2020年12月29日日志这是由于混淆SimpleDateFormat的各种格式化模式:小写y是年大写Y是week year,即所在的周属于哪一年一年第一周的判断方式从getFirstDayOfWeek()开始,完整的7天,并且包含那一年至少getMinimalDaysInFirstWeek()天。该计算方式和区域相关,对zh_CN区域,2020年第一周条件:从
我们会使用各种池化技术缓存 创建性能开销较大的 对象,比如线程池、连接池、内存池。它们的原理都是预先创建一些对象入池,使用时直接取出,用完归还以复用,还会通过策略调整池中缓存对象的数量,实现动态伸缩性。由于线程的创建比较昂贵,短平快的任务一般考虑使用线程池处理,而非直接创建线程。手动声明线程池JDK的Executors工具类定义了很多便捷的方法可以快速创建线程池。但是阿里有话说:我们来看他说的弊端案例真的这么严重吗?newFixedThreadPool 可能 OOM我们写一段测试代码,来
近年在并发算法领域的大多数研究都侧重于非阻塞算法,这种算法用底层的原子机器指令来代替锁来确保数据在并发访问中的一致性,非阻塞算法被广泛应用于OS和JVM中实现线程/进程调度机制和GC以及锁,并发数据结构中。与锁的方案相比,非阻塞算法都要复杂的多,他们在可伸缩性和活跃性上(避免死锁)都有巨大优势。非阻塞算法,顾名思义,多个线程竞争相同的数据时不会发生阻塞,因此他能在粒度更细的层次上进行协调,而且极大的减少调度开销。1 锁的劣势独占,可见性是锁要保证的。许多JVM都对非竞争的锁获取和释放做了很多优化,
1 锁的对象和范围缩小粒度2 锁的对象本身大小减少空间占用Atomic long V.S long前者是个对象,包含对象头(object header)以保存hashcode、lock 等信息,64 位系统下占16字节,64位系统下:volatile long= 8 bytesAtomicLong = 8 bytes (volatile long) + 16bytes (对象头) + 8 bytes (引用) = 32 bytes至少节约24字节!所以 Atomic* obj
RPC框架主要组成:通信框架通信协议序列化和反序列化格式1 分类RPC框架主要分为:1.1 绑定语言平台1.1.1 Dubbo国内最早开源的RPC框架,由阿里巴巴公司开发并于2011年末对外开源,仅支持Java架构Consumer 服务消费者Provider 服务提供者Registry 注册中心Monitor是监控系统交互流程Consumer通过Registry获取到Provider节点再通过Dubbo的客户端SDK与Provider建立连接,并发起调用Prov
突然看源码估计看不懂.不急,喝口红牛,我们先看图首先庖丁解牛,类似于如何把大象装入冰箱,分三步走:以排序二叉树的方式新增节点因为红黑树首先本身就是一个排序二叉树标记它为红色如果设为黑色,就会导致根到叶的路径上有一条路上,多一个额外的黑节点,打破性质 5,这个很难调整但设为红色节点后,可能会导致出现两个连续红色节点的冲突,那么可以通过颜色调换(color flips)和树旋转调整...
概述排序有内部排序和外部排序内部排序是数据记录在内存中进行排序外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存时间复杂度为最差情况下的复杂度八大排序就是内部排序当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快排,堆排,归排快
1 概述JVM : Java Virtual Machine ,也就是Java虚拟机。虚拟机是指:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统。JVM是通过软件来模拟Java字节码的指令集,是Java程序的运行环境。2 JVM核心架构设计核心功能通过ClassLoader 寻找和装载class文件解释字节码成为指令并执行,提供class文件的运行环境进行运行期间的内存分配和垃圾回收提供与硬件交互的平台一次编写,到处运行os 系统无关,但是和 JVM
new 一个 module-info.java 即可比如我们看看 java.sql 如何实现的呢?
点击上方“JavaEdge”,关注公众号设为“星标”,好文章不错过!RPC框架主要组成通信框架通信协议序列化和反序列化格式1 分类RPC框架主要分为:1.1 绑定语言平台1.1.1 ...
定义为其他对象提供一种代理,以控制对这个对象的访问,代理对象在客户端和目标对象之间起到中介的作用。结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。主要解决在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。OOP系统中,有些对象由于某些原因(比如对象创建开销很大或某些操作需安全控制,或需进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。何时使用想在访问一个类时做一些控制。如何解决:
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号