初始化

单例模式——我只有一个对象

与世无争的帅哥 提交于 2020-02-03 22:02:18
面试官:带笔了吧,那写两种单例模式的实现方法吧 沙沙沙刷刷刷~~~ 写好了 面试官:你这个是怎么保证线程安全的,那你知道,volatile 关键字? 类加载器?锁机制???? 点赞+收藏 就学会系列,文章收录在 GitHub JavaEgg ,N线互联网开发必备技能兵器谱 单例模式——独一无二的对象 单例模式,从我看 《Java 10分钟入门》那天就听过的一个设计模式,还被面试过好几次的设计模式问题,今天一网打尽~~ 有一些对象我们确实只需要一个,比如,线程池、数据库连接、缓存、日志对象等,如果有多个的话,会造成程序的行为异常,资源使用过量或者不一致的问题。你也许会说,这种我用全局变量不也能实现吗,还整个单例模式,好像你很流弊的样子,如果将对象赋值给一个全局变量,那程序启动就会创建好对象,万一这个对象很耗资源,我们还可能在某些时候用不到,这就造成了资源的浪费,不合理,所以就有了单例模式。 单例模式的定义 单例模式确保一个类只有一个实例,并提供一个全局唯一访问点 单例模式的类图 单例模式的实现 饿汉式 static 变量在类装载的时候进行初始化 多个实例的 static 变量会共享同一块内存区域 用这两个知识点写出的单例类就是饿汉式了,初始化类的时候就创建,饥不择食,饿汉 public class Singleton { //构造私有化,防止直接new private

Effective C++ 读书笔记(一)

半腔热情 提交于 2020-02-03 21:06:34
1 让自己习惯C++ 条款01:视C++为一个语言联邦 C++是多重范型编程语言,同时支持过程形式,面向对象形式,函数形式,泛型形式,元编程形式(什么是元编程?)的语言。 C++主要包括4部分:C, Object-Oriented C++, Template C++和STL。 条款02:尽量以const, enum, inline替换#define 1, 对于单纯变量最好以const 对象或enums 替换#defines. #define ASPECT_RATIO 1.653 const double ASPECT_RATION = 1.653; 常量定义式通常放在头文件中,若要在头文件内定义一个常量的char * -- based 字符串: const char * const autherName = “Scott Meyers”; Or const std::string autherName(“Scott Meyers”); Class专属常量: class GamePlayer{ Private: static const int NumTurns = 5; int scores[NumTures]; … }; Const int Gameplayer::NumTurns; class GamePlayer{ Private: static const int

确定对象被使用前已经被初始化

荒凉一梦 提交于 2020-02-03 20:51:55
在C part of C++中,声明一个变量,不一定会被初始化,而一旦进入non-C part of C++,规则有些变化。这就很好的解释了为什么array(来自C part of C++)不被初始化而vector却有此保证(来自STL of C++)。 表面上这似乎是个无法决定的状态,而最佳处理方法是:永远在使用对象前将它初始化。对于无任何成员的内置类型,你必须手工完成此事 int x = 0 ; const char * text = "A C-style string" ; double d ; std :: cin >> d ; 至于内置类型以外的任何其他东西,则需要构造函数来初始化。规则就是:确保每一个构造函数都将对象的每一个成员初始化。 这个规则很简单,但不要混淆了赋值和初始化。 class Money { public : Money (); private : int thecash ; } Money :: Money ( const int cash ) { thecash = cash ; //这是赋值,不是初始化 } Money :: Money ( const int cash ): thecash ( cash ) //这才是初始化 {} 第二个构造函数相比第一个,最终结果相同,但通常效率更高。第一个版本先调用默认构造函数设置初始值,然后再立刻对他们赋值

使用FragmentTabHost+TabLayout+ViewPager实现双层嵌套Tab

て烟熏妆下的殇ゞ 提交于 2020-02-03 19:37:01
版权声明:本文为 HaiyuKing 原创文章,转载请注明出处! 前言 使用FragmentTabHost实现底部选项卡效果。 备注:该Demo主要是演示FragmentTabHost的一些设置和部分功能,实际中需要参考其他Demo。 效果图 代码分析 1、该Demo中采用的是FragmentTabHost的布局方案之一 【命名为非常规布局写法】;【 建议使用常规布局写法 ,见《 FragmentTabHostTopDemo【FragmentTabHost固定宽度且居中】 》】 2、未使用自定义的FragmentTabHost; 【建议使用自定义的FragmentTabHost,见《FragmentTabHostUnderLineDemo【 FragmentTabHost带下划线 】》】 原因是FragmentTabHost切换时执行的是attach/detach,而不是show/hide。而atach触发的执行顺序:attach()->onCreateView()->onActivityCreated()->onStart()->onResume() 使用hide()方法只是隐藏了fragment的view并没有将view从viewtree中删除,随后可用show()方法将view设置为显示。 3、ContactFragment演示的是:使用FragmentTabHost时

Centos7 初始化硬盘分区、挂载

江枫思渺然 提交于 2020-02-03 15:36:11
通过命令fdisk-l查看硬盘信息 可以看到有两块硬盘/dev/vda和/dev/vdb,启动vda是系统盘vdb是我们新增的数据盘。 2.执行以下命令,进入fdisk模式,开始对新增数据盘执行分区操作。 fdisk 新增数据盘 以新挂载的数据盘“/dev/xvdb”为例: fdisk /dev/xvdb 回显类似如下信息: 3.输入“n”,按“Enter”,开始新建分区。 回显类似如下信息: 表示磁盘有两种分区类型: • "p”表示主要分区。 • "e”表示延伸分区。 4.以创建一个主要分区为例,输入“p”,按“Enter”,开始创建一个主分区。 回显类似如下信息: “Partition number”表示主分区编号,可以选择1-4。 5.以分区编号选择“1”为例,输入主分区编号“1”,按“Enter”。 回显类似如下信息 “First sector”表示初始磁柱区域,可以选择2048-20971519,默认为2048。 6.以选择默认初始磁柱编号2048为例,按“Enter”。 回显类似如下信息: “Last sector”表示截止磁柱区域,可以选择2048-104857599,默认为104857599。 7.以选择默认截止磁柱编号2104857599为例,按“Enter”。 回显类似如下信息 表示分区完成,即为50GB的数据盘新建了1个分区。 8.输入“p”,按“Enter”

《c++primer》笔记 第3章 字符串、向量和数组

廉价感情. 提交于 2020-02-03 09:52:04
标准库类型 本章重要的两个: string 和 vector ,以及配套的迭代器。 3.1 命名空间的using声明 using声明具有如下的形式: using namespace::name; 一旦声明了上述语句,就可以直接访问命名空间中的名字: #include<iostream> //using声明,当我们使用名字cin时,从命名空间std中获取它 using std::cin; int main() { int i; cin >> i;//正确:cin和std::cin含义相同 cout << i;//错误:没有对应的using声明,必须使用完整的名字 std::cout << i;//正确:显式地从std中使用cout return 0; } 用下面的using可以使用std里面的所有名字: using namespace std; 头文件不应包含using声明 3.2 标准库类型string 初始化string对象的方式 string s1; //默认初始化,si是一个空串 string s2(s1); //s2是s1的副本 string s2=s1; //等价于s2(sl>,s2是s1的副本 string s3("value"); //S3是字面值"value"的副本,除了字面值最后的那个空字符外 string s3="value"; //等价于s3("value")

数据结构之DFS与BFS实现

六眼飞鱼酱① 提交于 2020-02-03 04:41:53
本文主要包括以下内容 邻接矩阵实现无向图的BFS与DFS 邻接表实现无向图的BFS与DFS 理论介绍 深度优先搜索介绍 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。 它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。 若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。 显然,深度优先搜索是一个递归的过程。 广度优先搜索介绍 广度优先搜索算法(Breadth First Search),又称为”宽度优先搜索”或”横向优先搜索”,简称BFS。 它的思想是:从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使得“先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问,直至图中所有已被访问的顶点的邻接点都被访问到。如果此时图中尚有顶点未被访问,则需要另选一个未曾被访问过的顶点作为新的起始点,重复上述过程,直至图中所有顶点都被访问到为止。 换句话说,广度优先搜索遍历图的过程是以v为起点,由近至远,依次访问和v有路径相通且路径长度为1,2…的顶点。 邻接矩阵实现无向图的BFS与DFS /** *

DevExpress学习之Gridcontrol

China☆狼群 提交于 2020-02-03 04:34:17
最近学习DevExpress的控件,写了几个方法拿来分享,希望大家能用的上: using System; using System.Collections; using System.Drawing; using System.Collections.Generic; using System.Text; using System.Data; using System.Windows.Forms; using DevExpress; using DevExpress.XtraGrid; using DevExpress.XtraGrid.Columns; using DevExpress.XtraGrid.Views; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraGrid.Views.Card; using DevExpress.XtraGrid.Views.BandedGrid; namespace MyDev { public class DevGridView { #region Members private DevExpress.XtraGrid.GridControl gridControl; #endregion #region Construct /// <summary> /// /// <

AngularJS快速入门指南04:指令

最后都变了- 提交于 2020-02-03 03:38:08
/*--> */ /*--> */   AngularJS通过 指令 将HTML属性进行了扩展。 AngularJS指令   AngularJS指令是带有 ng- 前缀的扩展HTML属性。    ng-app 指令用来初始化AngularJS application。    ng-init 指令用来初始化application数据。    ng-model 指令用来将HTML控件(如input,select,textarea等)的值绑定到application数据。 <div ng-app="" ng-init="firstName='John'"> <p>Name: <input type="text" ng-model="firstName"></p> <p>You wrote: {{ firstName }}</p> </div> 运行    ng-app 指令同时也告诉AngularJS,它所在的<div>元素是AngularJS application的根元素,即作用域。 数据绑定   在上面的示例中,{{ firstName }}是一个AngularJS数据绑定表达式。   在AngularJS数据绑定中,AngularJS表达式使用AngularJS数据进行同步更新。    {{ firstName }} 通过 ng-model="firstName" 同步更新数据。

C++基础知识补充之数组与字符串

别说谁变了你拦得住时间么 提交于 2020-02-03 03:28:09
数组与字符串 动态数组 std::vector 类 头文件 < vector > 初始化: vector<int> a(10); // 初始化了10个默认值为0的元素 基本操作: 1. push_back()在末尾插入元素 2. insert()在指定位置插入元素 3. 可以使用数组索引或者指针的方式访问元素 4. pop_back()删除最后一个元素 5. 使用capacity和size查询vector的容量和大小,在插入元素的时候如果需要扩大容量会进行内部缓冲区的重新分配,重新分配的逻辑是智能的,为了避免插入下一个元素时重新分配提前分配了比当前需求更大的容量 6. clear()删除容器的所有元素 7. empty()判断是否为空 另:deque类,头文件< deque>,与vector类似,不同的时可以使用push_front()和pop_front()操作在开头增加或者减少元素 字符串 可以使用C风格的字符串处理函数,但是经常因为终止空字符有坑 使用std::string 动态存储字符串 头文件 < string > 初始化 //常量字符串初始化 const char * constCStyleString = "Hello String!" ; std :: string strFromConst ( constCStyleString ) ; //或 std ::