自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 爬蜥学习之旅

编程语言java之旅总览算法算法网络网络机器学习与数据挖掘机器学习与数据挖掘工具工作中那些有用的工具

2019-01-01 01:19:18 189

原创 机器学习与数据挖掘之旅

NLPjava版JieBa分词源码走读HMM(隐马尔科夫模型)与维特比算法模式识别模式识别中的Apriori算法和FPGrowth算法文本获取与搜索引擎文本获取和搜索引擎简介文本获取与搜索引擎中的TF,TF-IDF文本获取和搜索引擎如何评估一个算法是否有效文本获取和搜索引擎的概率模型文本获取和搜索引擎中的反馈模型文本获取和搜索引擎之推荐系统...

2019-01-01 01:01:30 140

原创 java之旅总览

java并发之旅Java并发编程之旅总览IOjava nio中的select和channel是怎么使用的?一文告诉你java NIO底层用到的那些connect、bind、listen、accept、close从java的NIO版hello world看java源码,我们能看到什么?JNIjava JNI简介open jdk源码阅读如何读open jdk native 源码中...

2019-01-01 00:37:07 182

原创 算法之旅总览

常用算法思想回溯法分治法(Divide and Conquer)怎么用?动态规划怎么用?常见动态规划的解决思路详细分析背包问题数据结构AVL树:解决BST可能导致的长链问题Binary Search Trees(BST)一种插入、查找后继节点耗时为 lglgu 的算法van Emde Boas Trees排序算法常见排序算法图算法广度优先搜索算法(Breath-...

2018-12-31 23:02:53 123

原创 工作中那些有用的工具

项目maven jar构建git上的后悔药视频编辑IMOVIE使用数据处理pandas处理文本的方便之处Linux命令Linux上的方便命令

2018-12-31 20:51:47 144

原创 网络之旅总览

传输层TCPTCP协议之旅总览链路层链路层是做什么的?websocketwebsocket简介待续

2018-12-31 19:28:02 155 1

原创 kafka之旅总览

初识kafka初识kafka集群初识kafka中的生产者与消费者初识kafka对消息处理与可靠性做出的保证

2018-12-31 18:19:44 254

原创 Netty之旅总览

一篇文章入门NettyByteBuf详解ChannelHandler流程详解EventLoop流程详解Bootstrap使用详解ChannelHandler做测试数据格式转换与自带Channel工具Netty Hello world版启动源码分析...

2018-12-31 16:04:39 200

原创 TCP协议之旅总览

可靠性、协议格式、tcpDump可靠性、协议格式、tcpDump处理连接处理连接数据传输数据传输超时处理超时处理局限性与定时器局限性定时器

2018-12-31 12:27:55 118

原创 从wait的源码看撤销偏向锁的过程(revoke and rebias)

wait源码实现如下//TRAPS表示是否有异常void ObjectSynchronizer::wait(Handle obj, jlong millis, TRAPS) { if (UseBiasedLocking) { //如果是使用了偏向锁,要撤销偏向锁 BiasedLocking::revoke_and_rebias(obj, false, THREAD); ...

2018-12-18 00:06:46 1358

翻译 偏向锁状态转移原理

为什么需要偏向锁当多个处理器同时处理的时候,通常需要处理互斥的问题。一般的解决方式都会包含acquire和release这个两种操作,操作保证,一个线程在acquire执行之后,在它执行release之前,其它线程不能完成acquire操作。这个过程经常就涉及到锁。研究表明(L. Lamport A fast mutual execlusion algorithm),通过 fast locks...

2018-12-18 00:01:23 289

翻译 safe-point(safepoint 安全点) 和 safe-region(安全区域)

以 GC safe-point引入GC如何找到不可用的对象编写代码的时候是可以知道对象不可用的,但对于程序来说,需要一定的方式来知晓,可用方法比如:编译分析,引用计数,和对象是否可达可达性分析一个对象只要能够通过mutator触达,那么它就是“活”着的。如果Mutator栈的一个槽位包含了对象的引用,那么对象就是直接可触达。而从直接可达对象可触达的对象必定也是可达的,因而可达性分析,只...

2018-12-17 23:54:55 1934

原创 LockSupport中的park与unpark原理

LockSupport是用来创建locks的基本线程阻塞基元,比如AQS中实现线程挂起的方法,就是park,对应唤醒就是unpark。JDK中有使用的如下LockSupport提供的是一个许可,如果存在许可,线程在调用park的时候,会立马返回,此时许可也会被消费掉,如果没有许可,则会阻塞。调用unpark的时候,如果许可本身不可用,则会使得许可可用许可只有一个,不可累加park源码跟...

2018-12-17 23:54:13 36283 8

原创 CAS(compareAndSwap)原理

unsafe中对应拥有三个方法 compareAndSwapObject ,compareAndSwapInt和compareAndSwapLong ,他们都被标记为nativecompareAndSwapObject它的核心实现为oop res = oopDesc::atomic_compare_exchange_oop(x, addr, e);实现核心如下inline oop oo...

2018-12-17 23:44:04 230

原创 Java并发编程之旅总览

线程安全的概念什么时候线程不安全?怎样做到线程安全?怎么扩展线程安全的类?java对线程安全的支持java 对线程安全支持有哪些?java 中的线程池Executors的使用与ThreadPoolExecutorjava中线程池的生命周期与线程中断java 中的锁Java中常见死锁与活锁的实例synchronize - 线程同步机制显示锁ReentrantLock使用...

2018-11-25 17:10:26 105

原创 AbstractQueuedSynchronizer原理剖析

无论是公平锁还是非公平锁,它们的实现都依赖于AbstractQueuedSynchronizer,它提供了一个基于先进先出等待队列 实现block locks和synchronizers的框架。特性如下仅通过一个 int 类型来代表状态。对于ReentrantLock而言,他就是线程持有锁的次数,当次数为0时,代表锁没有被持有,正数代表被持有的次数,负数则是超出了锁的持有范围,有可能存在死循环...

2018-11-25 16:33:43 576

原创 Java中的显示锁ReentrantLock使用与原理

考虑一个场景,轮流打印0-100以内的技术和偶数。通过使用 synchronize 的 wait,notify机制就可以实现,核心思路如下:使用两个线程,一个打印奇数,一个打印偶数。这两个线程会共享一个数据,数据每次自增,当打印奇数的线程发现当前要打印的数字不是奇数时,执行等待,否则打印奇数,并将数字自增1,对于打印偶数的线程也是如此//打印奇数的线程private static class...

2018-11-25 16:20:09 493

原创 java synchronize - 线程同步机制

Java支持同步机制的是Monitor。Monitor就像是拥有一个特殊房间的建筑,在同一时间里,这间特殊的房间只能被一个线程拥有。enter the monitor:进入这幢建筑acquiring the monitor:进入建筑里的特殊房间owning the monitor:拥有特殊房间的所有权releasing the monitor:离开特殊的房间exiting the mo...

2018-11-25 16:08:51 828

原创 Java中常见死锁与活锁的实例

顺序死锁:过度加锁,导致由于执行顺序的原因,互相持有对方正在等待的锁资源死锁:多个线程在相同的资源上发生等待由于调用顺序而产生的死锁public class Test { Object leftLock = new Object(); Object rightLock = new Object(); public static void main(String[]...

2018-11-25 16:02:08 2501 2

原创 java中线程池的生命周期与线程中断

线程池生命周期包括:RUNNING:接收新的任务并处理队列中的任务SHUTDOWN:不接收新的任务,但是处理队列中的任务STOP:不接收新的任务,不处理队列中的任务,同时中断处理中的任务TIDYING:所有的任务处理完成,有效的线程数是0TERMINATED:terminated()方法执行完毕转换成TIDYING状态的线程会运行terminated方法。执行完terminate...

2018-11-25 15:53:42 1043

原创 java中的Executors简介与多线程在网站上逐步优化的运用案例

提供Executor的工厂类忽略了自定义的ThreadFactory、callable和unconfigurable相关的方法newFixedxxx:在任意时刻,最多有nThreads个线程在处理task;如果所有线程都在运行时来了新的任务,它会被扔入队列;如果有线程在执行期间因某种原因终止了运行,如果需要执行后续任务,新的线程将取代它 return new ThreadPoo...

2018-11-25 15:38:29 170

原创 java 对线程安全支持有哪些?

同步容器。它的原理是将状态封装起来,并对每个公有方法都实行同步,使得每次只有1个线程能够访问容器的状态。Vector和HashTableCollections.synchronizedXXX方法同步容器的问题这种方式使得对容器的访问都串行化,严重降低了并发性,如果多个线程来竞争容器的锁时,吞吐量严重降低对容器的多个方法的复合操作,是线程不安全的,比如一个线程负责删除,另一个线...

2018-11-25 15:05:52 270

原创 什么时候线程不安全?怎样做到线程安全?怎么扩展线程安全的类?

当多个线程去访问某个类时,如果类会表现出我们预期出现的行为,那么可以称这个类是线程安全的。什么时候会出现线程不安全?操作并非原子。多个线程执行某段代码,如果这段代码产生的结果受不同线程之间的执行时序影响,而产生非预期的结果,即发生了竞态条件,就会出现线程不安全;常见场景:count++。它本身包含三个操作,读取、修改、写入,多线程时,由于线程执行的时序不同,有可能导致两个线程执行后...

2018-11-25 11:25:12 642

原创 ELK技术栈中的那些查询语法

ES-基本概念词项: 所有文档中出现的不重复个体分片: 底层工作单元,保存全部数据中的一部分,能搜索任意一个节点上的资源(文档会被存储和索引到分片内)。分为主分片和副本分片,索引内的任意一个文档都归属于主分片,副本分片是主分片的拷贝,提供读服务,副本分片和主分片不会被分到同一个节点Document: 根对象,能被indexed的基本信息单元,用JSON表示,ID唯一,不可修改,只能替换...

2018-07-16 22:33:27 543

原创 从java的NIO版hello world看java源码,我们能看到什么?

Java NIO服务端代码的hello world怎么写?public class NBTimeServer { public static void main(String[] args) { try { Selector acceptSelector = SelectorProvider.provider().openSelector...

2018-07-15 18:02:33 319 1

原创 如何读open jdk native 源码

怎么看open jdk native的源码类的命名与java类的命名是一模一样的方法的命名为JNI的代码风格一般关注下文件头,如果是系统文件,比如 JVM_ENTRY等类似这样的字符是啥意思?JVM_ENTRY本身是一个宏定义,位于interfaceSupport.hpp中#define JVM_ENTRY(result_type, header) ...

2018-07-15 17:50:06 1004

翻译 java JNI简介

JNI的接口函数和指针native代码想要访问 java虚拟机需要调用JNI方法,而获取JNI方法则通过 JNI interface Pointer。它实际指向的就是一个都是指针的数组,每个指针指向的都是一个接口函数这样做的优势: * JNI 命名和native code书写分开,避免硬编码 JNI interface Pointer 只在当前线程有效,即native 方法不...

2018-07-15 17:45:31 2622

原创 java nio中的select和channel是怎么使用的?

什么是NIO?线程在处理数据时,如果线程还处于将数据从channel读到buffer的这段时间内,线程可以去做别的事情,等数据都读到buffer了,线程再回来处理读到的数据channel是什么?类比流的概念。与流的区别在于channel是可读可写的,但是一个流要么写要么读chanel可以异步的读和写数据总是从channel中读到buffer,或者从buffer中写到cha...

2018-07-08 22:30:48 734

原创 从Netty版hello world看Netty源码,我们能看到什么?

把书读薄(Netty in Action第二章) + Netty启动源码Netty服务端代码的hello world怎么写?public class EchoServer { private final int port; public EchoServer(int port) { this.port = port; } publi...

2018-07-08 22:29:35 229

原创 如何加快Dijkstra算法的运行速度?

算法导论(MIT 6.006 第18讲)如何加快Dijkstra算法的运行速度?在Dijkstra算法中,面对单源单目标的最短路径,如果遇到了要relax的节点u就是目标节点t,显然就可以执行结束了。 Dijkstra算法Dijkstra算法的探索路径是从源一直往目标前景,那么加速它的一个角度就是从源开始探索的时候,同时从目标点向源开始探索,这种算法即Bi-Directi...

2018-07-08 22:21:55 1607

原创 如何从动态规划的角度去看问题

算法导论(MIT 6.006 第19讲)动态规划的核心处理流程是什么?1: 定义子问题 计算子问题的数量2:猜测(尝试所有可能的方式,获取最好的) 计算选择的数量3: 关联所有的子问题 计算单个子问题所需要处理的时间4: 重用子问题结果并记下新的结果,或者使用DP的bottom-up方式(需要注意没有环) 计算总耗时5: 解决原...

2018-07-08 22:15:57 487

原创 如何计算图的最短路径?

算法导论(MIT 6.006 第15讲 第16讲 第17讲)最短路径的定义是什么?最短路径即拥有最小权重的路径p; 路径定义: p=<v0v0v_0,v0v0v_0,…,vkvkv_k>, 其中当0≤i<k0≤i<k0\leq iviviv_i,vi+1vi+1v_{i+1}) ∈∈\in E; 路径的权重:w(p)=Σk−1i=0w(vi,vi+1)Σi=...

2018-07-01 13:30:02 3335

原创 TCP的局限性有哪些?

把书读薄(TCP/IP详解 卷一 第二十四章)Tcp的局限性有哪些?在带宽乘积很大的时候,即处于长肥网络中,容易暴露出问题 capacity(b)=bandwidth(b/s) * round-trip time(s)窗口过小的问题。问题:TCP首部窗口大小为16bit,从而窗口限制在65535个字节,但是当前存在大带宽时延乘积,比如横跨大陆的gigabit线路...

2018-06-24 23:04:02 533

原创 什么是websocket?

网络协议什么是websocket?传统的基于浏览器的应用,比如网页游戏,经常需要和服务端进行通信,免不了要开多个http请求,来主动向服务器查询最新的信息,但是对于客户端的更新操作却又得发起新的请求,这样带来一系列的问题:服务端对于同一个客户端得提供一些不同的TCP连接,一个用于发送信息给客户端,一个用于处理每个送给服务端的信息通信协议本身是会造成通信的高开销,比如每个客户端到...

2018-06-24 17:51:47 199

原创 TCP中有哪些定时器?

把书读薄(TCP/IP详解 卷一 第二十二章 第二十三章)TCP中有哪些定时器?每个连接。TCP管理4个不用的定时器 1. 重传定时器,使用于当希望收到另一端的确认。 2. 坚持定时器,使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口 3. 保活定时器,检测到一个空闲连接的另一端何时崩溃或重启 4. 2MSL定时器,测量一个连接处于TIME_WAIT状态的时间如何...

2018-06-24 17:49:48 811 1

原创 Netty中有哪些自带的ChannelHandler?

把书读薄(Netty In Action 第十一章)Netty中有哪些自带的ChannelHandler?SslHandler:负责对请求进行加密和解密,是放在ChannelPipeline中的第一个ChannelHandler HttpClientCodec和HttpServerCodec:HttpClientCodec负责将请求字节解码为HttpRequest、HttpCon...

2018-06-24 17:45:59 1353

原创 如何使用maven生成可以执行的jar?

不依赖任何外界包,maven如何生成可以执行的jar?pom中不包含任何引用的情况下,只需要在pom中添加 maven-jar-plugin即可。解决过程新建项目,仅包含一个main函数类:Xixi.java,输出 Xixi Say: hello pom中配置为<groupId>com.paxi</groupId> <artifactId...

2018-06-24 17:43:48 259

原创 pandas操作txt文件的方便之处

使用txt文件分析数据遇到的问题有时候到手的数据基本是固定分隔符分隔的几个文件,需要重里面做一些数据统计,比如去重,计算某一列的和,两个文件的并集等等,如果能够像sql一样操作txt文件就好了,这就是pandas带来的好处如何加载txt文件?示例文件数据 papa.txt paxi_id grade 1 50 2 50 3 1...

2018-06-24 17:42:00 57825

原创 广度优先搜索算法(Breath-first Search)是如何搜索一张图的?

算法导论(MIT 6.006 第13讲)什么是图搜索?搜索可以理解为探索,给定一个图上的点S和A,需要找到从S到A的一个路径图的基础概念一个图用 G=(V,E) 表示,V是顶点的集合,E是边的集合。如下所示有两种图 - 无向图,V={a,b,c},E={{a,b},{b,c},{a,c} 有向图,V={a,b,c},E={(a,b),(b,a),(c,a),(b...

2018-06-24 17:32:39 2821 2

原创 深度优先搜索(Depth-first search)是如何搜索一张图的?

算法导论(MIT 6.006 第14讲)深度优先搜索算法是如何搜索一张图的?思想:对于最新发现的顶点v,如果它还有以此为起点而还未探索的边,沿此边探索。如果v的所有边已经探索完了,再回溯到发现v有起始点的那些边。一直到已经探索了从源起点可到的所有顶点为止。如果还有没探索的顶点,将它定义为一个新的源顶点,继续上述过程。 像走迷宫一样,尝试每种可能的结果,没走通,就回溯到当初分叉的...

2018-06-24 17:21:35 7295 1

空空如也

空空如也

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

TA关注的人

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