自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(143)
  • 收藏
  • 关注

原创 Java中的反射

在面向对象的世界里,万事万物皆对象。 java语言中,类是对象,类是java.lang.Class类的实例对象。这个对象我们成为该类的类类型。 Class类的对象到底如何表示呢? 任何一个类都是Class的实例对象,这个实例对象有三种表示方式: (1)第一种表示方式:实际告诉我们任何一个类都有一个隐含的静态成员变量class Class c1 = F...

2019-08-27 10:32:42 253

原创 Java8 Lambda表达式

lambda表达式也称函数式编程自己在学习java的时候才接触到了lambda表达式 看到lambda表达式会让代码看起来非常精简 我看了一下网上的学习资料也不少 自己整理一下顺便写一下自己的看法 比较简单 希望我的博客可以带给别人帮助 以及方便自己以后进行回顾和总结 Lambda表达式的组成 java 8 中Lambda 表达式由三个部分组成:第一部分为一个括号内用逗号分隔的形...

2019-08-27 10:28:56 431

原创 Guava源码阅读——Collect包.AbstractMapBasedMultimap类

AbstractMapBasedMultimap是Multimap接口的基础实现类,实现了Multimap中的绝大部分方法,其中有许多的方法还是靠实现类的具体实现,比如size()方法,其计算方法在不同实现是不一样的。同时,AbstractMapBasedMultimap类也定义了自己的一些方法,比如createCollection()。AbstractMapBasedMultimap类中主要存在...

2019-04-08 15:25:11 449

原创 Guava源码阅读——base包.Joiner类

Joiner类的基本功能:将字符串数组按指定分隔符连接起来,或字符串串按指定索引开始使用指定分隔符连接起来,通过Join类,我们可以方便实现将容器中的数据按照自定义的方式拼接成一个字符串,而且这是一种线程安全的方式。变量://分隔符构造方法:这两个构造函数都是静态构造器,所以不能直接使用这两个构造器去创建Joiner,所以想要创建Joiner只能使用静态方法。可接收字符串和...

2019-04-07 17:27:07 306

原创 Guava源码阅读——base包.Splitter类 转至元数据结尾

Strategy模式:策略模式这个定义了一系列的算法,并将每个算法封装起来,使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的客户,在Splitter中就主要使用了这种模式。1、首先看一个内部类这个类才是真正去处理字符、字符串、正则表达式的接口,这个接口的定义其实就是策略模式。此接口中只有一个方法,返回的是一个Iterator迭代器,这里我们可以先联想到最终返回...

2019-04-07 17:25:22 320

原创 Guava源码阅读——base包.Stopwatch类

Stopwatch是什么 Stopwatch 解释为计时器,又称秒表、停表,很明显它是记录时间的。 成员变量 构造函数 isRunning方法:如果start方法被调用但是stop方法还没有调用,就返回真。start方法:启动stopwatch。stop方法:停止stopwatch,...

2019-04-07 17:18:59 483

原创 Guava源码阅读——base包.Strings类

方法 功能 传参类型 返回类型 实现方法 复杂度 nullToEmpty 将null转换为"" String String O(1) emptyToNull 与上个方法相反 String String ...

2019-04-07 17:17:59 399

原创 Guava源码阅读——Collect包.ComparisonChain类

ComparisonChain 使用有一个产品的list,想对这个list先按产品生效时间排序,如果生效时间一样再按失效时间排序,代码如下:package collection; import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util...

2019-04-07 17:17:05 460

原创 Guava源码阅读——Collect包.Lists类

功能函数 创建ArrayList方法 newArrayList() newArrayList(E... elements) newArrayList(Iterable<? extends E> elements) newArrayList(Iterator<? extends E> elements) newA...

2019-04-07 17:12:43 863

原创 Guava源码阅读——Collect包.Multimap类

Multimap相对于传统的Map区别在于,Multimap是一对多的一个数据结构,对于Multimap的解析用HashMultimap进行解析,看一下HashMultimap的类结构图:HashMultimap构造器因为他的构造方法是私有的,所有他会拥有静态方法构造器:public static <K, V> HashMultimap<K, V> ...

