Docker 入门

2018-09-30
阅读 3 分钟
1.3k
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

操作系统原理(一) —— 概述

2018-07-14
阅读 1 分钟
9.2k
操作系统的定义 操作系统是计算机系统中的一个系统软件,是一些程序模块的集合 它们能以尽量有效、合理的方式组织和管理计算机的软硬件资源 合理地组织计算机的工作流程,控制程序的执行并向用户提供各种服务功能 使得用户能够灵活、方便地使用计算机,使整个计算机系统高效率运行 操作系统的作用 ■ 有效地管理资源 怎样...

android学习之一:探究活动

2018-01-09
阅读 2 分钟
1.1k
Activity 就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个 Activity 构成,都会在 AndroidManifest.xml 中指定一个主的 Activity,如下设置

CountDownLatch、CyclicBarrier、Semaphore 用法总结

2017-11-30
阅读 12 分钟
8.9k
CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。

synchronized用法简单梳理

2017-11-28
阅读 7 分钟
7.8k
因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是说当一个共享数据被当前正在访问的线程加上互斥锁后,在同一个时刻,...

生产者消费者之Java简单实现

2017-11-27
阅读 3 分钟
6k
在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。

Java ---- 序列化

2017-11-14
阅读 10 分钟
2k
Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。

Java IO

2017-11-12
阅读 4 分钟
1.8k
分类一:按操作方式(类结构) 字节流和字符流: 字节流:以字节为单位,每次次读入或读出是8位数据。可以读任何类型数据。 字符流:以字符为单位,每次次读入或读出是16位数据。其只能读取字符类型数据。 输出流和输入流: 输出流:从内存读出到文件。只能进行写操作。 输入流:从文件读入到内存。只能进行读操作。 节...

git初始配置

2017-11-11
阅读 2 分钟
2.1k
想更改这些信息时,可以直接编辑这个设置文件。这里设置的姓名 和邮箱地址会用在 Git 的提交日志中。由于在 GitHub 上公开仓库时,这里的姓名和邮箱地址也会随着提交日志一同被公开,所以请不要使用不便公开的隐私信息。

Java泛型

2017-11-01
阅读 5 分钟
2.4k
引入泛型的主要目标有以下几点: 类型安全 泛型的主要目标是提高 Java 程序的类型安全 编译时期就可以检查出因 Java 类型不正确导致的 ClassCastException 异常 符合越早出错代价越小原则 消除强制类型转换 泛型的一个附带好处是,使用时直接得到目标类型,消除许多强制类型转换 所得即所需,这使得代码更加可读,并且减...

Agile Software Development

2017-10-31
阅读 2 分钟
1.9k
首先说点历史,随着软件行业的迅猛发展,软件系统的规模越来越大,复杂程度越来越高,开发周期与开发成本失控的问题愈发严重,同时软件的可靠性也无法保证。为解决这一系列问题,软件行业很自然的求助于传统的工程学、管理学方法。“软件工程学”由此因运而生。

memcpy、memmove、memset及strcpy

2017-09-19
阅读 2 分钟
4.7k
memcpy是C和C++ 中的内存拷贝函数,在C中所需的头文件是#include<string.h>, 在C++中需要包含的头文件是#include其函数原型如下:

策略者模式

2017-09-18
阅读 3 分钟
2.1k
在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径。

各种常见的排序算法稳定性分析

2017-09-18
阅读 2 分钟
4.3k
选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择中,如果当前元素比一个元素大,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定...

状态模式

2017-09-17
阅读 4 分钟
1.6k
在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。

观察者模式

2017-09-17
阅读 4 分钟
1.6k
建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。

备忘录模式

2017-09-16
阅读 4 分钟
1.5k
在应用软件的开发过程中,有时我们有必要记录一个对象的内部状态。为了允许用户取消不确定的操作或从错误中恢复过来,需要实现备份点和撤销机制,而要实现这些机制,我们必须事先将状态信息保存在某处,这样状态才能将对象恢复到它们原先的状态。

中介者模式

2017-09-14
阅读 4 分钟
1.6k
对象可重用性差:由于一个对象和其他对象具有很强的关联,若没有其他对象的支持,一个对象很难被另一个系统或模块重用,这些对象表现出来更像一个不可分割的整体,职责较为混乱。

解释器模式

2017-09-14
阅读 6 分钟
2k
如果在系统中某一特定类型的问题发生的频率很高,此时可以考虑将这些问题的实例表述为一个语言中的句子,因此可以构建一个解释器,该解释器通过解释这些句子来解决这些问题。

命令模式

2017-09-14
阅读 3 分钟
1.7k
在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。

职责链模式

2017-09-13
阅读 4 分钟
1.6k
通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。

数据库面试题型

2017-09-12
阅读 3 分钟
1.9k
atomacity 原子性 :事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。通常,与某个事务关联的操作具有共同的目标,并且是相互依赖的。如果系统只执行这些操作的一个子集,则可能会破坏事务的总体目标。原子性消除了系统处理操作子集的可能性。

代理模式

2017-09-12
阅读 3 分钟
1.4k
在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外服务。

享元模式

2017-09-11
阅读 6 分钟
1.6k
面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降等问题。

Linux常用命令介绍之小白向

2017-09-10
阅读 4 分钟
1.7k
历史记录 Bash会保存你输入命令的历史记录,可以通过上下按键或者history命令查看。 通过上下按键查看之前的命令。 通过history命令查看历史记录。 可以通过Ctrl+r来在历史记录中搜索命令。 命令行通配符 {代码...} 切换用户 在CLI中,通过su命令切换用户 su 切换到root用户但不使用新的运行环境 su - 切换到root用户并使...

外观模式

2017-09-07
阅读 4 分钟
1.7k
我们在使用visual studio进行编译C++代码时,你只是在菜单中选择了Build,然后visual studio就开始了一堆的编译工作;你应该知道,因为你的一个简单的Build动作,编译器在后台会进行语法分析,生成中间代码,生成汇编代码,链接成可执行程序或库等等动作;而这一切,作为只是开发程序的我们,而不用去理解编译器在做什么...

装饰模式

2017-09-06
阅读 5 分钟
2.2k
继承机制,使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法。但是这种方法是静态的,用户不能控制增加行为的方式和时机。

组合模式

2017-09-06
阅读 5 分钟
1.7k
对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象,如子文件夹和文件)并调用执行。

操作系统面试常见题型

2017-09-05
阅读 9 分钟
10.2k
进程(process)与线程(thread)最大的区别是进程拥有自己的地址空间,某进程内的线程对于其他进程不可见,即进程A不能通过传地址的方式直接读写进程B的存储区域。进程之间的通信需要通过进程间通信(Inter-process communication,IPC)。与之相对的,同一进程的各线程间之间可以直接通过传递地址或全局变量的方式传递信息。

桥接模式

2017-09-05
阅读 5 分钟
2.1k
设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案: