互联网技术
文章平均质量分 82
量子力学改变世界
技术改变世界
展开
-
一致性哈希算法
在分布式系统中,如果某业务可以由多个相同的节点处理,很容易想到用HASH的方式将业务请求分散到这些节点处理,如果有N个节点,计算方法为:HASH(id)% N。如果只是简单的计算,不涉及用户状态,这是一个简单有效的方案。如果节点的计算涉及用户状态,比如维护购物车、Memcache缓存服务等,好像也没什么 问题,只要用同一个数据做id,上述HASH的结果也保持不变。但如果节点数量发生变化原创 2016-01-13 17:26:19 · 611 阅读 · 0 评论 -
【总结】Java多线程
Java内存模型工作内存和主内存主内存Java内存模型所有的变量都存储在主内存中工作内存:每个线程有自己独立的工作内存,它保存了该线程使用的变量的主内存拷贝线程对变量的操作都在自己的工作内存中进行,不能直接操作主内存和其他工作内存的存储变量或变量副本线程间的变量访问通过主内存来完成Java内存交互协议lock:主内存变量,把一个变量标识为某个原创 2016-01-14 14:53:43 · 1081 阅读 · 0 评论 -
【总结】Spring原理剖析
Spring模块Core(核心容器)说明核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开IOC(控制反转模式 )不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中原创 2016-01-14 14:54:31 · 14568 阅读 · 3 评论 -
【总结】Scrum敏捷开发
敏捷开发敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态敏捷4大宣言个体和交互胜过过程和工具人是软件项目获得成功最为重原创 2016-01-14 14:55:24 · 3020 阅读 · 0 评论 -
【总结】结构化思维
思维方式惯性思维方式:按照经验和直觉来分析和处理问题逻辑思维方式:强调推理和逻辑分析水平思维方式:有创意天马行空,尝试关联一些特殊属性来获得创新结构化思维:以假设为先导,强调快速、系统解决问题什么是结构化思维以假设为前提,以事实为依据(分类假设 )一种从框架到细节的思维方式强调在分析问题的过程中,不先入为主,不马上陷入细节对构成要素和思想观点进行合理的分类分原创 2016-01-14 14:56:38 · 3008 阅读 · 1 评论 -
【总结】Tomcat原理剖析
Tomcat模块Service我们将 Tomcat 中 Connector、Container 作为一个整体比作一对情侣的话,Connector 主要负责对外交流,可以比作为 Boy,Container 主要处理 Connector 接受的请求,主要是处理内部事务,可以比作为 Girl。那么这个 Service 就是连接这对男女的结婚证了。是 Service 将它们连接在一起,原创 2016-01-14 14:57:16 · 1032 阅读 · 0 评论 -
【总结】一致性哈希算法(Memcached)
一、概述 1、我们的memcache客户端使用了一致性hash算法ketama进行数据存储节点的选择。与常规的hash算法思路不同,只是对我们要存储数据的key进行hash计算,分配到不同节点存储。一致性hash算法是对我们要存储数据的服务器进行hash计算,进而确认每个key的存储位置。 2、常规hash算法的应用以及其弊端 最常规的方式莫过于hash取模的方式。比如集原创 2016-01-13 17:27:56 · 653 阅读 · 0 评论 -
【总结】ACID、Data Replication、CAP与BASE
1,ACID在传数据库系统中,事务具有ACID 4个属性原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的隔离性(Iso原创 2016-01-14 14:33:04 · 916 阅读 · 0 评论 -
梳理五大算法设计思想
分治法概念:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。思想策略:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。特征:1) 该问题的规模缩小到一定的程度就可以容易...原创 2019-09-12 18:51:00 · 175 阅读 · 0 评论 -
底层逻辑:以不变应万变
底层逻辑:以不变应万变 究竟什么才是隐藏在诸多变化背后的那个“不变”?什么才是支配万千变化的那双“看不见的手”?追随前者(变化)会让我们疲惫不堪、彷徨迷失在不断变化的幻象中;而找到后者,则能让我们拥有一颗笃定的灵魂、坚定的眼神和长期主义的心态。 宏观层面 周期性变化:周期性变化告诉我们,这个世界上有许多种不同的确定性,比如:四季交替、白夜更替、潮汐变化、耕种和收割、生与死、动物迁徙、股票...原创 2019-09-20 16:21:21 · 645 阅读 · 0 评论 -
管理者需具备的潜力
是否具有抓住工作重点的能力,是否有明确的工作思路 抓重点是指能快速地将纷繁复杂的各种表面现象归纳总结为结构清晰的事物特征,抓住事物的根本、问题的关键,并确定工作重心的能力。管理工作涉及到的环境和对象很复杂,范围越广规模越大,复杂度就成几何级数上升。所以“抓重点”是管理者必须具有的第一项能力。 抓重点能力弱的管理人员,在工作上表现上往往是没有主见和工作思路,左右摇摆,拿不定主意,力气使不到点上...原创 2019-09-20 16:25:54 · 300 阅读 · 0 评论 -
年轻人有出息的兆头
年轻人有出息的兆头 独立的价值观 一套自己观察和总结世界的系统,是个人魅力的核心组成部分 强烈的获胜欲望 充满活力和好胜心是一切成就的基础。观察那些在世俗世界取得很大成就的人,你会发现几乎不会有悲观厌世的人。 自信 乱云飞渡仍从容的诡异淡定与平和 具有强大的避错倾向 总结归纳能力,一个具有高避错倾向的人,磨难对他就是一笔财富,丰富曲折的阅历提供了足够...原创 2019-09-20 16:29:35 · 252 阅读 · 0 评论 -
【总结】MyCat分布式数据库中间件
1,数据库概述在互联网时代,海量数据的存储与访问成为系统设计与使用的瓶颈问题,对于海量数据处理,按照使用场景,主要分为两种类型联机事务处理(OLTP:On-line transaction processing):也称为面向交易的处理系统,其基本特征是原始数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果功能:日常交易处理DB设计:面向实时交易类应用数原创 2016-01-14 14:52:55 · 4955 阅读 · 0 评论 -
【总结】Netty(RPC高性能之道)原理剖析
1,Netty简述Netty 是一个基于 JAVA NIO 类库的异步通信框架,用于创建异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性的网络客户端和服务器端RPC高性能分析,请参考文章“【总结】RPC性能之道 ”特点异步、非阻塞、基于事件驱动的NIO框架支持多种传输层通信协议,包括TCP、UDP等开发异步HTTP服务端和客户端应用程序提供对多种应用层协议的支持,包括TC原创 2016-01-14 14:51:25 · 19967 阅读 · 5 评论 -
【总结】八大排序算法
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字原创 2016-01-14 14:39:39 · 839 阅读 · 0 评论 -
【总结】JVM模型
JVM的每个实例都有一个它自己的方法域和一个堆,运行于JVM内的所有的线程都共享这些区域当虚拟机装载类文件的时候,它解析其中的二进制数据所包含的类信息,并把它们放到方法域中当程序运行的时候,JVM把程序初始化的所有对象置于堆上而每个线程创建的时候,都会拥有自己的程序计数器和Java栈,其中程序计数器中的值指向下一条即将被执行的指令,线程的Java栈则存储为该线程调用Java方法的状态本地方法调原创 2016-01-14 14:41:33 · 898 阅读 · 0 评论 -
【总结】搜索服务Solr
1, Solr is a standalone enterprise search server with a REST-like API. You put documents in it (called "indexing") viaJSON, XML, CSV or binary over HTTP. You query it via HTTP GET and receive JSON原创 2016-01-14 14:43:05 · 1330 阅读 · 0 评论 -
【总结】Hadoop剖析
1,Hadoop简述Hadoop是一个开发和运行处理大规模海量数据的软件平台,用户可以在不了解分布式底层细节的情况下,实现在大量计算机组成的集群对海量数据进行高速分布式的计算和存储Hadoop框架中最核心设计就是:HDFS和MapReduce。HDFS提供了海量数据的存储,MapReduce提供了对数据的计算Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常原创 2016-01-14 14:43:47 · 1019 阅读 · 0 评论 -
【总结】消息服务中间件(ActvieMQ)
1,使用消息中间件场景 - 解耦和扩展性 - 系统之间集成只需要基于消息队列的数据接口层,这允许系统各自独立的扩展或修改各自的实现,只需要确保遵守同样的接口约束 - 异步通信/处理 - 一些事务性很强,耗时久的请求,如下订单,注册发邮件等,接受请求后马上告诉用户后台已经接受到了请求并在处理请等待,前台不停的检查处理情况,防止了用户一直挂在当前原创 2016-01-14 14:44:51 · 2169 阅读 · 0 评论 -
【总结】MySQL数据库
1,MySQL读写分离 - MySQL复制(Replication) - 双主多从架构2,MySQL高可用(HA)和读负载均衡 - 高可用:Keeplived,失效转移 - 读负载均衡:LVS3,MySQL可扩展设计 - 数据切分 - 数据的垂直切分(纵向切分) - 场景/出发点 - 大字段原创 2016-01-14 14:45:21 · 534 阅读 · 0 评论 -
【总结】MySQL性能优化
1,MySQL基础 - MySQL物理文件组成 - MySQL逻辑架构 - MySQL自带工具2,MySQL存储引擎 - MyISAM - Innodb - NDBCluster3,MySQL性能优化 - 硬件层优化 - OS层优化 - MySQL层优化分析 - 系统架构及实现原创 2016-01-14 14:45:55 · 1032 阅读 · 0 评论 -
【总结】RPC框架Dubbo深入分析
1,背景随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键垂直应用架构当访问量逐渐增大,单一应用增加机器带来的原创 2016-01-14 14:47:03 · 22741 阅读 · 4 评论 -
【总结】瞬时高并发(秒杀/活动)Redis方案
1,Redis丰富的数据结构(Data Structures)字符串(String)Redis字符串能包含任意类型的数据一个字符串类型的值最多能存储512M字节的内容利用INCR命令簇(INCR, DECR, INCRBY)来把字符串当作原子计数器使用使用APPEND命令在字符串后添加内容列表(List)Redis列表是简单的字符串列表,按照插入顺序排序你可原创 2016-01-14 14:48:35 · 70548 阅读 · 5 评论 -
【总结】ZooKeeper应用分析
1,ZooKeeperZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等2,ZooKeeper使用场景分布式配置中心(数据发布与订阅)【说明】发布者将数据发布到ZK节点上,供订阅者动原创 2016-01-14 14:49:40 · 2044 阅读 · 1 评论 -
【总结】分布式缓存Memcached
1,缓存:Memcached - 只支持简单的Key / Value结构 - 不支持数据持久化 - 每个Key的值最大1MB - 协议简单:不使用复杂的XML等格式,而使用简单的基于文本行的协议 - 基于libevent的事件处理:libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口 -原创 2016-01-14 14:50:16 · 862 阅读 · 0 评论 -
架构师们遵循的设计原则
架构师应该扮演的角色是一个引导者、讨论发起者、花草修剪者,而不是定义者和构建者。KISS(Keep it simple,sutpid) 和保持每件事情都尽可能的简单 YAGNI(You aren’t gonna need it)-不要去搞一些不需要的东西 爬,走,跑 时刻要想投入产出比(ROI) 了解你的用户,然后基于此来平衡你需要做哪些事情 设计和测试一个功能得尽可能的独立 不可...原创 2019-09-20 16:32:39 · 202 阅读 · 0 评论