2019-04-07 16:53:28 334

原创 Guava源码阅读——Collect包.Ordering类

API 实例化直接获得 natural() 自然序 usingToString() 字典序 指定 from(Comparator) 包装Comparator explicit(List)explicit(least, ... others) 指明这几个东西的顺序,只排它们 直接继承 其他 allEqual() 全相...

2019-04-07 16:49:11 225

原创 Guava源码阅读——Collect包.Sets类

union类实现传入:set1, set2传出:内部实现的 setView 其继承了 AbstractSetpublic static <E> SetView<E> union(final Set<? extends E> set1, final Set<? extends E> set2) { checkNotNull(set...

2019-04-07 16:46:52 332

原创 Guava源码阅读——primitives包.Ints类

看完Primitives包中的Ints类之后,我对其中的方法做出了整理...有写的不好的地方请多多指教 方法 功能 传参类型 返回类型 实现方法 复杂度 hashcode 返回int型的hash值(直接用溢出当作hash) int int...

2019-04-07 16:43:36 237

原创 Git初阶:入门&常用命令

一、版本控制系统集中式版本控制系统SVN:存储每个文件的变化分布式版本控制系统Git:存储完整的文件快照二、SVN和Git的区别1、Git所有的操作都可以在本地完成;SVN需要与服务器通讯以获得其他版本的文件。2、Git用hash生成版本号,可以保证文件的完整性;SVN使用递增的编号作为版本号。三、Git的3种状态1、已修改(modified)----------工作区2、...

2019-03-22 17:52:46 169

原创 两个队列实现一个栈

代码实现:#include &lt;iostream&gt;#include &lt;queue&gt;using namespace std;class MyStack{public: void push(int val) { //插入到非空队列 if (q1.empty()) { q2.push(val); } if (q2.empty()) ...

2018-09-06 15:54:48 164

原创 实现统计字符串中第一个空字符前面的字符长度——递归

举例:char buf[] = { 'a', 'b', 'c', 'd', 'e', 'f', '\0', 'x', 'y', 'z' };字符串buf,当输入n=10或者20时,期待输出结果为6;当输入n=3或者5时,期待输出结果为3或者5。 代码实现:#include &lt;iostream&gt;using namespace std;//统计字符串中第一...

2018-08-20 12:04:14 476

原创 快速排序

代码实现:#include &lt;iostream&gt;using namespace std;//快速排序void QuickSort(int *arr, int len, int left, int right){ int i, j, t, tmp; if (left &gt; right) { return; } tmp = arr[left]; i = ...

2018-08-19 19:35:44 217

原创 STL不同容器的优缺点

一、容器的分类1、序列容器(1)vector典型的序列容器,任意元素的读取、修改具有O(1),在序列尾部进行插入、删除是O(1),但在序列的头部插入、删除的时间复杂度是O(n),可以在任何位置插入新元素,有随机访问功能,插入删除操作需要考虑。(2)deque序列容器,内存也是连续的,和vector相似,区别在于在序列的头部插入和删除操作也是O(1), 可以 在任何位置插入新元素,有随机...

2018-07-29 18:41:10 1173

原创 指针和引用的区别

 问题:指针与引用的区别?1.非空区别       在任何情况下都不能使用指向空值的引用,一个引用必须总是指向某些对象(引用必须初始化)。因此如果你使用一个变量并让它指向一个对象,但是该变量在有些时候也可能不指向任何对象,这时你就应该把变量声明为指针,因为这样你就可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你设计不允许变量为空,只是你就可以把变量声明为引用。不存在指向空值的引用...

2018-07-20 10:36:21 203

原创 new/delete和malloc/free的区别

1、属性new/delete 是关键字malloc/free是库函数2、参数(是否需要指定内存大小)new动态申请内存时,不需要指定内存块的大小int *p = new int;mallo动态申请内存时,需要显示指定内存的大小int *p = (int*)malloc(sizeof(int));3、返回值(返回类型安全性)new内存分配成功时,返回的是对象类型的指针,是符合类型安全的操作符mall...

2018-07-15 16:59:49 320

原创 typedef和#define的区别

先说一下两者的概念1、#define预处理阶段进行简单的字符串替换,没有安全性检查2、typedef在自己的作用域内给一个已经存在的类型一个别名,编译阶段。两者的区别(1)执行时间不同#define在预处理(预编译)阶段,进行替换工作typedef在编译阶段,会进行类型检查(2)作用域不同#define:无论在哪定义过,在其他地方都可以使用typedef:只能在定义的作用域内使用(3)对指针的操作...

2018-06-21 17:34:31 316

原创 gcc和g++的区别

首先,gcc和g++都是GNU(组织)的一个编译器。1、后缀为.c的文件,gcc会把它当做C程序,g++会当做C++程序;     后缀为.cpp的文件,gcc和g++都会当做C++程序。2、编译阶段:g++会调用gcc程序3、链接阶段:由于gcc命令自动和C++程序使用的库链接,所以通常用g++完成链接...

2018-06-19 16:25:36 211

原创 MySQL——事务

一、什么是事务?事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有SQL语句均执行成功,则事物被顺利执行。二、为什么要讲InnoDB的事务呢?严格上来说,事务必须同时满足4个特性,即通...

2018-06-11 19:55:21 248

原创 MySQL——索引详解

MySQL索引的概念索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。在没有索引的情况下,数据库会遍历全部200条数据后选择符合条件的;而有了相应的索引之后,数据库会直接在索引中查找符合条件的选项。如果我们把SQL语句换成“SELECT * FROM article...

2018-06-11 10:02:43 185

原创 MySQL中MyISAM和InnoDB的区别

1、 存储结构MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩   展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小一般为2GB。2、...

2018-06-11 09:18:43 279

原创 TCP状态转移详解

在看TCP状态转移图之前,我们先来看一下三次握手和四次挥手画了一个比较简陋的图1、建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。 (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。 (3) 客...

2018-06-05 18:00:25 600

原创 MySQL——四种常用的存储引擎

MySQL——四种常用的存储引擎数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySql的核心就是存储引擎。一、MyISAM不支持事务、也不支持外键,支持全文索引,但是对于一些在线分...

2018-06-05 16:34:13 665 1

原创 关于MySQL数据库的学习(一)

一、什么是数据库?答:数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。      简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。    其实就是文件的集合。二、SQL语言的分类1、数据定义语言(DDL):  其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT ...

2018-05-22 19:20:13 432

原创 SQL语言的组成分为哪几个部分

 详细来讲,可以分为六个部分一:数据查询语言(DQL:Data Query Language):  其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。 二:数据操作语言(DM...

2018-05-22 18:55:40 10674

原创 C++ STL函数绑定器

代码示例:#include &lt;iostream&gt;#include &lt;map&gt;#include &lt;vector&gt;#include &lt;algorithm&gt;#include &lt;functional&gt;#include &lt;string&gt;using namespace std;/*1.函数接配器bind1st bi...

2018-05-10 17:40:47 645

原创 C++STL 空间配置器allocator

先来介绍一下STL的六大组件1. 空间配置器:内存池实现小块内存分配,对应到设计模式--单例模式(工具类,提供服务,一个程序只需要一个空间配置器即可),享元模式(小块内存统一由内存池进行管理)2.迭代器:迭代器模式,模板方法3.容器:STL的核心之一,其他组件围绕容器进行工作:迭代器提供访问方式,空间配置器提供容器内存分配,算法对容器中数据进行处理,仿函数伪算法提供具体的策略,类型萃取  实现对自...

2018-05-10 17:18:02 377

原创 C++ 设计模式之观察者模式

C++ 设计模式之观察者模式Observer 模式应该可以说是应用最多、影响最广的模式之一,因为 Observer 的一个实例 Model/View/Control(MVC) 结构在系统开发架构设计中有着很重要的地位和意义, MVC实现了业务逻辑和表示层的解耦。 个人也认为 Observer 模式是软件开发过程中必须要掌握和使用的模式之一。在 MFC 中, Doc/View(文档视图结构)提供了实...

2018-05-10 16:43:20 237

原创 C++智能指针之shared_ptr

shared_ptr 是为了解决 auto_ptr 在对象所有权上的局限性(auto_ptr 是独占的), 在使用引用计数的机制上提供了可以共享所有权的智能指针, 当然这需要额外的开销:  (1) shared_ptr 对象除了包括一个所拥有对象的指针外, 还必须包括一个引用计数代理对象的指针。  (2) 时间上的开销主要在初始化和拷贝操作上, *和-&gt;操作符重载的开销跟auto_ptr是一...

2018-04-24 18:32:19 240

原创 C++ 设计模式之抽象工厂模式

1、问题假设我们要开发一款游戏, 当然为了吸引更多的人玩, 游戏难度不能太大(让大家都没有信心了, 估计游戏也就没有前途了),但是也不能太简单(没有挑战性也不符合玩家的心理)。于是我们就可以采用这样一种处理策略: 为游戏设立等级,初级、中级、高级甚至有BT 级。假设也是过关的游戏, 每个关卡都有一些怪物(monster) 守着, 玩家要把这些怪物干掉才可以过关。 作为开发者, 我们就不得不创建怪物...

2018-04-14 18:56:03 183

原创 C++ 设计模式之工厂模式

上一篇博客写的简单工厂模式简单工厂模式的缺点是当新增产品的时候就要去修改工厂的类,这就违反了开放封闭原则,(类、模块、函数)可以扩展,但是不可以修改,于是,就出现了工厂方法模式。所谓工厂方法模式,是指定义一个用于创建对象的接口,让子类决定实例化哪一个类。打个比方现在有A、B两种产品,那么久开两个工厂。工厂A负责生产A产品,工厂B负责生产B种产品。代码实现:#include &lt;iostream...

2018-04-14 18:44:34 141

原创 C++ 设计模式之简单工厂模式

1、简单工厂模式的设计思想首先将需要创建的各种不同对象的相关代码封装到不同的类中,这些类称为产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以根据所传入的参数不同创建不同的具体产品对象;客户端只需调用工厂类的工厂方法并传入相应的参数即可得到一个产品对象。2、简单...

2018-04-14 18:11:37 293

原创 C++ 多继承、菱形继承、虚继承

先给大家看一下菱形继承的结构:D是多继承 有两个或两个以上的基类class A{public: A(int a = 0) :ma(a) { cout &lt;&lt; "A" &lt;&lt; endl; }public: int ma;};class B : public A{public: B(int b) :mb(b),A(b) { cout &lt;&...

2018-04-10 22:30:12 200

原创 C++ 继承与多态

1、继承的本质:代码的复用2、继承方式:public、protected、private        默认为private3、类与类的关系(1)组合:a part of/has a(2)继承:a kind of/is a(3)代理:容器适配器4、派生类继承了基类的什么?答:派生类继承了除基类的构造函数、析构函数之外的所有成员和成员函数,还继承了基类的作用域。5、派生类对象的构造方式答:先构造从基...

2018-03-29 17:43:10 459

原创 C++ 四种类型强制转换

C++的四种类型强转 分别是const_cast、static_cast、dynamic_cast、reinterpret_cast一、const_cast  const_cast操作不能在不同的种类间转换。相反,它仅仅把一个它作用的表达式转换成常量。它可以使一个本来不是const类型的数据转换成const类型的,或者把const属性去掉。1、用法const_cast&l...

2018-03-20 12:47:05 395

原创 写时拷贝实现String类

写时拷贝技术是通过"引用计数"实现的,在分配空间的时候多分配4个字节,用来记录有多少个指针指向块空间,当有新的指针指向这块空间时,引用计数加一,当要释放这块空间时,引用计数减一(假装释放),直到引用计数减为0时才真的释放掉这块空间。当有的指针要改变这块空间的值时,再为这个指针分配自己的空间(注意这时引用计数的变化,旧的空间的引用计数减一,新分配的空间引用计数加一)。写时拷贝实现String类代码实...

2018-03-14 17:30:57 224

空空如也

空空如也

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

TA关注的人

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