- 博客(21)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 《大型网站技术架构》学习笔记
大型网站技术架构大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,任何简单的业务一旦需要处理数以PB计的数据和面对数以亿计的用户,问题就会变得很棘手。大型网站架构主要就是解决这类问题。这个世界没有哪个网站从诞生起就是大型网站;也没有哪个网站第一次发布就拥有庞大的用户,高并发的访问,海量的数据;大型网站都是从小型网站发展而来。网站的价值在于它能为用户提供什么价值,在于网站能做什...
2019-03-25 16:48:35
2839
1
原创 CentOS7环境下使用Docker配置ElasticSearch集群、MongoDB和Tomcat多实例
DockerDocker这玩意确实好用。对开发的影响不大,但对于部署来说,是场革命。实现更轻量级的虚拟化,方便快速部署;可以极大的减少部署的时间成本和人力成本。docker配置MongoDBdocker配置es把镜像配置为容器docker run -d -p 9200:9200 -p 9300:9300 --name es elasticsearch:2.4.4-d后台启动 -p端口...
2019-06-19 16:15:17
430
原创 七牛云存储域名配置和JavaAPI使用
七牛云存储域名配置和JavaAPI使用七牛云存储的测试域名只能试用一个月(国家为了链接实名化可溯源,据传之前有人使用七牛的测试域名传播淫秽信息),所以我们需要配置自己的域名来在七牛云添加融合cdn域名。使用自己的二级域名,如cdn.whichard.cn 得到一个cname记录腾讯云配置cname:把得到的cname填到记录值处,主机记录处注意:填写二级域名cdn即可,不是填写cd...
2019-06-13 22:09:59
1343
原创 ElasticSearch集群原理和版本问题采坑
elasticsearch设计的理念就是分布式搜索引擎,底层实现还是基于Lucene的,核心思想是在多态机器上启动多个es进程实例,组成一个es集群。es的索引数据存储结构:es中,存储数据的基本单位就是索引,一个索引就像数据库。而type就相当于每一张表,一个index里面可以有多个type,而mapping就相当于表的结构定义,定义了什么字段类型等,你往index的一个type里添加一行数...
2019-06-10 16:57:51
1113
原创 ElasticSearch中的数据结构
本文总结了ElasticSearch中用于性能优化所用到的几种数据结构,如用于压缩倒排索引内存存储空间的FST,用于查询条件合并的SkipList以及用于提高范围查找效率的BKDTree,对这几种数据结构在Lucene中的使用进行了详细分析。倒排索引(Inverted Index)存储很多数据结构均能完成字典功能,总结如下。数据结构优缺点排序列表Array/List使用...
2019-06-03 16:13:31
20044
1
原创 Redis应用与原理(4) Redis分布式锁实现II -- 上一章的实现竟然有这些BUG?
上次我们介绍了SETNX + GETSET的方式实现分布式锁,这是老版本Redis中最常用的实现分布式锁的方法,但该方法存在以下问题:由于是客户端自己生成过期时间,所以需要强制要求分布式下每个客户端的时间必须同步。当锁过期的时候,如果多个客户端同时执行jedis.getSet()方法,那么虽然最终只有一个客户端可以加锁,但是这个客户端的锁的过期时间可能被其他客户端覆盖。锁不具备拥有者标识,...
2019-04-15 13:25:21
156
原创 Redis应用与原理(3) Redis分布式锁实现
使用redis的setnx()、get()、getset()方法,用于分布式锁原理这个方案的背景主要是在setnx()和expire()的方案上针对可能存在的死锁问题,做了一版优化。那么先说明一下这三个命令,对于setnx()和get()这两个命令,相信不用再多说什么。那么getset()命令?这个命令主要有两个参数 getset(key,newValue)。该方法是原子的,对key设置ne...
2019-04-08 18:53:06
221
1
原创 Redis应用与原理(2) Redis数据结构 源码解析
数据结构内存寸土寸金,能省则省,Redis在这一部分的设计思路便是节约简单的C字符串无法满足Redis的需求,开发者设计了数据结构Simple Dynamic String用于存取字符串。struct sdshdr { unsigned int len; unsigned int free; char buf[];};比起C字符串,SDS具有以下优点:1)常数...
2019-04-01 16:20:07
350
原创 Redis应用与原理(1) Redis五种数据结构
面试重点, 需要阅读面经问题。Redis关系型数据库。内存缓存数据库。Redis数据结构Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。String等价于java中的map, 键值对. 通过set和get命令存取.redis 的 string 可以包含任何数据。比如jpg图片或者序列化...
2019-04-01 16:15:21
190
原创 MySQL语法和基础知识总结
主键(primary key)一列(或一组列),其值能够唯一区分表中每个行。表中的任何列都可以作为主键,只要它满足以下条件: 任意两行都不具有相同的主键值; 每个行都必须具有一个主键值(主键列不允许NULL值)主键的最好习惯 除MySQL强制实施的规则外,应该坚持的几个普遍认可的最好习惯为: 不更新主键列中的值; 不重用主键列的值; 不在主键列中使用可能会更改的值。(例如...
2019-03-18 11:16:04
376
原创 awk grep sed sort curl Linux常用的终端命令总结
grep查找行 sort排序 sed编辑 awk处理ps -ef|grep java 查看所有包含关键字java的进程ps aux|grep java 查看所有包含关键字java的进程,显示详细的运行信息ps –ef|grep tomcat 查看所有有关tomcat的进程ps aux 查看所有进程, 显示详细运行信息kill -9 19979 终止线程号位19979的进程ls -al ...
2019-03-04 16:40:06
842
原创 RabbitMQ教程 入门指南 原理解析分析
MQ: Message Queue, 消息队列。开发者谈起名Rabbit:像兔子那样行动迅捷,而又拥有超强的繁殖力。类比记忆:消息 - 信件, 生产者 - 寄信者,消费者 - 收信人,Queue - 邮局,Exchange - 邮递员/邮箱。RabbitMQ是一个实现了AMQP(Advanced Message Queuing Protocol)高级消息队列协议的消息队列服务,用Erlang...
2019-03-04 16:35:23
241
原创 Java源码分析之ArrayList 源码分析解析教程(基于Java8 JDK8)
总结增删改查中, 增导致扩容,则会修改modCount,删一定会修改。 改和查一定不会修改modCount。扩容操作会导致数组复制,**批量删除会导致 找出两个集合的交集,以及数组复制操作,**因此,增、删都相对低效。 而 改、查都是很高效的操作。因此,结合特点,在使用中,以Android中最常用的展示列表为例,列表滑动时需要展示每一个Item(element)的数组,所以 查 ...
2019-03-04 16:34:22
110
原创 开发面试 TopK问题 从排序算法优化的角度分析海量数据TopK优化问题
海量数据的TopK问题几乎是后台开发面试必备题,本文从排序算法从0优化的角度分析TopK问题的优化。什么是TopK问题:给定一个很大的数据量n,要求从n中提取出最大/最小/重复频度最高的K个数(K相对于n较小,如n为10亿量级,而K为100)。解决这个问题,很容易想到要使用排序算法,首先,使用方法1笨办法 – 全部排序,解出来再说。将n个数全部排序使用普通排序,将n个数全部排序之后,取...
2019-02-28 13:38:55
645
原创 Spring入门教程 学习笔记 IOC控制反转DI依赖注入AOP面向切面编程详细解析
SpringSpring框架是以简化Java EE应用程序的开发为目标而创建的DI和AOP: 基于注解+反射+动态代理,见《java编程的逻辑》p573、p584用Java实现AOP面向切面编程 Aspect Oriented Programming在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将...
2019-02-28 13:31:33
599
1
原创 Session和Cookie的关系. Cookie禁用之后Session是否受到影响?
由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保...
2019-02-22 11:18:45
1095
原创 JVM GC垃圾收集器详解
垃圾收集器GC主要用于JVM堆内存的管理自动化,分析需要回收的内存依靠的算法为可达性分析。收集器串行、并行or并发新生代/老年代算法目标适用场景Serial串行新生代复制算法响应速度优先单CPU环境下的Client模式Serial Old串行老年代标记-整理响应速度优先单CPU环境下的Client模式、CMS的后备预案ParNew并...
2019-02-22 11:17:45
310
原创 JVM类加载过程详解 & 类加载器的两种架构模型:双亲委派模型和OSGi模块化模型
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。类加载的过程包括了加载、验证、准备、解析、初始化五个阶段 (验证、准备、解析合称连接阶段)记:加载-验证,准备-解析,初始化加载载入字节流 加载时类加载过程的第一个阶段,在加载阶段,虚拟机需要完成以下三件事情:通过一个类的全限定名来获取其定义的二进制字节...
2019-02-22 10:32:35
491
原创 Java代码优化技术 编译期优化 - 前期优化,运行时优化 - 后期优化
优化分为编译期优化和运行时优化编译期优化前端编译:字节流 -> 抽象语法树 -> jvm规范class字节码javac优化:语法糖:在编译期解语法糖。泛型及其擦除,自动拆装箱,Foreach循环,变长参数,条件编译,内部类,枚举类,断言语句,对字符串的switch支持,字符串加法泛型java中的泛型只存在于源码中,会在编译期间替换为原生类型,在字节码中已经不存在泛型,...
2019-02-22 10:17:50
286
原创 《Java编程的逻辑》学习笔记
Java编程的逻辑编程基础基本数据类型分类整数类型:有4种整型byte/short/int/long,分别有不同的取值范围: 8, 16, 32, 64位,(1,2,4,8个字节) 存放(-27~27-1, …, -231~231-1,…)在给long类型赋值时,如果常量超过了int的表示范围,需要在常量后面加大写或小写字母L,因为数字常量默认为是int类型。 类似的, 对于floa...
2019-02-21 16:28:38
792
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人