- 博客(24)
- 资源 (20)
- 收藏
- 关注
转载 深入分析Java的序列化与反序列化
序列化是一种对象持久化的手段。普遍应用在网络传输、RMI等场景中。本文通过分析ArrayList的序列化来介绍Java序列化的相关内容。主要涉及到以下几个问题:怎么实现Java的序列化为什么实现了java.io.Serializable接口才能被序列化transient的作用是什么怎么自定义序列化策略自定义的序列化策略是如何被调用的ArrayList对序列化的实现有什么
2016-08-31 11:23:40 546
原创 桥接模式
对于桥接模式的理解,参考《大话设计模式》桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立的变化。这里需要理解一下,什么叫抽象与它的实现部分分离,这不是说,让抽象类与其派生类分离,因为这没有任何意义,实现指的是抽象与它的派生类都用来实现自己的对象(可以理解为抽象类与实现类都有自己单独的子类?)。《大话设计模式》使用的例子是手机,手机可以按照品牌分类,也可以按照软件
2016-08-25 16:18:18 359
原创 适配器模式 合成模式
《Java设计模式》根据意图对设计模式进行的分类,作为参考,如下: 这里介绍“接口型模式”中的适配器模式、合成模式,桥接模式。适配器模式与合成模式还是比较好理解的,关键是桥接模式。 适配器模式:对适配器的概念源于电子通信,一般意义上的理解就是两个东西不匹配了,比如型号、速度等,拿个适配器转换一下,这里适配器的概念是类似的。在《Java设计模式》中举得一个例子就是客户端(clie
2016-08-25 15:08:21 443
原创 epoll的反应堆实现模式
这里有个epoll的反应堆模式实现,在这段代码之前,不知道什么是reactor反应堆,赶紧去补了一下Reator模式 论文阅读整理,这个论文是以面向对象的思想来介绍反应堆的实现的。对比这个epoll的反应堆实现,发生跟论文中的实现还是有点出入,而普通的epoll实现epoll 示例跟不用reator模式差不多,当然思想上还是有差别的。在反应堆实现中,为每个fd由自己封装了一个mye
2016-08-24 18:43:57 1251
原创 Reator模式 论文阅读整理
华盛顿大学的论文 Reactor An Object Behavioral Pattern for Demultiplexing and Dispatching Handles for Synchronous Events 讲了Reactor模式的设计。大体看了一下,发现也不是很复杂,而且也没有想象中的有新意。(可能这篇论文比较久了,有更新的Reactor模式等,这里只是大体了解其意)。
2016-08-24 17:20:13 915
原创 判断一个二叉树是不是合法的二分查找树
leetcode题目https://leetcode.com/problems/validate-binary-search-tree/,判断一个二叉树是不是合法的二分查找树,这个题目应该说遇到多次了,然而在写的时候还是费了一番时间,而且写了一个十分拙劣的算法(在本文最后,不做解释)。参考leetcode的discuss,遇到了两个比较好的解法,一个是递归(同样是递归,人家的就很简单),另一个
2016-08-23 10:57:59 3611
原创 Top K Frequent Elements 选出数组中出现次数最多的k个元素
原题地址:https://leetcode.com/problems/top-k-frequent-elements/,这个题目要求时间复杂度不能超过O(nlgn),也就是说常规的排序算法不可行(排序算法复杂度至少为nlgn)。那么想到的一种算法是使用优先队列,限制优先队列的大小为K,那么可以做到时间复杂度为O(nlgk),还能不能再提高呢,另一种方法是使用桶排序,算法复杂度为O(n)。
2016-08-22 17:49:31 3589
原创 《Node入门》读书笔记
这里Node入门给出了一个nodejs教程,感觉挺好,花半天时间看了一下,把其中的代码也敲了一下。笔记都写到代码里去了。感觉如何正确实现非阻塞IO在node中还是挺重要的,下面一共四个nodejs模块,分别为index.js,负责启动server,加载路由配置,server.js就是负责接收请求与调用route进行转发。router.js就是转发请求了,requestHanders.js就
2016-08-20 22:30:48 432
转载 为什么要用 Node.js
这是一个移动端工程师涉足前端和后端开发的学习笔记,如有错误或理解不到位的地方,万望指正。Node.js 是什么传统意义上的 JavaScript 运行在浏览器上,这是因为浏览器内核实际上分为两个部分:渲染引擎和 JavaScript 引擎。前者负责渲染 HTML + CSS,后者则负责运行 JavaScript。Chrome 使用的 JavaScript 引擎是 V8,它的速度非常
2016-08-20 16:01:31 642
原创 《Java性能优化...》读书笔记
1、JVM虚拟机内存分配参数-Xmx:设置最大堆大小,最大堆指的是新生代和年老代的大小之和的最大值,它是Java应用程序的堆上限。当使用值超过这个限制时会抛出OutOfMemoryError异常。可以使用循环申请1M空间(new byte[1024*1024])进行测试,-Xms:设置最小堆(可以认为后面的s代表small)大小,Java应用程序在运行时,首先会被分配-Xms指定的内存
2016-08-20 15:13:56 759 1
原创 二分查找总结
在《编程之美》中有一组关于二分查找的题目,给定一个有序(不降序)数组arr和一个数字v:1、求任意一个i,使得arr[i]等于v,不存在则返回-1。2、求最小的一个i,使得arr[i]等于v,不存在则返回-1。3、求最大一个i,使得arr[i]等于v,不存在则返回-1。4、求最大的i,使得arr[i]小于v,不存在则返回-1。5、求最小的i,使得arr[i]大于v,不存在返回-
2016-08-19 19:38:02 424
原创 编程之美,实现MaxQueue
要求能在O(1)时间内取最大元素,并且放元素和取元素的时间复杂度尽量是O(1),之前有两个题是这个题的基础:1、实现MaxStack(或者MinStack)。实现MaxStack比较简单,因为栈的操作都是在一端进行的。2、用栈来实现队列。这个题就是上述两个题的综合应用。首先要实现一个MaxStack,然后再用两个MaxStack来实现一个队列,两个MaxStack中的最大值就是队列中的
2016-08-19 09:27:53 994
原创 akka introduce
什么是Akka,Akka主要用来编写分布式的,可扩展的,并发的应用程序,详见官方文档,官方文档真的好长啊,这里记了一些akka的helloworld程序,算是简单入门吧。Akka总结Actor模型基于一种通过消息进行通信的简单的actor实体结构,能够轻松地构建应用程序来实现高并发性和可伸缩性。 用于并发计算的actor模型基于各种称为actor的原语来构建系统。A
2016-08-18 15:45:11 597
原创 Java AIO总结与示例
AIO是异步IO的缩写,虽然NIO在网络操作中,提供了非阻塞的方法,但是NIO的IO行为还是同步的。对于NIO来说,我们的业务线程是在IO操作准备好时,得到通知,接着就由这个线程自行进行IO操作,IO操作本身是同步的。但是对AIO来说,则更加进了一步,它不是在IO准备好时再通知线程,而是在IO操作已经完成后,再给线程发出通知。因此AIO是不会阻塞的,此时我们的业务逻辑将变成一个回调函数,等待I
2016-08-16 17:59:56 18689 5
原创 《实战Java...》读书笔记2
10、锁消除也是一种优化技术,一个例子是在不需要同步的地方使用了线程安全的数据结构,比如在线程的局部变量中使用了Vector,一个线程的局部变量是不能被其他线程访问的,不存在多线程问题,虚拟机检测到这样的问题就会将不必要的锁去除。 11、关于ThreadLocal,ThreadLocal是为了让每个线程都拥有一个对象的副本,多个线程之间不存在相互干扰。具体实现上,每个线程都持有一个Thre
2016-08-14 22:17:32 543
原创 《实战Java...》读书笔记
1、如何终止一个线程? 调用stop()方法不可取,因为stop会立即停止线程并释放锁,容易导致不一致,那怎么停止呢?一般是给线程设置一个标志位表示是否继续运行,然后设置一个方法,用来将标志位设置为false,并且在run方法中不断坚持这个标志位,如果为false则使用break跳出无限循环。 2、调用Thread.sleep时要处理InterruptedException,也就
2016-08-14 22:16:16 578
原创 Java NIO 总结与示例
Java NIO是New IO的简称,它是一种可以替代Java IO的一套新的IO机制。它提供了一套不同于Java标准IO的操作机制。Java NIO中涉及的基础内容有通道(Channel)和缓冲区(Buffer)、文件IO和网络IO。有关通道、缓冲区以及文件IO在这里不打算进行详细的介绍。这里参考《实战Java高并发程序设计》利用NIO实现一个Echo服务器的服务端与客户端。在看
2016-08-14 21:03:12 812
原创 一个并行搜索算法
抄自《实战Java高并发程序设计》package understanding;import java.util.ArrayList;import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.con
2016-08-13 16:14:54 4147
原创 倒计时器:CountDownLatch
CountDownLatch是一个非常实用的多线程控制工具类。其使用场景是一些线程等待另一些线程结束之后才执行。一个简单的例子是火箭发射程序。在火箭发射之前要进行检查任务,检查任务完成之后才进行火箭发射。使用CountDownLatch可以很容易完成程序。CountDownLatch的构造函数有一个int整数,用来标示执行任务之前需要执行的countDownLatch.countDown次数。 程
2016-08-12 21:13:55 492
转载 epoll 三个方法 两种工作模式
epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。一 epoll操作过程 epoll操作过程需要三个接口,分别如下:int epoll_create(int si
2016-08-12 15:56:16 4165
原创 C语言结构体赋值问题
本身做Java比较多,直接在C中将一个结构体赋值给另一个结构体时,不太确定会发生什么事。下面写了一个小例子测试。结论是:C结构体直接复制类似于深拷贝,改变被修改的结构体不会影响到原来的结构体。代码:#include typedef struct{ char *name; int age;}student;int main(){ student a,b; a.n
2016-08-12 10:08:54 2472
转载 epoll 示例
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。不管是文件,还是套接字,还是管道,我们都可以把他们看作流。之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要从socket读如数据,但是
2016-08-11 21:35:58 917
原创 扩展ThreadPoolExecutor打印线程错误堆栈
在使用JDK Executors产生线程池执行任务时,如果使用threadPool.submit(Runnable)来提交任务,且不调用future.get时,如果线程发生错误,程序是不会打印错误堆栈的,比如下面的程序,当i==0时,100/i发生运行时异常,只有四组输出(应该有五组),但是程序不会打印任何异常信息,import java.util.concurrent.Synchronous
2016-08-10 21:34:05 2180
原创 判断一个机器使用的是大端存储还是小端存储
本文节选自《UNIX网络编程》。考虑一个16位整数,它由两个字节组成。内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址,这称为小端(little-endian)字节序;另一种方法是将高序字节存储在起始地址,这称为大端(big-endian)字节序。下面的程序可以判断一台机器是大端存储还是小端存储。#includeint main(int argc, char*
2016-08-06 10:44:33 1930
Java程序性能优化 让你的Java程序更快、更稳定 pdf [葛一鸣编著][清华大学出版社][2012.10][400页][13093953]
2017-11-29
云计算网络珠玑 完整版 pdf part1 注意还有part2
2016-11-06
图说设计模式 Graphic Design Patterns
2016-08-27
中文情感分析 酒店评论预料
2015-11-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人