自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 促销业务类型玩法

促销,是一种营销手段,其目的主要是:提高订单量,提高客单价,去库存,扩大品牌知名度,推新品推爆品,与其他平台竞争。同时,促销很可能跟一些其他营销活动混在一起,比如一些以拉新促活为目的的营销活动等,这些营销活动通常有较强的社交属性,我们暂时只考虑纯粹促销层面的活动。在策划促销活动时,当然也包括其他营销活动时,通常要提前做好活动预算,提前做好效果预估,提前规划好数据埋点,以便在活动结束后进行复盘。同时也可以思考下,自己的促销行为是否真的健康?对于很多业务来说,促销并没有给平台带来可持续发展。很容易想到一些业

2020-12-04 13:26:57 452

原创 JAVA——玩转单链表

/** *@date 2019-12-21 11:43 **/public class LinkList { /** * 链表头结点 */ public Node head; /** * 写入时的下一个节点 */ private Node inputNode; class Node { Ob...

2020-01-01 15:02:36 114

原创 记一次mac搭建vue开发环境过程

作为一个服务端开发人员准备了解点前端开发姿势于是在自己的办公MAC上动手搭建vue开发环境。前后折腾大约3个小时左右现记录采坑点如下。采坑1:正常安装node后 node -v 出现env: node: No such file or directory各种搜索大概30分钟后找到解决方法,具体操作如下无法使用node命令,解决办法如下: 第一步:sudo brew uninstall ...

2019-12-19 15:14:21 395

原创 Redis使用注意事项

Redis功能强大,数据类型丰富,再快的系统,也经不住疯狂的滥用。通过禁用部分高风险功能,并挂上开发的枷锁,业务更能够以简洁、通用的思想去考虑问题,而不是绑定在某种实现上。Redis根据不同的用途,会有不同的持久化策略和逐出策略,所以,在使用和申请 Redis 集群前,请明确是用来做缓存还是存储。Redis的集群有主从和 cluster 两种模式,各有优缺点。以下规范不区分集群模式,我们分别从使...

2019-07-12 14:27:51 868

转载 Redis在海量数据和高并发下的8种使用场景

Redis 对于从事互联网技术工程师来说并不陌生,几乎所有的大中型企业都在使用 Redis 作为缓存数据库。是对于绝大多数企业来说只会用到它的最基础的 KV 缓存功能,还有很多 Redis 的高级功能可能都未曾认真实践过。1、KV 缓存第一个是最基础,也是最常用的就是 KV 功能,我们可以用 Redis 来缓存用户信息、会话信息、商品信息等等。下面这段代码就是通用的缓存读取逻辑:直接上...

2019-07-12 14:20:29 1106

转载 Java线程安全策略与多线程并发实践

线程安全策略1、不可变对象不可变对象(Immutable Objects)是指对象一旦被创建它的状态(对象的数据,也即对象属性值)就不能改变,任何对它的改变都应该产生一个新的对象。不可变对象需要满足的条件:对象创建以后其状态就不能修改对象所有域都是final类型对象时正确创建的(在对象创建期间,this引用没有逸出)除了使用final自行封装不可变对象之外,还可以通过以下两种方式定义...

2019-07-12 13:54:02 112

原创 Redis实现分布式锁和等待序列

package com.test import redis.clients.jedis.Jedis; import java.util.Collections; import java.util.List; /** * @desc redis队列实现方式 * @anthor * @date **/ public c...

2019-07-09 22:02:08 1790 4

原创 数据库、JVM、缓存、SQL性能调优方向

第一:Web网站调优1、尽可能减少HTTP请求:图片合并 (css sprites),Js脚本文件合并、css文件合并。2、减少DNS查询3、将css放在页面最上面,将js放在页面最下面4、压缩js和css减少文件体积,去除不必要的空白符、格式符、注释(即对代码进行格式化)5、把js和css提取出来放在外部文件中这一条要灵活运用,把js和css提取出来放在外部文件的优点是:减少htm...

2019-07-09 21:47:35 147

转载 历经8年双11流量洗礼,淘宝开放平台如何攻克技术难关?

淘宝开放平台(open.taobao.com)是阿里系统与外部系统通讯的最重要平台,每天承载百亿级的API调用,百亿级的消息推送,十亿级的数据同步,经历了8年双11成倍流量增长的洗礼。本文将为您揭开淘宝开放平台的高性能API网关、高可靠消息服务、零漏单数据同步的技术内幕。高性能API网关阿里巴巴内部的数据分布在各个独立的业务系统中,如:商品中心、交易平台、用户中心,各个独立系统间通过HSF(H...

2019-06-07 12:22:20 131

转载 Java HashMap和ConcurrentHashMap源码解析

阅读建议:四节基本上可以进行独立阅读,建议初学者可按照 Java7 HashMap -> Java7 ConcurrentHashMap -> Java8 HashMap -> Java8 ConcurrentHashMap 顺序进行阅读,可适当降低阅读门槛。阅读前提:本文分析的是源码,所以至少读者要熟悉它们的接口使用,同时,对于并发,读者至少要知道 CAS、Reentrant...

2018-10-16 13:19:54 144

原创 Java锁优化策略

    锁的优化策略    编码过程中可采取的锁优化的思路有以下几种:    1:减少锁持有时间          例如:对一个方法加锁,不如对方法中需要同步的几行代码加锁;    2:减小锁粒度  &a

2018-10-15 17:22:56 382

转载 JVM监控与调优

目录参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之。通过学习,我觉得JVM监控与调优主要的着眼点在于如何配置、如何监控、如何优化3点上。下面就将针对这3点进行学习。     (如果您对Java的...

2018-10-15 17:02:26 210

转载 Java内存区域和GC机制

目录Java垃圾回收概况Java内存区域Java对象的访问方式Java内存分配机制Java GC机制垃圾收集器Java垃圾回收概况  Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在...

2018-10-15 16:49:53 237

原创 ThreadPool优势及使用解析

1.  线程池的优点:合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如...

2018-10-14 21:00:21 395

转载 CAP原理和BASE思想

分布式领域CAP理论,Consistency(一致性), 数据一致更新,所有数据变动都是同步的Availability(可用性), 好的响应性能Partition tolerance(分区容忍性) 可靠性定理:任何分布式系统只可同时满足二点,没法三者兼顾。忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。关系数据库的ACID模型拥有 高一致性 + 可用性...

2018-09-20 18:21:06 207

转载 Java线程池详解

构造一个线程池为什么需要几个参数?如果避免线程池出现OOM?Runnable和Callable的区别是什么?本文将对这些问题一一解答,同时还将给出使用线程池的常见场景和代码片段。基础知识Executors创建线程池Java中创建线程池很简单,只需要调用Executors中相应的便捷方法即可,比如Executors.newFixedThreadPool(int nThreads),但是便捷不仅...

2018-09-20 18:18:44 140

转载 一致性Hash算法简介

一致性Hash算法背景  一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。  但现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcached缓存数据库的人都知...

2018-09-16 01:21:24 148

原创 ArrayList和LinkedList

ArrayList和LinkedList都是实现了List接口的容器类,用于存储一系列的对象引用。他们都可以对元素的增删改查进行操作。对于ArrayList,它在集合的末尾删除或添加元素所用的时间是一致的,但是在列表中间的部分添加或删除时所用时间就会大大增加。但是它在根据索引查找元素的时候速度很快。对于LinkedList则相反,它在插入、删除集合中任何位置的元素所花费的时间都是一样的,但是它根据...

2018-09-16 01:18:16 148

原创 Spring BeanFactory和FactoryBean

1. BeanFactory  BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于管理Bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。  Spring为我们提供了许多易用的BeanFactory实现,XmlBeanFactory就是常用的一个,该实现将以XML...

2018-09-16 00:00:09 133

原创 Spring中用到的九种设计模式

spring中用到的九种设计模式:第一种:简单工厂又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创...

2018-09-15 23:20:52 164

原创 线程同步之CountDownLatch

CountDownLatch的概念CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了...

2018-09-15 23:10:01 154

转载 Tomcat架构详解

一、Tomcat顶层架构先上一张Tomcat的顶层结构图(图A),如下:Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下: 1、Connec...

2018-09-14 17:23:13 139

转载 分布式文件系设计要点

一、概述分布式文件系统是分布式领域的一个基础应用,其中最著名的毫无疑问是 HDFS/GFS。如今该领域已经趋向于成熟,但了解它的设计要点和思想,对我们将来面临类似场景 / 问题时,具有借鉴意义。并且,分布式文件系统并非只有 HDFS/GFS 这一种形态,在它之外,还有其他形态各异、各有千秋的产品形态,对它们的了解,也对扩展我们的视野有所俾益。本文试图分析和思考,在分布式文件系统领域,我们要解决哪些...

2018-09-14 17:22:44 332

原创 多线程同步之——两个线程串行顺序打印奇数和偶数的两种实现

package com.test; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;public class CounterThread { private st...

2018-09-14 16:27:01 1015

原创 JAVA类加载机制及双亲委派

所谓的无关性: 我们一直在强调Java的平台无关性,所谓的一次编写,到处运行。 那么究竟是什么造就了这种平台无关性,那就是Class文件,我们注意到编译完java文件后,会产生一个Class文件,而这些Class文件在各种...

2018-09-14 16:10:58 192

转载 ClassNotFoundException和NoClassDeFoundError解析

今天又出现了NoClassDefFoundError这个错误,其实已经出现过很多次了,也知道了一般都是缺少相关Jar包之类的造成的,但是...

2018-09-14 16:04:28 1463

转载 缓存架构之防雪崩设计

使用缓存时有三个目标:第一,加快用户访问速度,提高用户体验第二,降低后端负载,减少潜在的风险,保证系统平稳第三,保证数据“尽可能”及时更新缓存穿透原因缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,但是出于容错的考虑,如果从存储层查不到数据则不写入缓存层缓存层不命中存储层不命中,所以不将空结果写回缓存返回空结果缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端...

2018-09-02 15:44:24 391

转载 JVM 内存模型概述

摘要:  我们都知道,Java程序在执行前首先会被编译成字节码文件,然后再由Java虚拟机执行这些字节码文件从而使得Java程序得以执行。事实上,在程序执行过程中,内存的使用和管理一直是值得关注的问题。Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些数据区域都有各自的用途,以及创建和销毁的时间,并且它们可以分为两种类型...

2018-09-02 14:36:14 127

原创 Java 垃圾回收机制

摘要:  Java技术体系中所提倡的 自动内存管理 最终可以归结为自动化地解决了两个问题:给对象分配内存 以及 回收分配给对象的内存,而且这两个问题针对的内存区域就是Java内存模型中的 堆区。关于对象分配内存问题,笔者的博文《JVM 内存模型概述》已经阐述了 如何划分可用空间及其涉及到的线程安全问题,本文将结合垃圾回收策略进一步给出内存分配规则。垃圾回收机...

2018-09-02 14:00:29 215

原创 Spring AOP简介

AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。一、 AOP的基本概念(1)Aspect(切面):通常是一个类,里面可以定义切入点和通知(2)JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用(3)Advice(通知):AOP在...

2018-08-16 19:17:31 93

原创 Redis的五种数据类型和基本操作

Redis的键值可以使用五种数据类型:字符串,散列表,列表,集合,有序集合字符串 字符串是Redis中最基本的数据类型,它能够存储任何类型的字符串,包含二进制数据。可以用于存储邮箱,JSON化的对象,甚至是一张图片,一个字符串允许存储的最大容量为512MB。字符串是其他四种类型的基础,与其他几种类型的区别从本质上来说只是组织字符串的方式不同而已。字符串操作 SET 赋值,用法: SET...

2018-08-14 13:58:22 161

转载 RPC消息协议设计

RPC 的消息协议设计背后的基本原理,了解 RPC 的协议开发背后有哪些需要考虑的基本点。在通晓原理之后,我们就可以自己设计一套协议来开发属于自己的 RPC 系统。本节主要涉及的知识点和它们之见的关系如下图:对于一串消息流,我们必须能确定消息边界,提取出单条消息的字节流片段,然后对这个片段按照一定的规则进行反序列化来生成相应的消息对象。消息表示指的是序列化后的消息字节流在直观上的表现形式,它看起...

2018-08-14 13:37:24 187

转载 数据传输之ZeroCopy

很多Web应用都会提供大量的静态内容,也就意味着需要从磁盘读取数据,然后将它们写入到响应socket。这看上去似乎需要很少的CPU活动,但是它有点低效:内核从磁盘读取数据,然后穿过内核—用户边界把它送往应用,接着应用再穿过内核—用户边界把它送回,并写入socket。事实上,在把数据从磁盘发往socket的过程中,应用扮...

2018-08-14 13:16:34 229

原创 volatile与synchronized区别

volatile主要用在多个线程感知实例变量被更改了场合,从而使得各个线程获得最新的值。它强制线程每次从主内存中讲到变量,而不是从线程的私有内存中读取变量,从而保证了数据的可见性。关于synchronized,可参考:JAVA多线程之Synchronized关键字–对象锁的特点比较:①volatile轻量级,只能修饰变量。synchronized重量级,还可修饰方法②volatil...

2018-08-13 18:49:43 98

原创 HashTable和HashMap的区别

一、HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。 HashMap 实现了Serializable接口,因此它支持序列化,实...

2018-08-13 18:48:30 198

空空如也

空空如也

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

TA关注的人

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