摘要: 文章也发布在 "听风过境的专栏" “free store” VS “heap” 当我问你C++的内存布局时,你大概会回答: “在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区”。 如果我接着问你自由存储区与堆有什么区别,你或许这样回答: “malloc在堆上分配的阅读全文
posted @ 2015-12-20 15:20 melonstreet 阅读(6415) 评论(3) 编辑
摘要: 0.前言 文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局、虚表指针、虚基类指针等有深入了解的朋友可以慢慢看。 本文的结论都在VS2013上得到验证。不同的编译器在内存布局的细节上可能有所不同。 文章如果有解释不清、解释不通或疏漏的地方,恳请指出。 1.何为C++对象模型? 引用《深度阅读全文
posted @ 2015-10-25 20:28 melonstreet 阅读(16426) 评论(33) 编辑
摘要: 文章也发布在 "腾讯云+社区" 一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧)。最近花了点时间认真看了智能指针,特地来写这篇文章。 1.智能指针是什么 简单来说,智能指针是一个类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。具体而言阅读全文
posted @ 2015-09-01 23:05 melonstreet 阅读(7813) 评论(7) 编辑
摘要: 问题出现:现网CPU飙高,Full GC告警 CGI 服务发布到现网后,现网机器出现了Full GC告警,同时CPU飙高99%。在优先恢复现网服务正常后,开始着手定位Full GC的问题。在现场只能够抓到四个GC线程占用了很高的CPU,无法抓到引发Full GC的线程。查看了服务故障期间的错误日志,阅读全文
posted @ 2018-09-14 17:26 melonstreet 阅读(345) 评论(2) 编辑
摘要: JVM的内存区域是怎么划分的? JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程;有些区域会抛出OOM异常,有些则不会,了解JVM的内存区域划分以及特征,是定位线上内存问题的基础。那么JVM内存区域是怎么划分的呢? 首先是 程序计数器 (Program Counter Regi阅读全文
posted @ 2018-09-12 18:00 melonstreet 阅读(202) 评论(2) 编辑
摘要: 并发环境下进行编程时,需要使用锁机制来同步多线程间的操作,保证共享资源的互斥访问。加锁会带来性能上的损坏,似乎是众所周知的事情。然而,加锁本身不会带来多少的性能消耗,性能主要是在线程的获取锁的过程。如果只有一个线程竞争锁,此时并不存在多线程竞争的情况,那么JVM会进行优化,那么这时加锁带来的性能消耗阅读全文
posted @ 2018-01-25 17:18 melonstreet 阅读(771) 评论(2) 编辑
摘要: 进行多线程编程的时候,需要考虑的是线程间的同步问题。对于共享的资源,需要进行互斥的访问。在Java中可以使用一些手段来达到线程同步的目的: 1. synchronized 2. ThreadLocal,线程本地变量 3. Java.util.concurrent.Lock Java中,线程会共享堆上阅读全文
posted @ 2018-01-24 16:53 melonstreet 阅读(150) 评论(1) 编辑
摘要: Java的Object类包含了三个final方法,允许线程就资源的锁定状态进行通信。这三个方法分别是:wait(),notify(),notifyAll(),今天来了解一下这三个方法。在任何对象上调用这些方法的当前线程应具有对象监视器(锁住了一个对象,就是获得对象相关联的监视器),否则会抛出java阅读全文
posted @ 2018-01-24 09:33 melonstreet 阅读(115) 评论(1) 编辑
摘要: 当你需要使用Java线程在多线程环境下进行编程时,理解Java的线程周期与线程的状态是非常重要的。通过实现Runnale接口或者继承Thread类,我们可以创建线程,为了启动一个线程,我们需要创建一个Thread对象,并且调用它的start()方法,以便以线程的方式来执行run()方法。 Java中阅读全文
posted @ 2018-01-23 14:37 melonstreet 阅读(360) 评论(0) 编辑
摘要: Java的ThreadLocal变量用来创建线程本地变量。我们知道,一个对象上的所有线程,都会共享该对象的变量,所以这些共享的变量不是线程安全的。我们可以使用synchronization同步语法来使得线程安全,但如果想避免使用synchronization,那么可以使用线程本地变量(ThreadL阅读全文
posted @ 2018-01-23 11:41 melonstreet 阅读(70) 评论(0) 编辑
摘要: 题目 输出: 4 1 3 解释 1. 当函数有可命名结果形参时,结果形参的初始值被设置为零值,函数的return语句会设置结果形参的值 2. 当函数有可命名结果形参时,defer函数是可以修改它,然后再将它的值返回 DeferFunc1 和DeferFunc3是两个有命名结果形参的函数,结果形参的赋阅读全文
posted @ 2017-10-12 15:42 melonstreet 阅读(201) 评论(0) 编辑
摘要: 本文的主要内容是: 了解goroutine,使用它来运行程序 了解Go是如何检测并修正竞争状态的(解决资源互斥访问的方式) 了解并使用通道chan来同步goroutine 一、使用goroutine来运行程序 1.Go的并发与并行 Go的并发能力,是指让某个函数独立于其他函数运行的能力。当为一个函数阅读全文
posted @ 2017-10-01 00:14 melonstreet 阅读(1878) 评论(0) 编辑
摘要: 一个在线的Go编译器 如果还没来得及安装Go环境,想体验一下Go语言,可以在 "Go在线编译器" 上运行Go程序。 格式化 让所有人都遵循一样的编码风格是一种理想,现在Go语言通过 ,让机器来处理大部分的格式化问题。 是go标准库提供的一段程序,可以尝试运行它,它会按照标准风格缩进,对齐,保留注释,阅读全文
posted @ 2017-09-30 09:45 melonstreet 阅读(1384) 评论(1) 编辑
摘要: 俩个步骤: 在Linux终端下输入: 打开浏览器,在地址栏输入 http://localhost:8000/ 然后就可以查到标准库的文档了: 在Unix like系统上一般都预装了Python,比如我的Ubantu上就预装了Python2.7。我自己又安装了Python3.5 ,如果要查看Pytho阅读全文
posted @ 2017-04-27 17:35 melonstreet 阅读(1438) 评论(0) 编辑
摘要: 利用python写了一小段代码,里面使用到了Python标准库的 来构建一个基础HTTP服务器: 运行时抛出错误: 原因: http.server only exists in Python 3. In Python 2, you should use the BaseHTTPServer modu阅读全文
posted @ 2017-04-27 15:40 melonstreet 阅读(1991) 评论(0) 编辑
摘要: 如果你使用的是Linux发行版,例如Ubantu,那么你的系统中可能已经安装好python了。可以使用 来测试一下: 当然,这是我安装了Python3之后显示的。如果你测试出来你的系统安装的是Python 2.7或是提示command not found,想升级或安装Python3的话,可以使用如下阅读全文
posted @ 2017-04-25 22:44 melonstreet 阅读(7818) 评论(0) 编辑
摘要: 安装的ubuntu默认的编辑器是vi,遇到了两个问题: ① insert模式下,按方向键将产生A、B、C、D等字符,解决方案: :set nocompatible ② insert模式下Backspace键无法删除字符,解决方案: :set backspace=indent,eol,start 每次阅读全文
posted @ 2017-04-05 19:31 melonstreet 阅读(1129) 评论(0) 编辑
摘要: Ubuntu安装后,root用户默认是被锁定了的,不允许登录,也不允许 su 到 root 。 可以使用: sudo passwd 来重新设置root密码,后即可登陆root。阅读全文
posted @ 2017-04-05 14:09 melonstreet 阅读(179) 评论(0) 编辑
摘要: java尽力保证:所有变量在使用前都能得到恰当的初始化 ①函数/方法局部变量的初始化 在C/C++中,变量的初始化还是得依赖于程序员的自觉性。对于函数局部变量,编译器不会为基本类型赋予默认初始值,新手经常会使用未初始化的指针访问内存,导致程序崩溃。对于类对象,编译器将使用类的默认构造函数对对象进行初阅读全文
posted @ 2017-03-16 16:56 melonstreet 阅读(169) 评论(0) 编辑
摘要: 0.前言 这些简单的shader程序都是写于2015年的暑假。当时实验室空调坏了,30多个人在实验室中挥汗如雨,闷热中学习shader的日子还历历在目。这些文章闲置在我个人博客中,一年将过,师弟也到了学shader的时候,这些例程虽然很简单,刚接触shader时却可以练练手,所以从个人博客中中搬了出阅读全文
posted @ 2017-03-16 16:37 melonstreet 阅读(487) 评论(0) 编辑
摘要: 《java编程思想》 读书笔记 2017/3/15 读《java编程思想》读到初始化与清理一章,文中提及java的finalize()方法,联想到了C++的析构函数。finalize()方法与析构函数存在天然差别,这种差别源于语言本身机制的不同。 在C++中,对象是可以在栈上分配的,也可以在堆上分配阅读全文
posted @ 2017-03-15 23:05 melonstreet 阅读(1153) 评论(0) 编辑
摘要: 我使用过一个简单的后台服务框架.这个框架上手很容易,我只需要继承一个基类,同时实现,或重写(override)基类声明的几个接口(这些接口声明为虚函数,或者纯虚函数),然后调用基类定义好的run()函数,便可以将框架代码运行起来.run函数做的事情,是依序调用上述的几个接口: 其中收包,解包,回包,阅读全文
posted @ 2017-03-11 17:03 melonstreet 阅读(438) 评论(0) 编辑
摘要: 操作系统接口 操作系统的任务是让多个程序共享计算机(资源),并且提供一系列基于计算机硬件的但更有用的服务。操作系统管理并且把底层的硬件抽象出来,举例来说,一个文字处理软件(例如word)不需要关心计算机使用的是哪种类型的磁盘。操作系统使得硬件可以多路复用,允许许多程序共同使用计算机并且在同一时间上运阅读全文
posted @ 2016-05-31 11:11 melonstreet 阅读(324) 评论(0) 编辑
摘要: ① TCP是个流协议,它存在粘包问题 TCP是一个基于字节流的传输服务,"流"意味着TCP所传输的数据是没有边界的。这不同于UDP提供基于消息的传输服务,其传输的数据是有边界的。TCP的发送方无法保证对等方每次接收到的是一个完整的数据包。主机A向主机B发送两个数据包,主机B的接收情况可能是 产生粘包阅读全文
posted @ 2016-05-28 15:09 melonstreet 阅读(14201) 评论(3) 编辑
摘要: 以良好的方式编写C++ class 假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯。 ① Header(头文件)中的防卫式声明 防止头文件的内容被多次包含。 ② 把数据放在private声明下,提供接口访问数据 ③ 不会改变类属性(数据成员)的成员函数,全部加上con阅读全文
posted @ 2016-05-22 20:30 melonstreet 阅读(4064) 评论(13) 编辑
摘要: 文件描述符 进程每打开一个文件的时候,会获得该文件的 文件描述符 ,而后续的读写操作都把文件描述符作为参数。在用户空间或者内核空间,都是通过文件描述符来唯一地索引一个打开的文件。文件描述符使用int类型表示,文件描述符的范围从0开始,到上限值 1,默认情况下,上限值为1024,也就是说,进程默认情况阅读全文
posted @ 2016-05-08 18:20 melonstreet 阅读(1197) 评论(0) 编辑
摘要: 1. make工具 利用make工具可以自动完成编译工作,这些工作包括: 如果修改了某几个源文件,则只重新编译这几个源文件 如果某个头文件被修改了,则重新编译所有包含该头文件的源文件 利用这种自动编译可以大大简化开发工作,避免不必要的重新编译。make工具通过一个称为Makefile的文件来完成并自阅读全文
posted @ 2016-05-05 11:17 melonstreet 阅读(2790) 评论(0) 编辑
摘要: 1. 什么是gcc gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还支持C++、java、Pascal等语言。gcc支持多种硬件平台。 2. gcc的特点 gcc是一个阅读全文
posted @ 2016-05-03 22:51 melonstreet 阅读(3233) 评论(2) 编辑
摘要: SO_REUSEADDR选项 在上一篇文章的最后我们贴出了一个简单的C/S通信的例程。在该例程序中,使用"Ctrl+c"结束通信后,服务器是无法立即重启的,如果尝试重启服务器,将被告知: bind: Address already in use 原因在于服务器重新启动时需要绑定地址: 而这个时候网络阅读全文
posted @ 2016-04-26 16:47 melonstreet 阅读(1614) 评论(0) 编辑
摘要: 在本篇文章中,先介绍一下Socket编程的一些API,然后利用这些API实现一个客户端 服务器模型的一个简单通信例程。该例子中,服务器接收到客户端的信息后,将信息重新发送给客户端。 socket()函数 socket()函数用于创建一个套接字。这就好像购买了一个电话。不过该电话还没有分配号码。 参数阅读全文
posted @ 2016-04-25 21:14 melonstreet 阅读(871) 评论(0) 编辑
摘要:  1. 什么是socket socket可以看成是用户进程与内核网络协议栈的编程接口。TCP/IP协议的底层部分已经被内核实现了,而应用层是用户需要实现的,这部分程序工作在用户空间。用户空间的程序需要通过套接字来访问内核网络协议栈。 套接口是全双工的通信,它不仅可以用于本机的进程间通信,还可以用于阅读全文
posted @ 2016-04-24 11:46 melonstreet 阅读(692) 评论(0) 编辑
摘要: 0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+阅读全文
posted @ 2016-02-17 16:55 melonstreet 阅读(3597) 评论(1) 编辑
摘要: 0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+阅读全文
posted @ 2016-02-17 10:43 melonstreet 阅读(5184) 评论(0) 编辑
摘要: 0.前言 这篇文章写于去年的暑假。大二的假期时间多,小组便开发一个手机游戏的项目,开发过程中忙里偷闲地了解了Unity的shader编写,而CG又与shaderLab相似,所以又阅读了《CG教程》、《GPU 编程与CG 语言之阳春白雪下里巴人》学习图形学的基础。尝试编写unity shader时还恶阅读全文
posted @ 2016-02-15 11:36 melonstreet 阅读(3143) 评论(2) 编辑
摘要: 0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+阅读全文
posted @ 2016-02-11 15:32 melonstreet 阅读(5301) 评论(12) 编辑
摘要: 0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+阅读全文
posted @ 2016-02-05 22:59 melonstreet 阅读(2041) 评论(0) 编辑
摘要: 0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+阅读全文
posted @ 2016-02-04 10:35 melonstreet 阅读(13990) 评论(5) 编辑
摘要: 0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+阅读全文
posted @ 2016-02-04 00:57 melonstreet 阅读(5831) 评论(2) 编辑
摘要: 0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+阅读全文
posted @ 2016-02-03 08:38 melonstreet 阅读(7055) 评论(0) 编辑
摘要: 0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+阅读全文
posted @ 2016-02-02 07:42 melonstreet 阅读(12321) 评论(0) 编辑
摘要: 0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+阅读全文
posted @ 2016-02-01 08:01 melonstreet 阅读(4813) 评论(4) 编辑
摘要: 0.前言 本文简单地总结了STL的顺序容器的知识点。文中并不涉及具体的实现技巧,对于细节的东西也没有提及。一来不同的标准库有着不同的实现,二来关于具体实现《STL源码剖析》已经展示得全面细致。所以本文仅仅是对容器基础知识的归纳。至于容器提供的接口与使用实例,建议查取官方文档。文章难免有错漏,希望指出阅读全文
posted @ 2016-01-23 11:57 melonstreet 阅读(5476) 评论(2) 编辑
摘要: 前言 几个星期前去面试C++研发的实习岗位,面试官问了个问题: new与malloc有什么区别? 这是个老生常谈的问题。当时我回答new从自由存储区上分配内存,malloc从堆上分配内存;new/delete会调用构造函数/析构函数对对象进行初始化与销毁;operator new/delete可以进阅读全文
posted @ 2016-01-19 01:27 melonstreet 阅读(11121) 评论(12) 编辑