关闭

Java I/O模型从BIO到NIO和Reactor模式

Unix下五种I/O模型 Unix 下共有五种 I/O 模型: 阻塞 I/O非阻塞 I/OI/O 多路复用(select和poll)信号驱动 I/O(SIGIO)异步 I/O(Posix.1的aio_系列函数) 阻塞I/O 如上文所述,阻塞I/O下请求无法立即完成则保持阻塞。阻塞I/O分为如下两个阶段。 阶段1:等待数据就绪。网络 I/O 的情况就是等待远端数据陆续抵...
阅读(174) 评论(0)

Linux中使用top+jstack分析线程状态

背景 记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高的线程? 当然一个正常的程序员不会写出上述代码,这里只是为了让一个线程占用较高的cpu资源。 top命令 在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按...
阅读(201) 评论(0)

2017秋招编程题

1. 01串问题(网易内推批)如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: “1”,”10101”,”0101010”都是交错01串。 小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。 输入描述: 输入包括字符串s,s的长度length(1 ≤ length ≤...
阅读(197) 评论(0)

java程序性能分析之thread dump和heap dump

一.dump基本概念         在故障定位(尤其是out of memory)和性能分析的时候,经常会用到一些文件来帮助我们排除代码问题。这些文件记录了JVM运行期间的内存占用、线程执行等情况,这就是我们常说的dump文件。常用的有heap dump和thread dump(也叫javacore,或java dump)。我们可以这么理解:heap dump记录内存信息的,thread...
阅读(227) 评论(0)

SpringBoot自动化配置原理

一、@EnableAutoConfigurationSpringBoot的自动化配置原理,首先是从@SpringBootApplication开始的,这个注解是一个组合注解,核心功能时由@EnableAutoConfiguration提供的EnableAutoConfiguration@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUN...
阅读(276) 评论(0)

从输入URL到浏览器显示页面发生了什么

当在浏览器地址栏输入网址,如:www.baidu.com后浏览器是怎么把最终的页面呈现出来的呢?这个过程可以大致分为两个部分:网络通信和页面渲染。 一、网络通信     互联网内各网络设备间的通信都遵循TCP/IP协议,利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。分层由高到低分别为:应用层、传输层、网络层、数据链路层。发送端从应用层往下走,接收端从数据链路层网上...
阅读(200) 评论(0)

Java并发编程——阻塞队列

1.什么是阻塞队列 阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。 BlockingQueue有两个常见阻塞场景 当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放入队列。 这里写图片描述 当队列中填满数据的情况下,生产者端的...
阅读(123) 评论(0)

Mysql(Innodb)如何避免幻读

幻读Phantom Rows The so-called phantom problem occurs within a transaction when the same query produces different sets of rows at different times. For example, if a SELECT is executed twice, but re...
阅读(156) 评论(0)

Condition源码解析

在没有Lock之前,我们使用synchronized来控制同步,配合Object的wait()、notify()系列方法可以实现等待/通知模式。在Java SE5后,Java提供了Lock接口,相对于Synchronized而言,Lock提供了条件Condition,对线程的等待、唤醒操作更加详细和灵活。下图是Condition与Object的监视器方法的对比(摘自《Java并发编程的艺术》): ...
阅读(175) 评论(0)

深入分析Spring 与 Spring MVC容器启动

要想很好理解这三个上下文的关系,需要先熟悉Spring是怎样在web容器中启动起来的。Spring的启动过程其实就是其IOC容器的启动过程,对于web程序,IOC容器启动过程即是建立上下文的过程。 Spring的启动过程: 首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器...
阅读(152) 评论(0)

基数排序

基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序的发明可以追溯到1887年赫尔曼·何乐礼在打孔卡片制表机(Tabulation Machine)上的贡献。 它是这样实现的:将所有待比较数值(正整数)统一为同样的数...
阅读(140) 评论(0)

计数排序

计数排序的特征 当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。 由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。例如:计数排序是用来排序0到100之间的数字的最好的算法,但是它不适合...
阅读(135) 评论(0)

HTTPS为什么安全 &分析 HTTPS 连接建立全过程

专题一:HTTPS为什么安全 1、http为什么不安全? http协议属于明文传输协议,交互过程以及数据传输都没有进行加密,通信双方也没有进行任何认证,通信过程非常容易遭遇劫持、监听、篡改,严重情况下,会造成恶意的流量劫持等问题,甚至造成个人隐私泄露(比如银行卡卡号和密码泄露)等严重的安全问题。 可以把http通信比喻成寄送信件一样,A给B寄信,信件在寄送过程中,会经过很多的邮递员之...
阅读(244) 评论(0)

深入理解Java内存模型(六)——final

与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。 下面,我们通过一些示例性的代码来分别说...
阅读(101) 评论(0)

清晰理解红黑树的演变---红黑的含义

前言       红黑树,对不少人来说是个比较头疼的名字,在网上搜资料也很少有讲清楚其演变来源的,多数一上来就给你来五条定义,红啊黑啊与根节点距离相等之类的,然后就开始进行旋转、插入、删除这些操作。一通操作下来,连红色和黑色怎么来的,是什么含义,有什么作用都云里雾里的,能搞清楚就怪了。       本文介绍红黑树,暂时不涉及任何代码,只是帮助你理解红黑树的演变来源,树结构中红黑色具体含...
阅读(250) 评论(0)
251条 共17页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:210885次
    • 积分:3857
    • 等级:
    • 排名:第9138名
    • 原创:177篇
    • 转载:74篇
    • 译文:0篇
    • 评论:70条
    github
    博客专栏
    最新评论