自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

常敲代码手不抖

喜欢什么,就学什么呗...

  • 博客(58)
  • 收藏
  • 关注

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

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

2015-08-11 13:26:41 376522 287

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

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

2018-01-19 12:32:23 5840

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

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

2016-09-25 19:34:19 5301

原创 TCP/IP协议族概述

TCP/IP协议的体系结构TCP/IP协议族四层模型和OSI七层模型                       OSI七层模型

2015-10-29 21:17:15 1438

原创 vi编辑器的使用

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

2015-10-29 19:45:38 963

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

本文学习Linux环境下的多进程编程,在我之前的文章里已经讲过进程与线程。本文,再简单讲一下进程的概念,方便接下来的学习。    进程定义:进程是一个具有一定独立功能的程序的一次运行活动。    进程状态图:

2015-09-01 15:18:13 1152

原创 HDFS架构——NameNode

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

2015-08-29 18:12:22 1138

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

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

2015-08-29 08:39:14 1958

原创 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

2015-08-28 18:47:14 823

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

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

2015-08-27 16:48:52 4096

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

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

2015-08-26 19:16:42 1599 3

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

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

2015-08-26 10:48:44 23035 3

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

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

2015-08-25 12:50:14 19211 4

原创 C++ 学习路线推荐

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

2015-08-24 16:01:33 14618 2

转载 vfork 挂掉的一个问题

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

2015-08-24 15:58:04 502

原创 Linux编程——文件 IO操作

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

2015-08-21 08:15:21 4348

原创 Vim编辑器——入门学习

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

2015-08-20 16:30:05 877

原创 Linux编程——Makefile 使用

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

2015-08-20 12:24:20 948

原创 Linux编程——gdb调试

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

2015-08-19 17:51:03 946

原创 Linux编程——GCC的使用

工欲善其事, 必先利其器。而gcc是Linux系统下最常见的编辑器,本文学习gcc 编译器的使用。    gcc 支持编译的一些源文件后缀名        gcc 编译程序的流程        Linux的可执行文件并没有像 Windows 那样有明显的.exe后缀名, 只需向其分配x(可执行)权限即可   sudo chmod +x excutefile   作为

2015-08-19 16:08:53 1447 2

原创 网络应用层——http协议

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

2015-08-18 17:28:29 1268

原创 IP网际协议

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

2015-08-18 15:28:46 1033 2

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

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

2015-08-18 11:42:09 1994

原创 SQL数据库的基本操作

一丶基本命令行操作    1、显示当前数据库服务器中的数据库列表:mysql> SHOW DATABASES;    2、建立数据库:mysql> CREATE DATABASE 数据库名;    3、建立数据表:mysql> USE 库名;mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));    4、删除数据库:mysql

2015-08-15 10:18:16 1524

原创 操作系统——死锁

本文我们全面学习一下死锁问题。    死锁概念:由于竞争资源或者通信关系,两个或更多线程在执行中出现,永远相互等待只能由其他进程引发的事件

2015-08-14 13:05:51 862

原创 Linux进程fork,exec,vfork详解

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

2015-08-13 16:03:25 1931

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

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

2015-08-13 12:54:59 875 1

原创 操作系统——进程与线程

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

2015-08-13 08:51:51 1231

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

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

2015-08-11 20:29:01 33587 26

原创 C++ 标准输入流总结

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

2015-08-11 11:22:21 5924 1

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

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

2015-08-11 10:58:24 6237 1

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

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

2015-08-11 09:51:56 25160

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

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

2015-08-10 20:51:08 759 1

原创 智能指针的原理与设计

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

2015-08-10 20:22:02 814

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

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

2015-08-09 14:09:51 14905

原创 Linux基础知识全面总结

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

2015-08-09 09:49:18 26007 8

原创 Linux高并发机制——epoll模型

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

2015-08-08 16:46:12 1808

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

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

2015-08-08 13:52:25 699

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

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

2015-08-08 10:07:51 761

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

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

2015-08-08 08:48:18 961

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除