- 博客(24)
- 收藏
- 关注
原创 数组、链表分别实现栈、队列
转载自:http://mp.weixin.qq.com/s/DWuIREoz4yrfxo1pbXSACg我叫栈,我的爸爸叫数组,我的妈妈叫链表,我的双胞胎弟弟叫队列。我们这个家庭是整个数据结构家族中比较重要的家庭。和你说过了,我们数据结构家族是计算机世界中储存和组织数据的。我的家族之所以这么强大,就是因为我们要应付各种需求,提供不同的数据存储方式。我的四个家庭成员分别可以解决不同的数据存取...
2018-03-28 10:52:28 536
原创 44条Java代码优化
转载自:http://mp.weixin.qq.com/s/LsYWUarUEJnVrV_ysvnn_w代码优化的目标是:减小代码的体积 提高代码运行的效率 本文的内容有些来自网络,有些来自平时工作和学习,当然这不重要,重要的是这些代码优化的细节是否真真正正地有用。那本文会保持长期更新,只要有遇到值得分享的代码优化细节,就会不定时地更新此文。代码优化细节 (1)尽量指定类、方法的...
2018-03-28 10:43:59 219
原创 除了用作缓存数据,Redis还可以做这些
Redis应该说是目前最受欢迎的NoSQL数据库之一了。Redis通常被作为缓存组件,用作缓存数据。不过,除了可以缓存数据,其实Redis可以做的事还有很多。下面列举几例,供大家参考。1、最新列表例如新闻列表页面最新的新闻列表,如果总数量很大的情况下,尽量不要使用select a from A limit 10,尝试redis的 LPUSH命令构建List,一个个顺序都塞进去就可以啦。...
2018-03-27 14:33:22 1051
原创 一致性Hash算法
一、Redis集群的使用 我们在使用Redis的时候,为了保证Redis的高可用,提高Redis的读写性能,最简单的方式我们会做主从复制,组成Master-Master或者Master-Slave的形式,或者搭建Redis集群,进行数据的读写分离,类似于数据库的主从复制和读写分离。如下所示: 同样类似于数据库,当单表数据大于500W的时候需要对其进行分库分表,当数据量很大的时候(标准可能不...
2018-03-26 17:53:02 236
转载 多线程并发执行任务,取结果归集。终极总结:Future、FutureTask、CompletionService、CompletableFuture
目录1.Futrue原理:demo:建议:此种方法可实现基本目标,任务并行且按照提交顺序获取结果。使用很普遍,老少皆宜,就是CPU有消耗,可以使用!2.FutureTask原理:demo:建议:demo1在特定场合例如有十分耗时的业务但有依赖于其他业务不一定非要执行的,可以尝试使用。demo2多线程并发执行并结果归集,这里多套一层FutureTask比较鸡肋(直接返回Future简单明了)不建议使...
2018-03-26 16:46:22 815
原创 Linux 中的“大内存页”(hugepage)
学习 Linux 中的大内存页hugepage。理解什么是“大内存页”,如何进行配置,如何查看当前状态以及如何禁用它。本文中我们会详细介绍大内存页huge page,让你能够回答:Linux 中的“大内存页”是什么?在 RHEL6、RHEL7、Ubuntu 等 Linux 中,如何启用/禁用“大内存页”?如何查看“大内存页”的当前值?首先让我们从“大内存页”的基础知识开始讲起。Li...
2018-03-26 08:27:53 2639
转载 哈希表(散列表)原理详解
什么是哈希表? 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 记录的存储位置=f(关键字) 这里的对应关系f称为散列函数,又称为哈希(Hash函数),采用散列技术将记录存储在一块连续的存储空间中,这块...
2018-03-22 09:48:26 425
原创 java CPU 100% 排查
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。(友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen)以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。通过ps...
2018-03-20 17:49:06 3845
原创 jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
1.Jstack 1.1 jstack能得到运行java程序的java stack和native stack的信息。可以轻松得知当前线程的运行情况。如下图所示 注:这个和thread dump是同样的结果。但是thread dump是用kill -3 pid命令,还是服务器上面少用kill为妙 1.2 &nbs...
2018-03-20 17:30:51 1637
原创 B树B+树的原理和操作
3.B- 树 3.1什么是B-树具体讲解之前,有一点,再次强调下:B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会...
2018-03-20 14:11:19 1154 1
原创 服务网关Zuul
Zuul的核心Filter是Zuul的核心,用来实现对外服务的控制。Filter的生命周期有4个,分别是“PRE”、“ROUTING”、“POST”、“ERROR”,整个生命周期可以用下图来表示。Zuul中默认实现的Filter禁用指定的Filter可以在application.yml中配置需要禁用的filter,格式:zuul: FormBodyWrapperFilter: ...
2018-03-20 09:23:49 573
原创 分布式事务的解决方案
1、什么是分布式事务分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失...
2018-03-20 09:02:47 128
原创 阿里云Redis开发规范
摘要: 本文介绍了在使用阿里云Redis的开发规范,从键值设计、命令使用、客户端使用、相关工具等方面进行说明,通过本文的介绍可以减少使用Redis过程带来的问题。 一、键值设计1. key名设计(1)【建议】: 可读性和可管理性 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id (2)【建议】:简洁性 保证语义的前提下,控制key的长度,当...
2018-03-20 08:53:54 229
原创 Redis集群分片原理
转载:http://blog.csdn.net/shmnh/article/details/72868328Redis集群的目的是实现数据的横向伸缩,把一块数据分片保存到多个机器,可以横向扩展数据库大小,扩展带宽,计算能力等。 实现数据分片(集群)方式大致有三种: 1)客户端实现数据分片即客户端自己计算数据的key应该在哪个机器上存储和查找,此方法的好处是降低了服务器集群的复杂度,...
2018-03-18 15:39:33 11755
原创 Kafka 基本原理
简介Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。Kafka架构它的架构包括以下组件:话题(Topic):是特定类型的消息流。消息是字节的有效负载(Payload),话题是消息的分类名或种子(Feed)名。生产者(Pr...
2018-03-16 15:07:38 313
原创 java基础测试
测试一:返回值是多少?public class Test { private static int i = 1; public int getNext() { return i++; } public static void main(String[] args) { Test test = new Test(); ...
2018-03-16 09:53:51 232
原创 二叉树的三种遍历
二叉树的遍历分为以下三种:先序遍历:遍历顺序规则为【根左右】中序遍历:遍历顺序规则为【左根右】后序遍历:遍历顺序规则为【左右根】什么是【根左右】?就是先遍历根,再遍历左孩子,最后遍历右孩子;举个例子,看下图(图从网上找的):先序遍历:ABCDEFGHK中序遍历:BDCAEHGKF后序遍历:DCBHKGFEA以中序遍历为例:中序遍历的规则是【左根右】,我们从r...
2018-03-16 09:14:13 299
原创 经典:编程面试的 10 大算法概念汇总
以下是在编程面试中排名前 10 的算法相关的概念,我会通过一些简单的例子来阐述这些概念。由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍。本文将从Java的角度看问题,包含下面的这些概念:字符串链表树图排序递归 vs. 迭代动态规划位操作概率问题排列组合1. 字符串如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法。toCharA...
2018-03-15 15:01:19 201
原创 关于Jvm知识看这一篇就够了
本文转载自:https://mp.weixin.qq.com/s/4c9K5eYMFGVV2WyKaYXVBA2016年左右的时候读了周志明《深入理解Java虚拟机:JVM高级特性与最佳实践》,读完之后受益匪浅,让我对Java虚拟机有了一个完整的认识,这是Jvm书籍中最好的读物之一。 后来结合实际工作中遇到的问题,写了一系列关于Jvm的文章,其中开篇的几篇内容大部分参考于此书,后期加入自...
2018-03-12 08:59:35 354
原创 Java IO & NIO & NIO2
概览IO是Java中的最重要的一个部分. 其中, java.io是所有编程者都应该掌握的IO方式. 在Java 1.4中, NIO被引入, 它引进了一种新的相对于流模型的新的IO模型, 以为非阻塞IO提供支持. 在Java 7中, NIO2又在NIO的基础上, 引入了对异步IO的支持. 在这篇文章我, 我将对这几种IO方式进行一个比较系统的说明及总结, 同时, 分析每一种IO模型的适用范围....
2018-03-12 08:33:43 992
转载 ConcurrentHashMap实现原理
ConcurrentHashMap是Java1.5中引用的一个线程安全的支持高并发的HashMap集合类。这篇文章总结了ConcurrentHashMap的内部实现原理,是对于自己理解后的一些整理。1.HashTable与ConcurrentHashMap的对比HashTable本身是线程安全的,写过Java程序的都知道通过加Synchronized关键字实现线程安全,这样对整张表加锁...
2018-03-09 17:35:10 208
转载 OAuth 2.0协议-示例展示
1. 我把密码献给你小梁开发了一个“信用卡管家”的程序 , 可以自动从邮箱中读取信用卡相关邮件,分析、汇总,形成一个报表。 小梁找到信用卡达人张大胖试用 : “你的信用卡那么多,看看我这个程序吧, 保准你会爱死它。”张大胖尝试了几下说: “咦,你这个程序要读取我的网易邮箱啊,那需要用户名/密码吧”“是啊 , 你把密码告诉输入程序不就行了, 我的程序替你加密保存,保证不会泄露。”...
2018-03-06 16:04:48 264
原创 Java子线程中的异常处理
在普通的单线程程序中,捕获异常只需要通过try … catch … finally …代码块就可以了。那么,在并发情况下,比如在父线程中启动了子线程,如何正确捕获子线程中的异常,从而进行相应的处理呢? 也许有人会觉得,很简单嘛,直接在父线程启动子线程的地方try … catch一把就可以了,其实这是不对的。 让我们回忆一下Runnable接口的run方法的完整签名,因为没有标识throws语句...
2018-03-06 14:55:57 254
原创 Java的动态代理
若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,这种情况下的代理类通常都是我们在Java代码中定义的。 通常情况下, 静态代理中的代理类和委托类会实现同一接口或是派生自相同的父类。一、概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品。关于微商代理,首先我们从他们那里买东西时通常不知道背后的厂家究竟是谁,也就是说,“...
2018-03-06 13:45:33 107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人