![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础
文章平均质量分 55
筱葭
这个作者很懒,什么都没留下…
展开
-
浅谈希尔排序
希尔排序:先选定一个下标增量d,将整个序列按增量d从第一个元素开始划分为若干组,对每组使用直接插入排序的方法;然后减小增量d,不断重复上述过程,如此下去,直到d=1,此时整个序列是一组。public static void shellSort(int[] numbers) { int d = numbers.length; while(true){ if (d % 2 == 0原创 2017-03-07 15:01:34 · 232 阅读 · 0 评论 -
浅谈堆排序
堆排序:堆排序是一种树形选择排序,是对直接选择排序的有效改进。堆的定义如下:具有n个元素的序列(h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi从算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆的最后一个元素交换位置。所以堆排序有两个函数组成。一是建堆的渗透函数,二是反复调用渗透函数实现排序的函数。public stat原创 2017-03-07 15:33:52 · 246 阅读 · 0 评论 -
浅谈数据库主键和外键及索引
1、主键:若某一个属性组(注意是组)能唯一标识一条记录,该属性组就是一个主键。主键不能重复,且只能有一个,也不允许为空。定义主键主要是为了维护关系数据库的完整性。2、外键:外键用于与另一张表的关联,是能确定另一张表记录的字段。外键是另一个表的主键,可以重复,可以有多个,也可以是空值。定义外键主要是为了保持数据的一致性。3、索引:索引是对表中一个或多个列的值进行排原创 2017-04-08 22:36:19 · 16313 阅读 · 0 评论 -
浅谈进程与线程的区别和联系
1、进程和线程的概念1) 进程在系统中能独立运行,是系统资源分配和调度的基本单位。2) 线程是进程的实体,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位,是操作系统可识别的最小执行和调度单位。 2、进程和线程的联系1) 一个程序至少有一个进程,一个进程至少有多个线程;一个进程可以有多个线程,但一个线程只能属于一个进程。2) 线程可与同属一个进程的其他线程共原创 2017-03-06 22:15:00 · 343 阅读 · 0 评论 -
浅谈进程和线程间的通信方式
进程间的通信方式有以下几种:1、无名管道( pipe )半双工,数据只能单向流动,且只能在父子进程间通信。 2、高级管道(popen)全双工,可以双向传输。 3、有名管道 (named pipe) 半双工,但允许父子进程间的通信。4、信号量( semophore ) 一个计数器,可用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访原创 2017-03-09 21:04:01 · 1660 阅读 · 0 评论 -
浅谈哈希法及其解决冲突的方法
哈希法又称散列法,相应的表称为哈希表。 基本思想:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系f,使得p=f(k),f称为哈希函数。创建哈希表时,把关键字为k的元素直接存入地址为f(k)的单元;以后当查找关键字为k的元素时,再利用哈希函数计算出该元素的存储位置p=f(k),从而达到按关键字直接存取元素的目的。 冲突:当关键字集合很大时,关键字值不同的元素可能会映象到哈原创 2017-03-12 20:56:05 · 778 阅读 · 0 评论 -
浅谈数据库事务
事务是并发控制的基本单位。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。事务是作为单个逻辑工作单元执行的一系列操作,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 1、事务的四大特性一个逻辑工作单元要成为事务,必须满足ACID特性(原子性、一致性、隔离性和持久性)。① Atomic(原子性)事务中包含的操作被看做一个逻辑单元,这原创 2017-04-09 10:29:38 · 454 阅读 · 0 评论 -
浅谈Java内存区域划分
Java虚拟机在执行Java的过程中会把管理的内存划分为若干个不同的数据区域:① 程序计数器:通过改变程序计数器的值来指定下一条需要执行的指令,分支,循环等基础功能就是依赖程序计数器来完成的。每条线程都需要一个独立的程序计数器,以确保线程之间互不影响。所以程序计数器是线程私有的内存。② 虚拟机栈:和程序计数器一样也是线程私有的,生命周期与线程相同。存储局部变量表、方法出口等信息。 通常说虚原创 2017-04-09 15:13:19 · 481 阅读 · 0 评论 -
浅谈GC的基本原理
Java语言提供的GC功能可以自动的检测对象是否超过作用域,从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法,资源回收工作全部交由GC来完成,程序员不能精确的控制垃圾回收的时机。Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。 分配对象使用new关键字;释放对象时,只要将对象所有引用赋值为null,让程序不能够再访问到这个对象, 称该对象为不可达的原创 2017-04-12 21:47:26 · 983 阅读 · 0 评论 -
浅谈HashMap的原理及其与HashTable、HashSet的区别
1、HashMap的工作原理HashMap基于hashing原理,在bucket中储存键对象和值对象,通过put()和get()方法储存和获取对象。通过put()方法储存对象:当键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,然后找到bucket位置来储存值对象。通过get()方法获取对象:当键对象传递给get()方法时,通过键对象的equa原创 2017-03-13 16:48:07 · 424 阅读 · 0 评论 -
浅谈sublime常用快捷键
1、数据流是什么?为什么要用数据流?1)数据流是行为与响应的抽象。用户在页面上输入表单、按下按钮、拖拽等行为,页面会根据用户的行为给出一些响应,如刷新、跳转、局部刷新、Ajax局部刷新、数据更新等。以对象、方法来把它们抽象出来,这就是数据流。2)使用数据流可以帮助我们明确行为以及行为对应的响应。这与React的目标——状态图预测是密不可分的。 2、React与数据流的关系原创 2017-05-17 22:15:04 · 608 阅读 · 0 评论 -
浅谈不使用第三个变量交换两个变量的值的方法
1、方法一:int a = 1;int b = 2;a = b - a; // a = 1; b = 2b = b - a; // a = 1; b = 1a = b + a; // a = 2; b = 11) 原理:把a、b看做数轴上的点,围绕两点间的距离来进行计算。2) 具体过程:① a=b-a求出a、b两点的距离,并将其保存在a中;② b=b-a求出a到原点原创 2017-04-22 20:07:40 · 1805 阅读 · 0 评论 -
浅谈Git常用命令
1、基本命令1) 克隆代码库git clone git clone 2) 更新代码库到最新版本git pull3) 查看工作区状态git status4) 提交代码到本地仓库git add #提交文件到暂存区git commit -m "注释说明"5) 推送到远程仓库git push #开始推送git push origin master #原创 2017-05-17 16:39:43 · 483 阅读 · 0 评论 -
浅谈Git(一)
1、集中式和分布式版本控制系统1) 集中式版本控制系统集中式版本控制系统的版本库是集中存放在中央服务器的,先从中央服务器取得最新版本,完成自己的工作后,再把自己的结果推送给中央服务器。集中式版本控制系统最大的缺点是必须联网才能工作,在局域网内带宽够大,速度够快,若在互联网上,网速慢时,可能提交一个大文件需要较长时间。此外,若中央服务器出了问题,所有人都没法工作。CVS及SVN都是集原创 2017-05-17 10:09:08 · 726 阅读 · 0 评论 -
浅谈Git(二)
1、创建版本库版本库,又名仓库,英文名repository,可以简单地理解成一个目录,该目录里的所有文件都可以被Git管理,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或在将来某个时刻可以还原。创建版本库的方法:① 创建一个空目录: mkdir myGit② 进入该目录:cd myGit③ 初始化一个Git仓库,把该目录变成Git可以管理的仓库:原创 2017-05-17 10:43:16 · 510 阅读 · 0 评论 -
浅谈Git(三)
1、版本回退每当文件修改到一定程度时,可以保存一个快照,在Git中被称为commit。一旦把文件改乱了,或误删了文件,可以从最近的一个commit恢复,然后继续工作,避免工作成果全部丢失。查看提交历史,以便确定要回退到哪个版本:git log加上--pretty=oneline参数可以简化输出格式,输出到一行:git log --pretty=onelinegit log输原创 2017-05-17 11:32:06 · 404 阅读 · 0 评论 -
浅谈Git(四)
1、分支管理:1) 创建、切换、合并、删除分支① 查看所有分支,当前分支前会标一个*号:git branch② 创建分支:git branch ③ 切换分支:git checkout ④ 创建+切换分支:git checkout -b ⑤ 合并某分支到当前分支:git merge ⑥ 删除分支:git branch -d eg:① 创建dev分支,然后切换到de原创 2017-05-17 16:15:04 · 426 阅读 · 0 评论 -
vim和Linux命令行常用快捷键
1、Linux命令行快捷键1) Ctrl+l清屏2) Ctrl+a回到命令行头部3) Ctrl+e回到命令行尾部2、vim常用快捷键1) dd:删除光标所在行2) ndd:从当前行开始删除n行3) dw:从当前光标开始删除一个单词4) ndw:从当前光标开始删除n个单词5) x:删除当前字符6) X:删除前一个字符7) d$:删除到行末8)原创 2017-05-17 09:30:05 · 977 阅读 · 0 评论 -
浅谈DNS域名解析
DNS域名解析基于UDP协议,原因在于:UDP比起TCP效率更高 但不能保证数据的完整性解析。DNS基于UDP主要是考虑到降低服务器的负载,降低网络流量,也考虑到DNS服务器的网络通常很稳定,万一失败,重试的损失也不大。 DNS域名解析的过程如下:1、搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的DNS缓存中是否有www.myApp原创 2017-03-09 21:09:33 · 1368 阅读 · 0 评论 -
浅谈TCP和UDP的区别
TCP:传输控制协议UDP:用户数据报协议 TCP的UDP的区别:1、TCP面向连接,即发送数据之前需要建立连接;UDP是无连接的,即发送数据之前不需要建立连接。2、TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,不保证可靠交付。3、TCP面向字节流;UDP是面向报文的。4、TCP有拥塞控制;UDP没有拥塞控制,原创 2017-03-15 11:18:13 · 351 阅读 · 0 评论 -
浅谈TCP和UDP对应的协议
1、Ajax浏览器缓存Ajax请求成功后,会把请求的URL和返回的响应结果保存在浏览器缓存内,下一次调用Ajax发送相同的请求(两次请求的URL完全相同,包括参数)时,为了提高页面的响应速度和用户体验,同时节省网络通信资源,会直接从缓存中把数据取出来,此时浏览器不会与服务器交互。 2、Ajax浏览器缓存的优点对一些静态内容的请求,如图片,CSS文件,JS脚本等,更加快捷,提高了页面原创 2017-03-20 23:10:01 · 930 阅读 · 0 评论 -
浅谈二路归并排序
二路归并排序:把待排序序列分为两个子序列,对每个子序列分别进行二路归并排序,再把有序的两个子序列合并为整体有序序列。public static void mergeSort(int[] nums, int low, int high) { int mid = (low + high) / 2; if (low < high) { mergeSort(nums, low原创 2017-03-07 11:27:12 · 461 阅读 · 0 评论 -
浅谈TCP三次握手和四次挥手
一、TCP三次握手1、Client首先发送一个连接试探,ACK=0表示确认号无效,SYN = 1表示这是一个连接请求报文,同时表示这个数据报不能携带数据,seq = x表示Client自己的初始序号,表示客户端等待服务器的回复。2、Server监听到连接请求报文后,如同意建立连接,则向Client发送确认。SYN和 ACK都置1,ack = x + 1表示期望收到对方下原创 2017-03-06 21:15:14 · 205 阅读 · 0 评论 -
浅谈对称加密与非对称加密
1、对称加密(Symmetric Cryptography)对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密原创 2017-03-06 22:32:03 · 595 阅读 · 0 评论 -
浅谈物理地址、虚拟地址和逻辑地址
从最根本的角度来看,地址只分为两类:物理地址、虚拟地址。 1、物理地址CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上(如显存、BIOS等)。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。物理地址空间,一部分给物理RAM(内存)用,一部分给总线用,这是由硬原创 2017-03-06 22:25:50 · 1745 阅读 · 0 评论 -
浅谈插入排序
插入排序:1、从第一个元素开始,该元素可以认为已经被排序;2、取出下一个元素(待排序元素),注意先把待排序元素保存在temp中,在已经排序的元素序列中从后向前扫描,如果该元素大于待排序元素,将该元素移到下一位置,直到找到待排序元素要插入的位置;3、将新元素插入到该位置中,重复步骤2,直到所有元素都已排序完毕。public static void insertSort(int[] n原创 2017-03-07 11:12:17 · 236 阅读 · 0 评论 -
浅谈快速排序
快速排序:指定基准记录numbers[low](通常为第一个元素),通过一趟排序将其放在正确的位置上,把待排序元素分割为独立的两部分,左边部分元素值<= numbers[low] <=右边部分元素值。对左右两部分元素重复上述过程,依次类推,直到子序列中只剩下一个记录或不含记录为止。public static void quickSort(int[] numbers,int lo原创 2017-03-07 10:46:47 · 252 阅读 · 0 评论 -
浅谈冒泡排序
冒泡排序:1、从第一对到最后一对,比较相邻的元素,如果前一个比后一个大,就交换它们两个,一轮过后,最后的元素是最大的数; 2、从第二对到最后一对,重复步骤1;3、从第三对到最后一对,重复步骤1;...4、最后一对,重复步骤1。注意:外层循环的终止条件是处理到了倒数第二个元素,它会与最后一个元素比较,因此不需要再处理最后一个元素。public static voi原创 2017-03-07 10:17:43 · 276 阅读 · 0 评论 -
浅谈二分查找
二分查找:已排序好的序列。将中间元素与待查找元素比较,若待查找元素较大,则折半查找右半部分,若待查找元素较小,则折半查找左半部分,否则直接返回中间元素对应的索引。public static int binsearch(int value, int[] numbers) { int low = 0; int high = numbers.length - 1; while (low原创 2017-03-07 14:23:00 · 236 阅读 · 0 评论 -
浅谈增量部署的svn和全量部署的git
1、增量部署增量部署一般指在每次部署过程中,首先提取当前版本和即将部署版本之间的增量(包括代码、可执行文件或配置等),并在部署过程中仅更新增量部分。(1)增量部署的部署流程:利用代码管理工具(SVN等)提取两个版本之间的增量,并结合其他方面的增量变化。按照增量部分制定具体的部署方式,编写部署脚本,并准备增量部署包(包括混淆代码等)。分发和部署增量部署包到已经运行上一版本的目标环原创 2017-03-12 18:59:56 · 3829 阅读 · 0 评论 -
浅谈BitMap
BitMap就是用一个bit位来标记某个元素对应的value,而key即是这个元素。由于采用bit为单位来存储数据,因此在可以大大的节省存储空间。 1) BitMap的算法思想32位机器上,一个整形int在内存中占32bit,可以用对应的32个bit位来表示十进制的0-31个数,BitMap算法利用这种思想处理大量数据的排序与查询。 2) BitMap的优点 ① 效原创 2017-03-12 20:35:35 · 1907 阅读 · 0 评论 -
浅谈数据库锁机制
1、MYSQL锁类型1) 共享锁共享锁的代号是S,共享锁的锁粒度是行或元组(多个行)。一个事务获取了共享锁之后,可以对锁定范围内的数据执行读操作。 2) 排它锁排它锁的代号是X,排它锁的粒度与共享锁相同,也是行或元组。一个事务获取了排它锁之后,可以对锁定范围内的数据执行写操作。eg:假设有两个事务T1和T2:如果事务T1获取了一个元组的共享锁,事务T2还可以立即获原创 2017-04-09 11:15:21 · 416 阅读 · 0 评论 -
浅谈数据库视图与内、外连接
1、视图视图(View)是从一个或多个表(或视图)导出的表,通常是一个表或者多个表的行或列的子集。视图虽然具有和表相同的功能,但与表不同,视图是一个虚拟的表,并不代表任何物理数据,只是用来查看数据的窗口而已。视图并不是以一组数据的形式存储在数据库中,数据库中只存储视图的定义,而不存储视图对应的数据,这些数据仍存储在导出视图的基本表中,当基本表中的数据发生变化时,从视图中查询出来的数据也原创 2017-04-09 11:39:41 · 5454 阅读 · 0 评论 -
浅谈数据库范式
一、相关概念超键(super key):能唯一标识元组的属性集。候选键(candidate key):不含有多余属性的超键(最小的超键)。主键(primary key):选作元组标识的一个候选键。外键(foreign key):如果关系模式R1中的某属性集不是R1的主键,而是另一个关系R2的主键,则该属性集是关系模式R1的外键。主属性:一个属性只要在任何一个候选码中出现过,这个原创 2017-04-09 12:14:58 · 1072 阅读 · 0 评论 -
浅谈Window内存管理方式——页式管理、段式管理、段页式管理
内部碎片:已经被分配出去的的内存空间大于请求所需的内存空间。外部碎片:还没有分配出去,但是由于大小太小而无法分配给申请空间的新进程的内存空间空闲块。 Window内存管理方式主要分为:页式管理、段式管理、段页式管理。1、页式管理用户程序的逻辑地址空间被划分成若干固定大小的页,相应地,内存物理空间也分成相对应的若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一原创 2017-04-09 14:48:56 · 5263 阅读 · 0 评论 -
浅谈操作系统中断和异常
在操作系统中,引入核心态和用户态这两种工作状态后,需要考虑这两种状态之间如何切换。操作系统内核工作在核心态,而用户程序工作在用户态。操作系统不允许用户程序实现核心态的功能,而它们又必须使用这些功能。因此,需要实现从用户态进入核心态。在操作系统中,实现从用户态进入核心态的唯一途径就是通过中断或异常。当中断或异常发生时,运行用户态的CPU会立即进入核心态,这是通过硬件实现的。1、中原创 2017-04-09 15:30:23 · 3474 阅读 · 0 评论 -
浅谈ARP、NAT、ICMP、DHCP、RIP、OSPF、BGP协议
1、ARPAddress Resolution Protocol,地址解析协议,根据IP地址获取物理地址。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机原创 2017-04-09 16:18:19 · 7072 阅读 · 0 评论 -
浅谈Git工作流
1、常见的问题:1) 为什么不能使用SVN的工作流来使用Git?2) Git的分支?团队多人如何协作?如何解决冲突?如何进行发布?3) master(发布)、develop(主开发)、hotfix(修复)如何避免不经过验证代码上线?4) 如何在Github上与他人协作?star-fork-pull request的流程是怎样的? 2、原创 2017-05-19 18:24:10 · 595 阅读 · 0 评论