Git简介

Git 是一种分布式版本控制系统,它可以不受网络连接的限制,加上其它众多优点,目前已经成为程序开发人员做项目版本管理时的首选,非开发人员也可以用 Git 来做自己的文档版本管理工具。

大概是大二的时候开始接触和使用Git,从一开始的零接触到现在的重度依赖,真是感叹 Git 的强大。

Git 的api很多,但其实平时项目中90%的需求都只需要用到几个基本的功能即可,所以本文将从 实用主义深入探索 2个方面去谈谈如何在项目中使用 Git,一般来说,看完 实用主义 这一节就可以开始在项目中动手用。

说明:本文的操作都是基于 Mac 系统

阅读全文 »

你想以最快的速度学习人类史上最好的文本编辑器VIM吗?你先得懂得如何在VIM幸存下来,然后一点一点地学习各种戏法。

Vim the Six Billion Dollar editor

Better, Stronger, Faster.

学习 vim 并且其会成为你最后一个使用的文本编辑器。没有比这个更好的文本编辑器了,非常地难学,但是却不可思议地好用。

阅读全文 »

在C++中,参数传递的方式是“实虚结合”。

  • 按值传递(pass by value)

  • 地址传递(pass by pointer)

  • 引用传递(pass by reference)

阅读全文 »

选择排序

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。

算法步骤

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

重复第二步,直到所有元素均排序完毕

阅读全文 »

链表理论基础

什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。

链表的入口节点称为链表的头结点也就是head。

如图所示:

阅读全文 »

数组理论基础

数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力

也就是说,想法很简单,但实现起来 可能就不是那么回事了。

阅读全文 »

时间复杂度分析

究竟什么是时间复杂度

时间复杂度是一个函数,它定性描述该算法的运行时间

我们在软件开发中,时间复杂度就是用来方便开发者估算出程序运行的答题时间。

那么该如何估计程序运行时间呢,通常会估算算法的操作单元数量来代表程序消耗的时间,这里默认CPU的每个单元运行消耗的时间都是相同的。

阅读全文 »

  • const成员的初始化只能在构造函数初始化列表中进行
  • 引用成员的初始化也只能在构造函数初始化列表中进行
  • 对象成员(对象成员所对应的类没有默认构造函数)的初始化,也只能在构造函数初始化列表中进行
阅读全文 »

Lambda表达式是一种用于创建匿名函数的语法构造。它可以在需要函数对象的地方使用,而无需显式定义一个命名函数。

Lambda表达式有如下优点:

  • 声明式编程风格:就地匿名定义目标函数或函数对象,不需要额外写一个命名函数或者函数对象。以更直接的方式去写程序,好的可读性和可维护性。

  • 简洁:不需要额外再写一个函数或者函数对象,避免了代码膨胀和功能分散,让开发者更加集中精力在手边的问题,同时也获取了更高的生产率。

  • 在需要的时间和地点实现功能闭包,使程序更灵活。

阅读全文 »

左值、右值

C++ 11对C++ 98中的右值进行了扩充。在C++11中右值又分为纯右值(prvalue,Pure Rvalue)和将亡值(xvalue,eXpiring Value)

左值是指可以出现在赋值操作符(=)的左边的表达式,它们具有持久的内存地址。左值可以被取地址(&)操作符获取其内存地址,可以被修改,也可以作为参数传递给函数。

纯右值是指生成临时对象或字面量的表达式,它们通常是即将被使用的临时值。纯右值没有持久的内存地址,不能被取地址(&)操作符获取其内存地址。例如,int result = 2 + 3; 中的 2 + 3 就是一个纯右值。

阅读全文 »