
源码分析
文章平均质量分 81
java思维导图666
这个作者很懒,什么都没留下…
展开
-
源码分析Kafka之Producer
Kafka是一款很棒的消息系统,可以看看我之前写的 后端好书阅读与推荐来了解一下它的整体设计。今天我们就来深入了解一下它的实现细节(我fork了一份代码),首先关注Producer这一方。要使用kafka首先要实例化一个KafkaProducer,需要有brokerIP、序列化器等必要Properties以及acks(0、1、n)、compression、retries、batch.size等...原创 2018-11-01 16:10:45 · 175 阅读 · 0 评论 -
从一份配置清单详解Nginx服务器配置
Nginx配置文件的整体结构 nginx配置文件结构从图中可以看出主要包含以下几大部分内容:1. 全局块该部分配置主要影响Nginx全局,通常包括下面几个部分:配置运行Nginx服务器用户(组) worker process数 Nginx进程PID存放路径 错误日志的存放路径 配置文件的引入2. events块该部分配置主要影响Nginx服务器与用户的网络...原创 2018-12-17 16:34:34 · 221 阅读 · 0 评论 -
MVC的概念
MVC是Modal View Controler的缩写,原业是用于桌面程序设计中的概念,由以下三个主要部分构成,三部分各司其职。Model :模型层(用于数据库打交道) View :视图层(用于展示内容给用户看) Controller :控制层(控制业务逻辑)MVC模型如下图所示: 使用MVC的目的是将Model和View的实现代码分离,从而使同一个程序可以使用不...原创 2018-12-11 17:04:40 · 1388 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理
摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分。第...原创 2018-12-28 14:26:42 · 172 阅读 · 0 评论 -
Rabbitmq的性能测试
在做系统的整体性能测试时发现经常会卡在一个较低的QPS(单机低于100)数值,而且应用服务器的负载不高,检查MQ消费速率只有40左右。接着把目标放在消息发送端上,发现消息发送速率很低,大约40条/s。https://ke.qq.com/course/260263?flowToken=1006945 温馨提示,点击报名成功,可领取一份架构师资料, 而且可每天永久免费观看直播, 每天晚上20...原创 2018-12-29 15:13:49 · 1407 阅读 · 0 评论 -
说一说微信第三方平台的初步集成
微信火了这么久,这两周第一次从一个开发者的角度来研究微信的生态系统而不是应用本身。现在做国内的项目或者产品难免都需要集成微信,其实现在微信背后的支撑平台已经是非常繁杂的了:公众平台(订阅号、服务号、企业号、小程序) 开放平台(网页应用、移动应用、公众号第三方平台开发) 商户平台 (支付) 服务商平台(代支付)是不是感觉有点懵,这么多平台如何选择,还是需要根据自己系统的业务来看。我今...原创 2019-01-04 15:51:22 · 217 阅读 · 0 评论 -
感谢区块链,分权和数据安全 - 是未来
如今,一切都在数字化。 我们曾经存储在相册中的照片通常不再打印; 他们存储在在线相册。 而且很少有人再用实际的纸质计划者来追踪他们的生活。 相反,每日提醒和约会都存储在数字日历中。更重要的是,很少有人维护手写分类帐来跟踪他们的银行账户。有网站和应用程序为他们工作,并允许轻松访问这些数据。与此同时,多个行业的公司都将数字化存储所有文件和数据。数字网络从财务记录到人事档案都存储公司的内部数据。数...原创 2019-01-07 16:31:35 · 271 阅读 · 0 评论 -
深入理解消息中间件技术之RabbitMQ服务
什么叫消息队列?消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。...原创 2019-01-14 15:43:27 · 279 阅读 · 0 评论 -
200行代码构建一个区块链
区块链的基本概念非常简单:一个存储不断增加的有序记录的分布式数据库。然而,当我们谈论区块链时,我们很容易将其与区块链要解决的问题混淆,比如误解为流行的,基于区块链的,像比特币和以太坊一样的项目。术语“区块链”通常与交易,智能合约或加密货币等概念紧密相关。这必然使得理解区块链变成一项更艰巨的任务,特别是清楚地理解源代码。接下来我将介绍一个我用200行Javascript代码完成的超级简单的区块链...原创 2019-01-09 15:04:45 · 266 阅读 · 0 评论 -
Javascript 面试中经常被问到的三个问题!
本文不是讨论最新的 JavaScript 库、常见的开发实践或任何新的 ES6 函数。相反,在讨论 JavaScript 时,面试中通常会提到三件事。我自己也被问到这些问题,我的朋友们告诉我他们也被问到这些问题。然,这些并不是你在面试之前应该学习的唯一三件事 - 你可以通过更好地为即将到来的面试做准备 - 但面试官可能会问到下面是三个问题,来判断你对JavaScript语言的理解和的掌握...原创 2019-08-19 11:12:28 · 322 阅读 · 0 评论 -
8个问题看你是否真的懂 JS
接下来,来看看几个问题,你也可以试试想想,然后作答。问题1:浏览器控制台上会打印什么?var a = 10;function foo() { console.log(a); // ?? var a = 20;}foo();问题2:如果我们使用 let 或 const 代替 var,输出是否相同var a = 10;function foo() { ...原创 2019-08-20 16:33:59 · 258 阅读 · 0 评论 -
前端工程师为什么要学习编译原理?
前言普遍的观点认为,前端就是打好 HTML、CSS、JS 三大基础,深刻理解语义化标签,了解 N 种不同的布局方式,掌握语言的语法、特性、内置 API。再学习一些主流的前端框架,使用社区成熟的脚手架,即可快速搭建一个前端项目。胜任前端工作非常容易。再往深处学习,你会发现前端这个领域,总是有学不完的框架、工具、库,不断有新的轮子出现。技术推陈出新,版本快速迭代,但万变不离其宗。工具致力于流...原创 2019-08-20 17:14:44 · 358 阅读 · 0 评论 -
手把手教你撸一个简易的 webpack
背景随着前端复杂度的不断提升,诞生出很多打包工具,比如最先的grunt,gulp。到后来的webpack和Parcel。但是目前很多脚手架工具,比如vue-cli已经帮我们集成了一些构建工具的使用。有的时候我们可能并不知道其内部的实现原理。其实了解这些工具的工作方式可以帮助我们更好理解和使用这些工具,也方便我们在项目开发中应用。一些知识点在我们开始造轮子前,我们需要对一些知识点做一些储...原创 2019-08-20 17:50:22 · 375 阅读 · 0 评论 -
通杀 Event Loop 面试题03-JS单线程, event loop彻底搞懂代码执行顺序 浏览器工作原理
单线程的含义浏览器是 multi-process,一个浏览器只有一个 Browser Process,负责管理 Tabs、协调其他 process 和 Renderer process 存至 memory 内的 Bitmap 绘制到页面上的(pixel);在 Chrome中,一个 Tab 对应一个 Renderer Process,Renderer process 是 multi-thre...原创 2019-08-12 11:34:12 · 538 阅读 · 1 评论 -
网页图片加载优化方案
饿了么 App 中新零售项目主要是以图片展示为主,引导用户点击轮播广告栏或者店铺列表进入指定的商品页面,因此页面中包含了大量图片,如搜索框下面的轮播广告栏、中部的促销栏以及底部的店铺列表,这些区域中都有大量的展示图片。因此图片的加载速率直接影响页面的加载速度。下面将从图片加载存在的问题和原因、解决方案两个方面来阐述如何优化新零售图片的加载。本文所有数据及图片都是通过Charles模拟 25...原创 2019-08-16 17:12:46 · 2104 阅读 · 0 评论 -
一看你就懂,超详细 java 中的 ClassLoader 详解
ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见。理解ClassLoader的加载机制,也有利于我们编写出更高效的代码。ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去,程序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载。想想也是的,一次性加载那么多j...原创 2018-12-07 16:11:52 · 278 阅读 · 0 评论 -
崛起的 Kafka
本文译自 Braedon Vickers 发布在 Movio 上的一篇文章,详尽的探讨了在微服务架构升级的过程中,如何使用 Kafka 将微服务之间耦合降到最低,同时能让整个系统在保证高可用的前提下做到高可扩展。随着微服务的流行,很多公司都在尝试将现有的系统进行架构升级。促成 Movio 公司架构改造的一项关键技术就是 Kafka 消息队列。Kafka 是一个开源的分布式消息队列,在可靠性和可...原创 2018-12-12 21:11:51 · 437 阅读 · 0 评论 -
Java 多线程 相关概念
前言本篇文章介绍一些多线程的相关的深入概念。理解后对于线程的安全性会有更深的理解。先说一个格言,摘自Java核心技术:如果向一个变量写入值,而这个变量接下来可能会被另一个线程读取;或者一个变量读值,而这个变量可能是之前被另一个线程写入的,此时必须同步。下面就是概念了。1. Monitor机制:Monitor其实是一种同步工具、同步机制,通常被描述成一个对象,主要特点是:同...转载 2018-12-03 15:27:33 · 144 阅读 · 0 评论 -
蚂蚁金服11.11:支付宝和蚂蚁花呗的技术架构及实践
每年“双11”都是一场电商盛会,消费者狂欢日。今年双11的意义尤为重大,它已经发展成为全世界电商和消费者都参与进来的盛宴。而对技术人员来说,双十一无疑已经成为一场大考,考量的角度是整体架构、基础中间件、运维工具、人员等。一次成功的大促准备不光是针对活动本身对系统和架构做的优化措施,比如:流量控制,缓存策略,依赖管控,性能优化……更是与长时间的技术积累和打磨分不开。下面我将简单介绍支付宝的整体架...原创 2018-11-07 14:30:14 · 1194 阅读 · 0 评论 -
秒杀系统架构分析与实战
#0 系列目录#秒杀系统架构 秒杀系统架构分析与实战#1 秒杀业务分析#正常电子商务流程(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货秒杀业务的特性(1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、瞬时并发量高;#2 秒杀技术挑战# 假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就...原创 2018-11-07 14:41:05 · 198 阅读 · 0 评论 -
Java集合---LinkedList源码解析
一、源码解析 1、 LinkedList类定义。 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable Link...原创 2018-11-05 16:25:23 · 271 阅读 · 0 评论 -
上班划水神器:一个可以在控制台玩斗地主项目!
这是什么?这是Ratel,它可以在命令行内进行简单的斗地主游戏,来张图体验一下: 怎么开始玩?Ratel分客户端和服务端,你可以在本地启动一个客户端让小伙伴们的客户端都连接你的服务器进行游戏,又或者可以直接连接作者公网服务器进行游戏,IP 39.105.65.8 Port 1024,不过作为玩家,我们最看重的还是客户端的使用!你可以将Ratel项目Clone到本...原创 2018-11-13 15:58:04 · 390 阅读 · 0 评论 -
弹幕,是怎样练成的?
天下视频唯弹幕不破说起弹幕看过视频的都不会陌生,那满屏充满着飘逸评论的效果,让人如痴如醉,无法自拔最近也是因为在学习关于canvas的知识,所以今天就想和大家分享一个关于弹幕的故事那么究竟弹幕是怎样炼成的呢? 我们且往下看(look)看什么?看效果 效果图已经呈现给各位了,那么是不是有点小激动呢?是的,感慨万分,思绪宁乱,无语凝噎无论以后我们的工作中是否会遇到...原创 2018-11-13 16:50:32 · 416 阅读 · 0 评论 -
一文让你明白 Java 字节码
前言也许你写了无数行的代码,也许你能非常溜的使用高级语言,但是你未必了解那些高级语言的执行过程。例如大行其道的Java。Java号称是一门“一次编译到处运行”的语言,但是我们对这句话的理解深度又有多少呢?从我们写的java文件到通过编译器编译成java字节码文件(也就是.class文件),这个过程是java编译过程;而我们的java虚拟机执行的就是字节码文件。不论该字节码文件来自何方,由哪...原创 2018-11-11 16:06:42 · 244 阅读 · 0 评论 -
Java笔试题——2的100次方,不用大数据类(Biginteger)来解答
Java笔试题——2的100次方,不用大数据类(Biginteger)来解答package cn.hncu.offer;public class Two100 {public static void main(String[] args) {int a[]=new int[1];//初始化数组a[0]=1;//为第一个设置初始化值int n=100;for(int i=0;i<...原创 2018-11-11 19:36:28 · 764 阅读 · 0 评论 -
Spring boot配置说明
要加“m”说明是MB,否则就是KB了.-Xms:初始值-Xmx:最大值 -Xmn:最小值java -Xms80m -Xmx80m -jar mod.jar 时区设置 java -jar -Duser.timezone=GMT+08 mod.jar #---------------------------------------- #核心属性 #------...原创 2018-11-08 17:56:12 · 305 阅读 · 0 评论 -
javascript array js 缓存算法,数组去重、数组随机抽取、字母串转数字,数字转字符串
前言 因为平时在写代码的过程中,有些算法会经常重复写,比如数组去重、数组抽取随机值等!虽然这些不是很难的逻辑,但是每次刚开始遇到需求的时候,还是需要琢磨一些时间才能想出来,所以此文档把这些常见算法的思想记录下来,以便下次再遇到的时候不会手脚无措了! 这篇文档不考虑es6等语法,也不考虑Array自带的一些过滤方法! 数组去重 我们这里不考虑数组上的一个自带的过滤算法,比如...原创 2018-11-15 14:47:07 · 453 阅读 · 1 评论 -
Java 进阶面试问题列表
面向对象编程的基本理念与核心设计思想 解释下多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling)。 继承(Inheritance)与聚合(Aggregation)的区别在哪里。 你是如何理解干净的代码(Clean Code)与技术负载(Technical Debt)的。 描述下常用的重构技...原创 2018-11-15 16:52:47 · 163 阅读 · 0 评论 -
如何把 Java Web 应用放在 docker 容器中运行
本文适合 docker 零基础,且希望使用 docker 运行 Java Web 应用的人士。因为是傻瓜教程,这里没有使用 docker 的高级功能,本教程旨在用最简单方法实现目标。安装 docker Docker 的安装资源文件存放在Amazon,由于国内特殊的网络环境,安装时,会间歇性连接失败,所以直接从 docker 官网下载速度非常慢,建议使用国内的 Daocloud 提供的安装方案...原创 2018-11-15 17:13:07 · 993 阅读 · 0 评论 -
netty 源码分析之拆包器的奥秘
为什么要粘包拆包为什么要粘包首先你得了解一下TCP/IP协议,在用户数据量非常小的情况下,极端情况下,一个字节,该TCP数据包的有效载荷非常低,传递100字节的数据,需要100次TCP传送,100次ACK,在应用及时性要求不高的情况下,将这100个有效数据拼接成一个数据包,那会缩短到一个TCP数据包,以及一个ack,有效载荷提高了,带宽也节省了非极端情况,有可能两个数据包拼接成一个数据...原创 2018-11-21 17:19:19 · 164 阅读 · 0 评论 -
Java 并发——volatile
JVM内存管理概述 volatile 是轻量级的 synchronized。volatile 作用于共享变量,具备了“锁”的特性,这是为了确保共享变量能被准确和一致性地更新,这是 volatile 的可见性。同时,它也阉割了 scnchronized 的一写功能,比如:原子性。内存模型 图如篇首。 首先我们应该明白CPU是执行命令的场所,当需要处理数据时,CPU会从主内存(...原创 2018-11-21 17:25:25 · 379 阅读 · 0 评论 -
开发笔记之详述 JAVA 构造函数和代码块本身及其执行细节
今天在JAVA的研究学习当中发现了构造函数这个神奇但是麻烦的东西, 他在给我感觉很像OC语言中的initWith..., 但是在细节上有很多的不同, 而代码块这个东西更是让我这个敲iOS的眼前一亮, 后来针对代码块这个东西的功能和执行的顺序深究了一番.首先说说构造函数开头说道这个东西给我的感觉很像initWith...甚至可以这么去理解, 但是你深究他的写法和功能你就会发现他跟initWi...原创 2018-11-25 14:48:02 · 189 阅读 · 0 评论 -
深入研究java.lang.ThreadLocal类
一、概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,是每一...原创 2018-11-26 15:03:35 · 153 阅读 · 0 评论 -
一个小时打造新闻 APP
使用框架:rxjava和retrofit以及一个开源扩展的recyclerview和注解框架butterknife集体依赖如下:dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:esp...原创 2018-11-29 17:11:46 · 1933 阅读 · 0 评论 -
50行代码的MVVM,感受闭包的艺术
我们先看一下运行结果name 和 age 被响应式的渲染出来,在 2s 后我们修改了 name 的值,同样能在页面正确更新。我们来看一下最小化的 MVVM 的源码class Vue{ constructor(opt){ this.opt = opt this.observe(opt.data) let root = document.querySelector(op...原创 2019-08-13 10:39:52 · 174 阅读 · 0 评论