- 博客(37)
- 收藏
- 关注
原创 TCP滑动窗口
TCP协议通过使用连续ARQ协议和滑动窗口协议,来保证数据传输的正确性,从而提供可靠的传输。一、自动重传请求(ARQ,Automatic Repeat reQuest)ARQ是TCP为了保证数据包的正确到达所采取的重传机制。有两种重传机制:超时重传机制 和 快速重传机制。超时重传机制为了方便解释,我们假设当前数据单向传输,从A到B,A向B发送数据, B向A回复 ACK。在超...
2018-06-24 23:26:36 2676
原创 java-AQS
参考: Java并发之AQS详解Lock使用Lock 时要显式地获取和释放锁,虽然获取锁和释放锁相比 synchronized 要麻烦,但是麻烦意味着对于所得操控更加灵活,可以可中断获取锁、超时获取锁等。。Lock 只是一个接口, 它定义了一些获取锁和释放锁的基本操作 方法 描述 void lock() 获取锁,获取后返回 void lockI...
2018-06-24 23:07:47 630
原创 java8线程池
java线程的创建、销毁和线程减切换是一件比较耗费计算机资源的事。如果我们需要用多线程处理任务,并频繁的创建、销毁线程会造成计算机资源的无端浪费,因此出现了线程池技术。在《java并发编程的艺术》一书中,作者总结了三条使用线程池的好处: 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 ...
2018-05-25 14:55:43 12457 2
原创 synchronized和ReentrantLock
synchronizedsynchronized 是一个 JVM 提供实现的内部锁机制。一个 synchronized 块包括一个锁对象引用和代码块。 当 synchronized 作用在方法上时,其锁对象是方法所在对象本身。使用 synchronized 时至多只有一个线程可以获得锁。当线程进入 synchronized 代码块时自动获取锁,离开代码块时自动释放锁。synchron...
2018-05-25 10:37:06 188
转载 equals()和hashCode()方法
原文链接 : http://www.importnew.com/25783.htmlJava的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码。equals()和hashCode()都不是final方法,都可以被重写(overwrite)。equal() 方法Object类中equals()方法实...
2018-05-24 21:17:25 268
原创 java之HashMap详解
概览HashMap的继承关系java.lang.Object ↳ java.util.AbstractMap<K, V> ↳ java.util.HashMap<K, V>public class HashMap<K,V> extends AbstractMap<K,V> ...
2018-05-24 16:38:23 364 1
原创 Condition接口
Condition 介绍java的 Object 方法拥有一组监视器方法,包括 wait()、notify() 等方法, 这些方法与 synchronized 同步关键字配合,可以实现等待/通知模式。 Condition 接口也提供了类似 监视器方法,不过 Condition 实现的等待/通知模式需要 Lock 对象的配合。Synchrond 等待/通知模型public cla...
2018-05-18 20:45:48 219
原创 java中的class类
Class类简述class 类和 java.lang.String, java.lang.Integer 或是我们自定义的类一样,都是java中的类,都继承自 java.lang.Object, 只不过名字比较特殊。对于我们自己定义的类,我们用类来抽象现实中的某些事物,比如我们定义一个名称为 Car 的类来抽象现实生活中的车,然后可以实例化这个类,用这些实例来表示我的车、你的车、黄的车、红...
2018-05-09 17:10:12 427
原创 JVM(五)启动、加载类过程与类加载器
本文参考自“《Java虚拟机原理图解》5. JVM类加载器机制与类加载过程 ”,对原内容作了些修改并重新组织JVM启动、加载类过程下面我将定义一个非常简单的java程序并运行它,来逐步分析java虚拟机启动的过程。package org.luanlouis.jvm.load; import sun.security.pkcs11.P11Util; /** * Crea...
2018-05-09 15:22:55 3357
转载 理解Java Integer的缓存策略
本文由 ImportNew - 挖坑的张师傅 翻译自 javapapers。欢迎加入翻译小组。转载请见文末要求。本文将介绍 Java 中 Integer 缓存的相关知识。这是 Java 5 中引入的一个有助于节省内存、提高性能的特性。首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为。接着我们将学习这种实现的原因和目的。你可以先猜猜下面 Java 程序的输出...
2018-05-07 09:50:57 198
原创 java中的强引用、软引用、弱引用和虚引用
参考: Java中的强引用,软引用,弱引用,虚引用有什么用? - winterSunshine的回答 - 知乎 https://www.zhihu.com/question/37401125/answer/100981172在Java中有四种引用类型:强引用(Strong Reference)、软引用(soft Reference)、弱引用(weak Reference)和 虚...
2018-05-06 17:28:48 1822
转载 java中Error和Exception
如上图所示,java中的Error和Exception都继承自Throwable类,可以统称为“异常”,只是所表示的异常种类不同。Error和Exception的区别Error 类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。如 java.lang.StackOverFlowError 和 Java.lang.OutOfMemoryError...
2018-05-06 16:30:35 198
转载 String、StringBuffer和StringBuilder区别
原文链接: http://www.cnblogs.com/su-feng/p/6659064.html 最近在学习Java的时候,遇到了这样一个问题,就是String, StringBuilder 以及 StringBuffer 这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,也便于加深自己学习过程中对这些知识点的记忆,如果哪里有误,恳请指正...
2018-05-06 15:11:59 140
转载 Java中native方法
原博文:https://blog.csdn.net/zmx729618/article/details/50779924Java开发中会碰到声明为 native的方法,如:public native int hashCode(); 这是一个native方法。为什么存在native方法呢?Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作...
2018-05-06 15:01:13 2089
原创 Arrays.copyOf() 和 System.arraycopy()
Arrays.copyOf() 和 System.arraycopy() 都可以完成数组的复制操作,那么区别在什么地方呢? 首先看一下示例代码。int[] src = new int[] {1, 2, 3, 4, 5};int[] dest = new int[10];Arrays.fill(dest, -1);System.arraycopy(src, 0, dest, 0, ...
2018-05-06 11:35:12 474
原创 JVM(一)JVM内存模型
JVM内存模型1. 程序计数器程序计数器用来保存要执行的下一条字节码的行号,程序的分支、循环、跳转、异常处理等都依赖这个计数器完成。程序计数器是线程私有的,每个线程维护自己的程序计数器。程序计数器是唯一一个在JVM中没有规定任何OOME情况的区域。2. Java虚拟机栈线程私有的,每个线程都有一个自己的栈,用于存储局部变量表,就是操作系统中的栈概念。 当线程请求的栈深...
2018-05-05 22:23:26 447
原创 JVM(四)HotSpot虚拟机垃圾回收器
HotSpot虚拟机垃圾回收器 HotSpot虚拟机提供有多种垃圾收集器,这些收集器大多适用于不同的分代内存中,并可以互相配合其他收集器使用。G1是目前最新最先进的垃圾收集器,在新生代和老年代都适用。新生代垃圾收集器Serial 收集器serial收集器是HotSpot虚拟机client模式下默认的新生代收集器。采用复制算法,单线程,在执行垃圾收集任务时会中断用户代码的执...
2018-05-05 22:23:19 263
原创 JVM(三)JVM内存分配与回收策略
新生代和老年代现代商用JVM大都采用分代收集算法,将java堆分成新生代、老年代和永久代。如下图所示 新生代回收策略主要是用来存放新生的对象。一般占据堆的1/3空间。由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。新生代又分为 Eden区、ServivorFrom、ServivorTo三个区。Eden区:Java新对象的出生地(如果新创建的对象占用内存...
2018-05-05 22:23:12 406
原创 JVM(二)JVM垃圾回收
在讨论JVM垃圾回收之前先要确定,JVM内存中哪些内存区域会进行GC。哪些内存区域需要GC在JVM的5个内存区域中,程序计数器、虚拟机栈、本地方法栈时随线程而生,随线程而死。程序计数器记录下一条指令的行号,自然不能被回收。虚拟机栈和本地方法栈都是栈内存,只是所服务的对象不同,栈内存中的栈帧随着方法的调用返回而不断进行着出栈入栈操作,方法入栈之前其所需的内存是已知的,在方法执...
2018-05-05 22:22:57 143
原创 C++11多线程学习小结
关于c++11 多线程的一些小结, 内容基本上是自己看书的笔记。 详细内容还需参考cppreference.com过程中参考了这篇博文,和 这篇博文async 和 futureasyncasync 在后台启动一个异步执行的任务 通常和 future 一起使用std::async(launch, function, arg ...) - launch 发射策略 - function 是一个可调用对
2017-06-01 22:48:07 950 1
原创 一个web请求的艰辛历程
从链路层开始来探索一个主机接入网络后进行一个web请求的过程(计算机网络:自顶向下方法)假定下面是有关的网络拓扑链路层阶段如上图所示, 假定Bob用他的主机接入到学校的以太网, 连接到一个以太网交换机, 该交换机同时连接到学校网络出口路由器, 该路由器与一个ISP(comcast.net)连接。comcast.net 为学校提供DNS服务。
2017-05-28 21:10:55 570
原创 数据链路层
数据链路层一、链路层概述运行链路层协议的设备称为结点,相邻结点间的通信信道称为链路,数据被封装在链路层帧中.链路层提供的服务成帧(framing)链路接入 媒体访问控制(Medium Access Control,MAC)协议规定了帧在链路上的传输规则。可靠交付差错检测和纠正链路层在何处实现链路层的主体部分是在网络适配器(network adapter)上实现的,网络适配器有时也称作网络接
2017-05-28 20:32:03 550
原创 一个典型的DHCP(动态主机配置协议)服务过程
先决条件, 子网中必须有一台或者多态DHCP服务器正在运行。当一个主机介入子网, 欲获取一个IP地址, 分别以 0.0.0.0 和 255.255.255.255 作为源和目的IP地址广播DHCP发现报文(UDP), 发送端口为67, 目的端口为68.一台或多态DHCP服务器收到此报文后 广播响应(此时主机还没有IP), 响应报文中包含要分配的IP, 租用期, 子网掩码, 网关等信息主机收到此
2017-05-28 20:28:17 561
原创 TCP拥塞控制
建立TCP连接的双方都维护着一个缓冲区, 当缓冲区满了的时候再接收数据会造成溢出, 就会丢弃数据. 因此, 为了消除这种现象, TCP提供了流量控制服务.另外, 由于网络带宽等因素的限制, 发送方发出的数据并不能总是顺利地到达接收方, 当路由器缓冲区 满了的时候, 再有数据到达会被丢弃, 从而造成数据丢失, 针对这种现象, TCP同样提供了拥塞控制服务流量控制如上所述, TCP连接的建立会产生两
2017-05-26 22:47:05 396
转载 成员访问(->)操作符的重载
源地址:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28662931&id=3498450(参考了C++primer) 箭头(->)操作符,看起来很像二元操作符,左操作数是类对象,右操作数是类成员,即使如此,箭头操作符的重载函数是没有第二个形参的(第一个是隐含形参this),理解起来有点难度; 函数
2017-05-04 16:01:43 2223
原创 模板类中包含模板类友元和其他友元函数
发表一点自己对 《C++ Primer 5th》模板那块的理解, 欢迎指正一对一友好关系在类模板与另一个模板(模板类或模板函数)间建立对应实例及其友好关系,为了在类模板中引用另一个类模板或函数的一个特定实例,必须先声明另一个模板: 方便理解和叙述,将含友元的类称为主类,将要做友元类的模板类称为客类//为了在类里面引用 BlobPtr<T> 和 poerator==<T> 现在类之前声明templ
2017-05-03 22:02:29 2813
原创 Linux编程实践教程小结
编写Linux who 命令Linux文件操作函数: - 打开一个文件 int fd = open(char *name, int how) 参数 how 代表文件的打开方式: - O_RDONLY, O_WRONLY 和 O_RDWR 代表只读,只写,和读写 通过文件读取数据: ssize_t numread = read(int fd, void *buf, size_t q
2017-04-12 16:23:53 562
转载 二、数据库系统结构
数据库系统结构与演变数据库系统标准结构DBMS管理数据的三个层次用户层:某一用户能够看到与处理的数据,全局数据中的某一部分逻辑层:全局角度理解/管理的数据,含相应的关联约束物理层:存储在介质上的数据,含存储路径、存储方式、索引方式等数据 与 数据的结构–模式模式(Schema) 对数据库中的数据进行的一种结构性的描述所观察到数据的结构信息模式例: 学生登记表( 学号 char(8)
2016-12-04 18:55:28 647
原创 一、数据库系统概述
一、数据库系统概述DBMS的主要特性数据访问的高效和可扩展性缩短应用开发时间数据独立性(物理数据独立性/逻辑数据独立性)数据完整性和安全性并发访问和鲁棒性(恢复)文件系统的不足数据冗余和不一致 多种文件格式、信息重复存储数据访问困难 需要编写一个新的程序来完成每一个新的任务数据孤立 多文件多格式,检索、共享数据困难完整性问题 完整性约束称为程序代码的一部分增加新的约束或
2016-12-03 11:38:19 640
原创 LINK2005错误
错误一: 在头文件中,类外面定义成员函数没有加 inline 关键字 并且在 .CPP 文件中包含了头文件。class Query{public: Query(const std::string&); //创建一个新的 WordQuery 对象private: Query(std::shared_ptr<Query_base> query) : q(query)
2016-11-30 01:17:28 599
原创 数据链路层
数据链路层标签(空格分隔): 链路层一、链路层概述运行链路层协议的设备称为结点,相邻结点间的通信信道称为链路,数据被封装在链路层帧中.链路层提供的服务成帧(framing)链路接入 媒体访问控制(Medium Access Control,MAC)协议规定了帧在链路上的传输规则。可靠交付差错检测和纠正链路层在何处实现链路层的主体部分是在网络适配器(network adapter)上实现的,
2016-11-24 16:56:07 528 1
原创 C++中的可调用对象
c++中的可调用对象有以下几种:函数函数指针bind创建的对象lambda表达式重载函数调用运算符的类函数对象都可以在使用算法时作为谓词来调用lambda表达式[capture list] (parameter list) -> return type { function body }capture 是一个lambda表达式所在函数中定义的局部变量列表,可以捕获使用,可以通过加上 &
2016-10-25 15:21:23 673
原创 参数绑定bind
bind函数 定义在头文件functional中当某算法只接受单一参数,而我们需要多个参数来解决问题时要用到参数绑定。 如: 假如我们想找到容器中string长度大于5的元素时定义一个比较函数: bool check_size(const string &s, string::size_type sz){ return s.size() >= sz;}但是find_if第三个参
2016-10-25 12:34:02 642
原创 将重载运算符定义为成员函数还是普通的非成员函数
● 赋值 = 、下标[ ]、调用( )、和成员访问箭头 ->必须是成员函数 ● 符合符合赋值运算符应该是成员,但是并非必须 ● 改变对象状态的运算符或者与给定类型密切相关的运算符,如 递增、递减和解引用运算符应该 是成员 ● 具有对称性的运算符可能转换任一端的运算对象,例如算数、相等性、关系和位运算符等,因此通常应该是普通的非成员函数。举例:
2016-10-25 12:17:02 2858
原创 右值和左值,右值引用和左值引用
右值和左值左值右值的形式区分(或者称语法区分)是能否用取地址&运算符;语义区分(即其本质涵义)在于表达式代表的是持久对象还是临时对象。 当一个对象被用作右值的时候,用的是对象的值(内容),当对象被用作左值的时候,用的是对象的身份(在内存中的位置) ——CppPrimer, 5th返回左值的有:赋值运算符需要一个(非常量)左值作为其左侧运算对象,得到的结果也是一个左值取地址作用于一个左值运算
2016-10-25 12:13:35 1019
原创 使用lambda输出容器元素
头文件 iterator algorithmcopy(ivec.begin(), ivec.end(), std::ostream_iterator<string>(std::cout, " "));
2016-10-24 19:44:31 434
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人