常敲代码手不抖

喜欢什么,就学什么呗...个人QQ :923683900
私信 关注
ChrisYoung1314
码龄6年
  • 471,827
    被访问量
  • 57
    原创文章
  • 15,870
    作者排名
  • 1,118
    粉丝数量
  • 于 2015-05-19 加入CSDN
获得成就
  • 获得1,695次点赞
  • 内容获得296次评论
  • 获得2,654次收藏
荣誉勋章
TA的专栏
  • JAVA
    2篇
  • MySQL(数据库)
    3篇
  • c++基础
    13篇
  • Linux系统
    17篇
  • 网络编程
    5篇
  • 数据结构与算法
    5篇
  • 设计模式
    1篇
  • STL源码剖析
    4篇
  • 大数据与云计算
    4篇
  • 开发工具
    1篇
  • css
    1篇
  • Javascript
  • 前端技术
    1篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

多条件if...else...选择语句代码优化

偶尔间又看到了自己的博客,突然发现好久没有写博客了。看到自己的博客现在浏览量还算挺不错的,所以决定重新开始写一些博客,不过我已经转行前端两年了,所以不会像以前那样写C++和算法了,现在以写前端的内容为主。最近在写业务代码时,发现有一段业务的逻辑非常蛋疼,由于选择逻辑太多,所以需要靠多个if...else...来实现。大致的代码如下:function getQueryType(item) {
原创
4101阅读
0评论
6点赞
发布博客于 3 年前

使用CSS替代JS实现几种常见的特效

本文来源于博客:不要点我为什么说能使用html/css解决的问题就不要使用JS呢?两个字,因为简单。简单就意味着更快的开发速度,更小的维护成本,同时往往具有更好的体验,下面介绍几个实例。1. 导航高亮导航高亮是一种很常见的问题,包括当前页面的导航在菜单里面高亮和hover时高亮。你可以用js控制,但是用一点CSS技巧就可以达到这个目的,不需要使用JS。在正常态时,每
原创
4660阅读
0评论
1点赞
发布博客于 5 年前

TCP/IP协议族概述

TCP/IP协议的体系结构TCP/IP协议族四层模型和OSI七层模型                       OSI七层模型
原创
1097阅读
0评论
1点赞
发布博客于 6 年前

vi编辑器的使用

vi编辑器简介1.vi编辑器    visual interface的简称,是Linux上基本的文本编辑工具,可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。2.vim编辑器    vi  IMproved的简写,属于增强版的vi,在vi的基础上增加了很多功能,如代码的关键字加亮等,vim兼容所有的vi指令。3.一般常用的修改配
原创
791阅读
0评论
0点赞
发布博客于 6 年前

Linux编程——多进程程序设计

本文学习Linux环境下的多进程编程,在我之前的文章里已经讲过进程与线程。本文,再简单讲一下进程的概念,方便接下来的学习。    进程定义:进程是一个具有一定独立功能的程序的一次运行活动。    进程状态图:
原创
916阅读
0评论
0点赞
发布博客于 6 年前

HDFS架构——NameNode

在学习NameNode之前,我们先回顾一下 HDFS 的整个系统构架。        在上一篇文章中我们讲过了 NameNode 是管理节点,里面存放元数据,那么我们先来看看元数据的存储细节。元数据存储细节    HDFS 为了保证数据的快速读写,并且要保证数据的安全,它就将元数据保存在内存一份,还保存在磁盘一份,来看看元数据在内存中是如何存储的。        我们举个例
原创
829阅读
0评论
0点赞
发布博客于 6 年前

HDFS——HDFS整体设计架构和原理

在我们学习HDFS之前,首先要了解分布式文件系统的概念,分布式文件系统有很多,HDFS只是其中的一种而已。那么分布式文件系统是什么呢,又有哪些优点?    随着现在数据量越来越多,在一个操作系统管辖的范围存不下了,那么就需要分配到更多的操作系统管理的磁盘中,但是这样又不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就产生了分布式文件管理系统。    分布式文件系统是一种允许
原创
1685阅读
0评论
0点赞
发布博客于 6 年前

Hadoop伪分布环境搭建——Hadoop安装与配置

我们需要从官网下载hadoop  点击打开链接  我自己下载的是最新的版本 hadoop 2.7.1。    下载完成后就开始安装了:    使用  sudo tar xzf hadoop-2.7.1.tar.gz 命令将文件解压缩。在 /usr/local 目录下创建一个 hadoop 文件夹,然后将文件拷贝到这里来。    sudo mv hadoop-2.7.1 /usr
原创
685阅读
0评论
0点赞
发布博客于 6 年前

STL源码剖析——stack的实现原理和使用方法详解

Stack 简介    stack 是堆栈容器,是一种“先进后出”的容器。    stack 是简单地装饰 deque 容器而成为另外一种容器。    使用 stack 时需要加上头文件 #include 。stack 实现原理    以某种既有容器作为底部结构,将其接口改变,使之符合“先进后出”的特性,形成一个 stack,是很容易做到的。deque 是双向开口的数据结构
原创
3250阅读
0评论
3点赞
发布博客于 6 年前

Hadoop伪分布环境搭建——Linux环境配置

hadoop最近可以说是相当火,也勾起了我的兴趣,所以打算学习一下。想要学习hadoop肯定要先学会在自己的电脑上搭建一个hadoop伪分布环境。伪分布模式安装步骤的第一步就是要配置Linux环境。我自己的Linux是Ubuntu系统,不过只要是Linux系统,都大同小异,配置步骤基本没啥区别。    首先,需要进行本地网络配置。我们需要在linux系统下新增一个网络连接,自己设定好ip(ip
原创
1319阅读
3评论
0点赞
发布博客于 6 年前

STL源码剖析——deque的实现原理和使用方法详解

Deque 简介    deque是“double—ended queue”的缩写,和vector一样都是STL的容器,deque 是双端数组,而 vector 是单端的。    deque 在接口上和 vector 非常相似,在许多操作的地方可以直接替换。    deque 可以随机存取元素(支持索引值直接存取,用[]操作符或at()方法,这个等下会详讲)。    deque 头
原创
16568阅读
3评论
30点赞
发布博客于 6 年前

C++函数模板及实现原理

C++为我们提供了函数模板机制。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。    为什么要有函数模板    下面,我们就通过一个例子来说
原创
13619阅读
4评论
14点赞
发布博客于 6 年前

C++ 学习路线推荐

相信有很大一部分学计算机的童鞋都是靠自学,即使本身是计算机专业的同学,也会觉得仅仅通过课堂上的学习是远远不够的,而且在上课时所用到的教材也不够好。然而自学的时候有个很大的问题就是找不到合适的方向和学习路线,我在刚开始的时候也吃过这样的亏,总是纠结于语言的学习,觉得编程就是学很多语言。然而单纯学习语言并不能解决问题,我们需要学习的是一个完整的体系,而编程语言只不过是其中一个解决问题的工具而已。后来我
原创
12193阅读
2评论
37点赞
发布博客于 6 年前

vfork 挂掉的一个问题

在知乎上,有个人问了这样的一个问题——为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不会?并给出了如下的代码,下面的代码一运行就挂掉了,但如果把子进程的return改成exit(0)就没事。    我受邀后本来不想回答这个问题的,因为这个问题明显就是RTFM的事,后来,发现这个问题放在那里好长时间,而挂在下面的几个答案又跑偏得比较严重,我觉得可能有些朋友看到那样的答
转载
392阅读
0评论
0点赞
发布博客于 6 年前

Linux编程——文件 IO操作

Linux文件 I\O 介绍    1. Linux系统调用    Linux系统调用(system call)是指操作系统提供给用户程序的一组“特殊接口”,用户程序可以通过这组“特殊”接口来获得操作系统提供的特殊服务。    为了更好的保护内核空间,将程序的运行空间分为内核空间和用户空间,他们运行在不同的级别上,在逻辑上是相互隔离的。在Linux中,用户程序不能直接访问内核提供的服务
原创
3822阅读
0评论
1点赞
发布博客于 6 年前

Vim编辑器——入门学习

vim模式介绍    以下介绍内容来自维基百科:从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆。几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数的编辑器使用了与Vim截然不同的方式:命令目录(鼠标或者键盘驱动),组合键(通常通过control键(CTRL)和alt键(ALT)组成)或者鼠标输入。Vim和vi一样,仅仅通过键盘来在这些模式之中切换。这就使得Vim可
原创
749阅读
0评论
0点赞
发布博客于 6 年前

Linux编程——Makefile 使用

在先前的文章中,我们已经学习了 gcc 和 gdb 的使用。本节,我们将介绍 Makefile 的使用。Makefile带来的好处就是——“自动化编译”,一但写好,只需要一个 make 命令,整个工程便可以完全编译,极大的提高了软件的开发效率(特别是对于那些项目较大、文件较多的工程)。    make是一个命令工具,最主要也是最基本的功能就是根据makefile文件中描述的源程序至今的相互关系
原创
685阅读
0评论
0点赞
发布博客于 6 年前

Linux编程——gdb调试

上一篇文章中,我们学习了gcc编译器的使用。本文,我们就讲解 gdb 调试器(Debug)的使用,它可以帮助我们找出程序之中的错误和漏洞等等。    当程序编译完成后,它可能无法正常运行;或许程序会彻底崩溃;或许只是不能正常地运行某些功能;或许它的输出会被挂起;或许不会提示要求正常的输入。无论在何种情况下,跟踪这些问题,特别是在大的工程中,将是开发中最困难的部分,我们将学习gdb(GNU de
原创
823阅读
0评论
0点赞
发布博客于 6 年前

Linux编程——GCC的使用

工欲善其事, 必先利其器。而gcc是Linux系统下最常见的编辑器,本文学习gcc 编译器的使用。    gcc 支持编译的一些源文件后缀名        gcc 编译程序的流程        Linux的可执行文件并没有像 Windows 那样有明显的.exe后缀名, 只需向其分配x(可执行)权限即可   sudo chmod +x excutefile   作为
原创
1237阅读
2评论
0点赞
发布博客于 6 年前

网络应用层——http协议

HTTP (HyperText Transfer Protocol 超文本传输协议) 基于 TCP,使用端口号 80 或 8080。    每当你在浏览器里输入一个网址或点击一个链接时,浏览器就通过 HTTP 协议将网页信息从服务器提取再显示出来,这是现在使用频率最大的应用层协议。    这个原理很简单:    点击一个链接后,浏览器向服务器发起 TCP 连接;    连接建立后浏
原创
1117阅读
0评论
1点赞
发布博客于 6 年前

IP网际协议

IP 协议位于网络层,它是 TCP/IP 协议族中最为核心的协议,所有的 TCP、UDP、ICMP 及 IGMP 数据都以 IP 数据报格式传输。IP 协议提供的是不可靠 、 无连接 的数据报传送服务。    不可靠(unreliable):IP 协议不能保证数据报能成功地到达目的地,它仅提供传输服务。当发生某种错误时,IP 协议会丢弃该数据报。传输的可靠性全由上层协议来提供。   
原创
953阅读
2评论
1点赞
发布博客于 6 年前

数据结构——全面学习哈希

相信学计算机的童鞋对于“哈希”这个词会很熟悉,但是能明明白白的说清楚,并且用程序来描述的人还是比较少的。这里,我们就全面学习这个重要的数据结构,以及它的思想和应用。    首先,我们来学习一下几个基本概念。    哈希(hash)    是一种数据编码方式。将大尺寸的数据(如一句话,一张图片,一段音乐、一个视频等)浓缩到一个数字中,从而方便地实现数据匹配和查找的功能。    哈希表
原创
1728阅读
0评论
3点赞
发布博客于 6 年前

SQL数据库的基本操作

一丶基本命令行操作    1、显示当前数据库服务器中的数据库列表:mysql> SHOW DATABASES;    2、建立数据库:mysql> CREATE DATABASE 数据库名;    3、建立数据表:mysql> USE 库名;mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));    4、删除数据库:mysql
原创
794阅读
0评论
0点赞
发布博客于 6 年前

操作系统——死锁

本文我们全面学习一下死锁问题。    死锁概念:由于竞争资源或者通信关系,两个或更多线程在执行中出现,永远相互等待只能由其他进程引发的事件
原创
725阅读
0评论
0点赞
发布博客于 6 年前

Linux进程fork,exec,vfork详解

在Unix/Linux系统下进程创建时需要进行如下系统调用:fork/exec    fork()把一个进程复制成二个进程:parent (old PID), child (new PID)    exec()用新程序来重写当前进程:PID没有改变    接下来就重点学习这两个系统调用:    当我们fork() 创建一个继承的子进程将会发生如下事情:复制父进程的所有变量和内存,复
原创
1658阅读
0评论
0点赞
发布博客于 6 年前

STL源码剖析——空间的配置与释放

C++的内存配置基本操作是  ::operator new(),内存释放的基本操作是 ::operator delete()。这两个全局函数相当于C的malloc()和free()函数。是的,正是如此,STL正是以malloc()和free()完成内存的配置与释放。    但是考虑到小型区块所可能造成的内存破碎问题,STL中设计了双层级配置器, 第一级配置器直接使用malloc()和free(
原创
755阅读
0评论
1点赞
发布博客于 6 年前

操作系统——进程与线程

进程的定义:进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程    进程的特点    动态性:可动态地创建、结束进程    并发性:多个进程可并发执行    独立性:进程可以被独立调度并占用处理机运行    制约性:不同进程的工作不相互影响,但是可能因访问共享数据/资源或进程间同步而产生制约    进程的地址空间如下图所示:        进程的
原创
1157阅读
0评论
0点赞
发布博客于 6 年前

教你彻底学会动态规划——进阶篇

在我的上一篇文章中已经详细讲解了动态规划的原理和如何使用动态规划解题。本篇文章,我将继续通过例子来让大家更加熟练地使用动态规划算法。    话不多说,来看如下例题,也是在动态规划里面遇到过的最频繁的一个题,本题依然来自于北大POJ:    最长公共子序列(POJ1458)    给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到, 而且每个
原创
30946阅读
25评论
151点赞
发布博客于 6 年前

教你彻底学会动态规划——入门篇

动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都是叙述概念,讲解原理,让人觉得晦涩难懂,即使一时间看懂了,发现当自己做题的时候又会觉得无所适从。我觉得,理解算法最重要的还是在于练习,只有通过自己练习,才可以更快地提升。话不多说,接下来,下面我就...
原创
262832阅读
245评论
1373点赞
发布博客于 6 年前

C++ 标准输入流总结

既然上一篇文章对标准输出流cout的格式化输出进行了总结,那么这篇文章就对c++的标准输入流用法进行全面总结。    以下是关于C++编程中cin的几个常见用法:    1. cin     用法1:最基本,也是最常用的用法,输入一个数字:     #include using namespace std;int main(){ int a, b; cin
原创
5265阅读
1评论
1点赞
发布博客于 6 年前

使用cout输出小数时位数的控制方法

昨天刷360校招内推的笔试练习题,发现最后几道编程题都需要控制输出的格式,微信群和QQ群里面也有好多大神居然不会用cout控制输出格式,在网上搜了一下也没看到好的答案,看来这些基础的东西大家反而不怎么在意,但是我觉得这些知识又特别重要。所以进行一下总结。    保留小数点的功能需要包含iomanip头文件,并在输出数字前加上"    下面,我通过几个例子来说明,让大家彻底学会使用这些小技巧
原创
4817阅读
1评论
8点赞
发布博客于 6 年前

操作系统——页面置换算法详解

页面置换算法的功能:当出现缺页异常,需调入新页面而内存已满时,置换算法选择被置换的物理页面。    页面置换算法的设计目标:尽可能减少页面的调入调出次数,把未来不再访问或短期内不访问的页面调出。    接下来,我们介绍几种常用的页面置换算法:    先进先出算法(First-In First-Out, FIFO)    思路:选择在内存驻留时间最长的页面进行置换    实现:维
原创
14663阅读
0评论
8点赞
发布博客于 6 年前

设计模式——实现单例模式

单例模式是最简单的设计模式,没有之一,相信大家也都听说过。单例设计模式适合于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统,它们都是原型的例子。典型的情况是,那些对象的类型被遍及一个软件系统的不同对象访问,因此需要一个全局的访问指针,这便是众所周知的单例模式的应用。    通过单例模式你可以:    一、确保一个类只有一个实例被建立     二、提供了一个对对象的全局访
原创
680阅读
1评论
0点赞
发布博客于 6 年前

智能指针的原理与设计

智能指针:实际指行为类似于指针的类对象 ,它的一种通用实现方法是采用引用计数的方法。下面我们来看看智能指针实现的原理和方法:    1.智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针;    2.每次创建类的新对象时,初始化指针并将引用计数置为1;    3.当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计
原创
725阅读
0评论
0点赞
发布博客于 6 年前

操作系统——中断、异常和系统调用比较

我们首先要明确,为什么操作系统需要中断、异常和系统调用:    在计算机运行时,内核是被信任的第三方    只有内核才可以执行特权指令    方便应用程序    接下来我们先简单了解一下三者的概念:    系统调用(system call)       应用程序主动向操作系统发出的服务请求    异常(exception)       非法指令或者其他原因导
原创
10775阅读
0评论
9点赞
发布博客于 6 年前

Linux基础知识全面总结

学习Linux系统的重要性应该不用多说,下面我就对Linux的基础知识进行一个全面而又简单的总结。不过建议大家还是装个Linux系统多练习,平时最好只在Linux环境下编程,这样会大有提高。    linux的特点     - 免费的/开源      - 支持多线程/多用户      - 安全性好      - 对内存和文件管理优越     关机命令     shu
原创
21690阅读
7评论
36点赞
发布博客于 6 年前

Linux高并发机制——epoll模型

epoll是一个特别重要的概念,常常用于处理服务端的并发问题。当服务端的在线人数越来越多,会导致系统资源吃紧,I/O效率越来越慢,这时候就应该考虑epoll了。epoll是Linux内核为处理大批句柄而作改进的poll,是Linux特有的I/O函数。其特点如下:    1.epoll是Linux下多路复用IO接口select/poll的增强版本。其实现和使用方式与select/poll有很多不
原创
1600阅读
0评论
4点赞
发布博客于 6 年前

关于IO的同步,异步,阻塞,非阻塞

关于网络IO的同步、异步、阻塞、非阻塞的文章网上有很多,搜索了对比了一下,观点也各不相同,即使是wiki也把异步和非阻塞区分得不是很清楚。下面我就结合《Unix网络编程 卷1》中的介绍,来说一说自己的理解。    IO模型    首先我们要先知道目前unix存在的五种IO模型,分别是:    阻塞型IO(blocking I/O)    非阻塞型IO(noblocking I/O)
原创
616阅读
0评论
1点赞
发布博客于 6 年前

解题报告——第一次只出现一次的字符

题目:在一个字符串(1。    思路:简单的哈希问题,char占一个字节,8位,最多表示256种字符。时间复杂度O(n),空间复杂度O(1),因为hash数组大小为常数256。只需要遍历一次字符串,然后遍历一次hash数组即可。    我的代码如下:    class Solution {public: int FirstNotRepeatingChar(string str
原创
646阅读
0评论
0点赞
发布博客于 6 年前

解题报告——把数组排成最小的数

题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323。    思路:首先,看到题目就要想到先把整数转换为字符串,因为结果肯定是一个大数。然后分析这道题目的本质,其实就是要对转换后的字符串进行排序,然后顺序输出即可,至于排序的方式需要自己定义。举个例子,题目中的字符串“3
原创
851阅读
0评论
0点赞
发布博客于 6 年前

STL源码剖析——vector的实现原理总结

    vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细都得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,vector的运用对
原创
1391阅读
0评论
1点赞
发布博客于 6 年前

TCP/IP 三次握手与四次挥手详解

所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。    三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。    建立连接协议(三次握手)    (1)客户端发送一个带SYN标志的
原创
797阅读
0评论
0点赞
发布博客于 6 年前

Linux进程内存空间分段

Linux的内存空间简单可以分为5个部分:    Text(代码区):存放可执行的指令操作,其只读不能写    Bss(静态区or全局区):存放未初始化的全局变量和静态变量    Data(数据区):存放初始化的全局变量和静态变量    Stack:存放临时变量,函数参数等    Heap:存放new/malloc等动态申请的变量,用户必须手动进行delete/free操作。 其中Stac
原创
2207阅读
0评论
0点赞
发布博客于 6 年前

malloc实现原理

malloc是怎样实现的呢?答案就是:可以基于伙伴系统实现(关于伙伴系统在之前的文章里面已经讲过),也可以使用基于链表的实现 。    它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表   调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分
原创
878阅读
0评论
0点赞
发布博客于 6 年前

C/C++ 中内存对齐问题

我们通过几个例子来全面搞懂c/c++中的内存对齐问题。来看看下面的结构体大小分别是多大?(假设均在32位机器上)    struct A {char a;char b;char c;};    这个相信大家都知道,由于变量都是char类型,对齐值为1,所以结构体大小为3。struct B {int a;char b;short c;};    对齐值
原创
653阅读
0评论
0点赞
发布博客于 6 年前

浅谈指针和引用

我们知道用指针和引用来定义函数形参的时候,都可以直接改变参的值。那么指针和引用有哪些区别呢?    我们先根据引用和指针的定义展开:引用是某个变量或者对象的别名,而指针则存储的是一个机器码地址,这个地址是某个具体变量或者对象的地址。因此区别有:    1)指针可以为空,但是引用不行    2)声明指针可以不指向任何对象,因此使用指针之前必须做判空操作,而引用则不必    3
原创
439阅读
0评论
0点赞
发布博客于 6 年前

define和inline关键字比较

这里我们学习一下define和inline关键字的用法,以及它们的区别。    define:定义预编译时处理的宏,只是简单的字符串替换,无类型检查。    inline:1、inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义,编译阶段完成。  2、内联函数要做类型安全检查,inline是指嵌入代码,在调用函数的地方不是跳转,而是把代码直接写到那里
原创
3643阅读
0评论
2点赞
发布博客于 6 年前

malloc和new有什么区别

大家都知道malloc和new都是我们程序员自己申请内存空间,那它们有什么区别呢?    1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。    2.对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于mall
原创
432阅读
0评论
0点赞
发布博客于 6 年前

C++ 强制类型转换

C++中主要包含了四种强制类型转换,让我们来看看它们的区别和联系。    static_cast:这是最常见的一种强制转换了,在功能上基本和C风格的类型转换一样,含义也一样。允许执行任意的隐式转换和相反转换动作(即使它是不允许隐式的)。例如:应用到类的指针上,意思是它允许子类类型的指针转换为父类类型的指针(这是一个有效的隐式转换),同时也能够执行想敏感词作:转换父类为它的子类。   
原创
394阅读
0评论
0点赞
发布博客于 6 年前

C++ 虚函数实现原理

首先,我们要明白虚函数的作用:简单讲就是实现多态。    基类定义了虚函数,子类可以重写该函数,当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态地调用属于子类的该函数,且这样的函数调用是无法在编译期间确认的,而是在运行期确认,也叫做迟绑定。    底层实现原理:先来看看C++对象模型        在此模型中,non static 数据成员被放置到对象内部,
原创
1051阅读
0评论
2点赞
发布博客于 6 年前

C++ 中的虚继承

首先我们要明白虚继承的作用:为了解决从不同途径继承来的同名数据成员在内存中有不同的拷贝造成数据不一致的问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样就不仅解决了二义性的问题,也节省了内存,避免了数据不一致的问题。举例如下:    class CA{int k;public:void f() {co
原创
391阅读
0评论
0点赞
发布博客于 6 年前

Linux内核——伙伴系统和slab缓存

本节,我将介绍linux系统物理内存分配时所用到的技术——伙伴系统和slab缓存。    伙伴系统    使用场景:内核中很多时候要求分配连续页,为快速检测内存中的连续区域,内核采用了一种技术:伙伴系统。    原理:系统中的空闲内存总是两两分组,每组中的两个内存块称作伙伴。伙伴的分配可以是彼此独立的。但如果两个小伙伴都是空闲的,内核将其合并为一个更大的内存块,作为下一层次上某个内存块
原创
1748阅读
0评论
1点赞
发布博客于 6 年前

动态链接库和静态链接库的区别

本文我们学习和了解一下动态链接库和静态链接库的区别。    静态链接库(lib文件),将函数代码编译到应用程序中,应用程序运行时全部载入到内存。优点是不需要挂在dll文件,缺点是生成的应用程序比较大。    动态链接库(lib和dll文件),lib编译到应用程序中,实际函数代码写在dll中。在应用程序运行时,lib只是用来提供dll中函数的入门地址,所以需要把dll加载到进程空间,再通过l
原创
495阅读
0评论
0点赞
发布博客于 6 年前

C++ const关键字的总结

本文我将总结const关键字的几个常见问题,让我们更加简单和全面的理解const关键字的作用和意义。    问题1:类的const成员变量怎么初始化?    解答:类中的const成员必须(只能)在构造函数的初始化列表中进行初始化。    问题2:类的const成员函数有什么作用?    解答:防止函数对成员变量值进行修改,毕竟我们有时候只是希望函数读取变量值,而不要改变它,那么你
原创
541阅读
0评论
0点赞
发布博客于 6 年前

MySQL开发技巧——与Join相关的SQL技巧

在上一篇文章中,我们具体介绍了如何正确使用Join语句。这里我们将会介绍与Join相关的SQL技巧。    举例:如何更新使用过滤条件中包括自身的表?    情景:把同时存在于取经四人组和悟空兄弟表中的记录的人在取经四人组表中的id字段更新为10。    技巧:使用Join来进行联合更新。    SQL语句:
原创
595阅读
0评论
0点赞
发布博客于 6 年前

MySQL开发技巧——如何正确使用Join语句

SQL语言相信学过数据库的人都会使用,但是能正确使用SQL的人却相对不多。正确使用SQL很重要吗?当然,下面我就列出了正确使用SQL语句的几个好处:增加数据库的处理效率,减少相应的响应时间。减少数据库的服务器负载,增加服务器稳定性。减少服务器间通讯的网络流量。这篇文章,我将先介绍如何正确的使用Join从句    举例中使用的表如下:西天取经四人组 VS 悟空的朋友们
原创
1266阅读
0评论
1点赞
发布博客于 6 年前

JAVA中继承时的初始化顺序

我们都知道继承是JAVA面向对象中的一个很重要的特性。那么你有没有思考过当我们使用继承这个特性的时候,程序是如何执行的呢?也就是说,继承的初始化顺序到底是怎么样的。接下来我就要用eclipse来试验一下了。   首先,我们可以创建一个Animal的类,然后写上构造方法。      然后,再创建一个Dog类(继承自Animal类),同时也写上自己的构造方法。   我们接着在主函数里面
原创
2173阅读
0评论
1点赞
发布博客于 6 年前

关于JAVA里面的内部类的一些理解

关于JAVA里面内部类的全面分析和理解
原创
710阅读
0评论
0点赞
发布博客于 6 年前