- 博客(130)
- 资源 (23)
- 收藏
- 关注
原创 Java多线程复习与巩固(五)--生产者消费者问题(第一部分)
生产者消费者问题(第一部分)生产者消费者问题也称为有限缓冲问题,是线程同步的一个经典问题:生产者线程和消费者线程共享一块固定大小的缓存,生产者负责生成产品然后存入共享缓冲区中,消费者负责从共享缓冲区中取出产品进行消费。该问题的关键在于生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区空时消耗数据。要解决这个问题就必须:让生产者在缓冲区满时休眠,等到下次消费者消耗缓冲区中的数据的时候,生产...
2017-08-01 19:56:18 903
原创 辗转相除法、更相减损法、Stein算法
最大公约数和最小公倍数求解,常用的方法是短除法进行因式分解,然后最大公约数是所有公共因子的乘积,最小公倍数是所有因子的乘积。本质上求最小公倍数就是求最大公倍数:x=m*a, y=m*b;m是最大公约数,那最小公倍数就是m*a*b。所以可以得到最大公约数与最小公倍数的关系: LCM(A,B)×GCD(A,B)=A×BLCM(A,B)×GCD(A,B)=A×BLCM(A,B)×GCD(A,...
2017-07-30 18:42:55 14763 1
原创 素数检测算法
因为1既不是素数也不是合数,所以下面的实现代码中不考虑小于2的情况。C语言完整源码可以到这里查看Java完整源码可以点击这里查看本文以C语言进行讲解,建议对着完整的源码看。1. 暴力求解最原始、最粗暴的方法就是从头到尾逐个进行检测,一旦遇到可被整除的数马上返回falsebool is_prime_1(int n) { for (int i = 2; i &...
2017-07-28 21:21:25 3837
原创 C语言计时函数
计算机纪元时间:C语言和Unix创造并诞生于1970年,所以计算机以1970年1月1日作为纪元开始时间。C语言标准并没有指定time_t类型的编码方式,但大多数遵循POSIX标准系统的time_t一般是32位有符号整数实现,以秒为最小单位,从1970年1月1日开始计数,所以能表示到2038年。
2017-07-28 15:57:28 8312
转载 SED简明教程
原文地址:http://coolshell.cn/articles/9070.html;感谢作者的分享。有一些网友看了前两天的《Linux下应该知道的技巧》希望我能教教他们用awk和sed,所以,出现了这篇文章。我估计这些80后的年轻朋友可能对awk/sed这类上古神器有点陌生了,所以需要我这个老家伙来炒炒冷饭。况且,AWK是贝尔实验室1977年搞出来的文本出现神器,今年是蛇年,是AWK的本命年,
2017-07-27 10:30:05 636
原创 从汇编角度查看C语言函数调用约定
为了防止出现不必要的代码影响汇编语言的查看,所以程序中不使用任何库函数,以保持汇编代码的简洁。这里所使用的汇编是VC的MASM。默认函数调用方式__cdeclint add(int a, int b) { return a + b;}int main() { int a = 1, b = 2; return add(a,b);}对应汇编代码:; Listing gener
2017-07-25 19:03:13 2431
原创 typedef与#define的区别
typedef关键字用于为类型数据创建别名,通常的用法如下:typedef char* PCHAR;typedef struct list_node{ int value; list_node *next;} Node;typedef void (*PFUNC)(int);为了程序跨平台,我们可能会对一些类型取一个特殊的名字,换一个平台我们只需要修改这些类型的定义即可,比如stdi
2017-07-25 09:59:32 1430
原创 TCP-IP 概述
TCP/IP起源于60年代末由美国政府资助的一个分组交换网络——ARPAnet(阿帕网)。到90年代TCP/IP就已成为事实上的工业标准了。网络分层网络分层从ARPAnet开始就已经在使用,将网络协议分为不同层次开发,能简化设计的复杂性,各层既能相互独立又能高效地协调工作。提到分层,我们通常会把TCP/IP层次模型与OSI参考模型进行对比。OSI参考模型OSI参考模型是...
2017-07-21 14:42:54 977
原创 NJQ面经
终于收到了家正规公司的面试通知了,面试实习生,问的问题都是非常基础,非常底层的,好在之前也复习过一部分,但也有几个问题没有答上来,先总结总结面试经验吧。面试我的是一个中年圆脸大叔,看上去像个搞技术的(没有传说中的秃头)。面试官:你大学都学过什么课程。我:大一的时候学了C语言,感觉学的不够深,而且越学越觉得C语言坑多,后来又有数据结构、计算机网络、操作系统,大三也就是上半年还学了个编译原理。面试官:编
2017-07-18 18:27:51 1767
原创 JavaIO流复习与巩固--FileDescriptor与File
FileDescriptorFileDescriptor,顾名思义:“文件描述符”,用来表示开放文件、开放套接字。这个概念来自于*nux文件系统,Linux继承Unix “一切皆文件” 的概念: 文件类型 标记符 普通文件 - 目录文件(directory) d 字符设备文件(character) c 块设备文件(block) ...
2017-07-18 00:54:05 3580
原创 自旋锁公平性的三种实现
随着多核处理器的爆炸式增长,多线程同步访问共享内存的性能也成了计算机系统发展的关键。在《互斥锁与自旋锁》这篇文章中我们提到了互斥锁与自旋锁之间的区别以及各自的优点和适用场景。普通自旋锁的实现我们适用Java代码来实现一个简单的自旋锁:import java.util.concurrent.atomic.AtomicBoolean;public class Spinlock ...
2017-07-17 00:14:16 3422
转载 Lucene--全文检索的基本原理
文章转载自http://www.cnblogs.com/guochunguang/articles/3641008.html,感谢作者的分享。一、总论根据http://lucene.apache.org/java/docs/index.html定义:Lucene是一个高效的,基于Java的全文检索库。所以在了解Lucene之前要费一番工夫了解一下全文检索。那么什么叫做全文检索呢?这要从我们生活中的
2017-07-14 16:14:03 625
转载 深入正则表达式应用
这篇博客让我对正则更熟悉,觉得挺不错转载过来,http://www.zjmainstay.cn/deep-regexp是原文链接,非常感谢作者的分享。本文是一篇正则表达式高级教程,主要通过对正则表达式几个概念的介绍,深入探讨正则表达式高级功能,以期达到通俗化解释正则表达式高深概念的目的。前面已经写过一篇文章《我眼里的正则表达式(入门)》介绍过正则表达式的基础和基本套路正则三段论:定锚点,去...
2017-07-09 16:02:12 649
转载 我眼里的正则表达式入门教程
这篇博客让我对正则更熟悉,觉得挺不错转载过来,http://www.zjmainstay.cn/my-regexp是原文链接,非常感谢作者的分享。正则对于新人来说是一个头疼的名字,让人闻而生畏。但是,在我看来,正则,并没有那么神秘,希望能通过这篇正则表达式入门教程解除正则新人对于正则的畏惧感。接触正则应该有三年不止了吧,我也不知道自己怎么就走过了畏惧正则的时期,而且在一个小圈子里面还成了正...
2017-07-09 14:57:00 928
转载 使用注册表脚本文件(REG)添加、修改或删除Windows注册表项和值
文章转载自http://www.cnblogs.com/fczjuever/archive/2013/04/09/3010711.html1. 简介 我们平时大多采用Regedit注册表编辑器来实现对注册表的修改操作,但是这种手工操作费时费力,当你要对多台PC统一修改注册表时,就要怨念了。并且在某些情况下,如果注册表编辑器被禁用了,那么这种方法也会失效。于是,推荐大家使用REG文件来快速完成注册表
2017-07-09 14:54:28 15163
原创 Android使用MultiDex处理64K限制
随着Android平台的不断发展,Android应用的规模也越来越大。当你的程序以及程序所使用的库达到一定大小,build时可能会产生错误,这表示你的程序已经达到Android应用架构的极限。老版本构建工具报错:Conversion to Dalvik format failed:Unable to execute dex: method ID notin[0,0xffff]:65536新版本构建工
2017-07-09 14:01:10 949
原创 Windows上使用压缩包安装MYSQL
上个月在学校,好几个人过来叫我帮他们装MySQL,我说“你们可以到官网下个傻瓜式的安装向导,很简单,我这只有压缩包版的”,他们懒得下,我就用压缩包方式帮他们装。上次写过一篇在CentOS 7上安装MySQL的文章,索性把Windows上安装过程也写下来,对比一下。下载Zip压缩包傻瓜式安装方式我就不讲了,可以从官网下载msi安装器。MySQL压缩包可以从https://dev.mysql.com/d
2017-07-04 23:25:51 1302
原创 互斥锁与自旋锁
互斥锁(Mutex)互斥锁是一种实现线程同步的机制:当一个线程尝试获取互斥锁,如果互斥锁已经被占用则该线程会被挂起进入睡眠状态,直到被唤醒。线程被挂起时,CPU会将该线程当前的处理状态保存到内存中,等到唤醒时从内存中读取上次的处理状态,这个CPU切换线程处理状态的过程被称为“上下文切换”。上下文切换是一个非常耗时的操作,它需要相当多的CPU指令才能完成。但在早期单核处理器中,只能通过这个方式来...
2017-06-28 21:12:20 1038
原创 Java多线程复习与巩固(九)--volatile关键字与CAS操作
前一篇文章中提到原子操作,也许大家和我一样很好奇为什么AtomicInteger.increment方法能保证原子性,而简单的++运算却不能保证原子性。这篇文章我们就从AtomicInteger类下手分析源码,来了解一下原子操作的实现原理,但是分析源码之前需要来一段小小的前奏。CPU内存架构现代计算机都是多处理机CPU,每个核心(Core)都有一套寄存器,CPU访问寄存器的速度是最快的...
2017-06-27 23:16:48 5114
原创 Java多线程复习与巩固(八)--原子性操作与原子变量
前面讲线程同步时,我们对多线程出现的问题进行了分析,在那个例子中,问题的根源在于c++和c--这两个操作在底层处理的时候被分成了若干步执行。当时我们用的是synchronized关键字来解决这个问题,而从synchronize的实现原理中我们知道synchronized通过monitor监视器来实现线程同步,这种同步方式要求线程等待monitor的拥有者线程释放后,才可能进一步执行,而线程等待可能...
2017-06-26 18:13:13 718
原创 Java语言基础复习与巩固
八种基本数据类型基本数据类型的包装类包装类的缓存池Integer缓存池的自定义配置包装类中的其他工具方法基本数据类型的格式化输出Java中的数学运算Math类中的常量和最基本方法指数运算与幂运算三角函数运算产生伪随机数Java中的字符串Java字符串与CC字符串对比Java字符串的不可变性Java的字符串连接底层实现String字符串常量池的底层实现Stri...
2017-06-23 01:18:14 1218
原创 Java多线程复习与巩固(四)--synchronized的实现
小小的回顾在上一篇文章的例子中有一个Counter类:static class Counter { private int c = 0; public void increment() { c++; } public void decrement() { c--; } public int value() { return c; }}为了实现线程同...
2017-06-15 20:46:36 960
原创 搭建git服务器同步个人网站
废话不多说,直接上正题。安装git这里以我的CentOS 7为例,其他发行版可以查看git官网提供的命令https://git-scm.com/download/linuxyum install git创建git用户创建git用户,是为了专门管理服务器上的git服务。在Linux最好每个用户管理某一个模块的功能,这样安全性更高。当然如果你不在意这些,你可以跳过这一步,在后面的步骤中你可以使用已存在的
2017-06-15 14:48:38 2167
原创 Java多线程复习与巩固(三)--线程同步
多线程容易出现的问题因为一个进程内,多个线程线程共享该进程的资源,而进程之间,资源的获取是互斥的,所以线程间通信比进程间通信更简单。我们可以直接通过共享资源的访问来实现线程间通信,这种通信方式十分有效(速度快),但也容易产生错误,如:线程干扰和内存一致性错误。看一下下面这个例子:这个程序有两个线程,一个线程对计数器进行10000次加一操作,一个线程对计数器进行10000次减一操作,两个线程...
2017-06-14 23:56:11 1038 3
原创 Java多线程复习与巩固(二)--线程相关工具类Timer和ThreadLocal的使用
定时器(Timer类)如果我们需要让某个任务在另一个线程中周期性的执行,或者让它在某个时刻执行一次。这时我们可能会写这样的代码:周期任务:// 周期任务public class PeriodTask implements Runnable{ private long period = 1000; private boolean running = true; ...
2017-06-14 21:21:43 865
原创 Java多线程复习与巩固(一)--线程基本使用
进程与线程在并发编程中,有两个基本的执行单元:进程和线程。在Java中,并发编程主要关心的是线程。当然,进程也很重要。进程(Process)进程有独立的执行环境,一个进程有一套私有的、完整的运行时资源,比如:每个进程都有自己的内存空间。进程通常会被认为是一个应用程序的代名词。但实际上一个应用程序可能会包含多个协同工作的进程。比如你电脑里的360打开后肯定有两个或两个以上的进程:...
2017-06-14 15:27:20 976
原创 密码学安全算法--对称加密算法
对称加密也称为常规加密、单钥加密,在非对称加密(公钥加密)开发之前是唯一使用的加密类型,直到现在,它也仍然是使用最广泛的加密类型之一。最常见对称加密算法是:DES、3DES、AES、RC4。对称加密算法基本原理先上图,对称加密工作过程 在整个工作过程中涉及到以下几个概念 - 明文:也就是原始信息或者说原始数据。也就是上图中的A。 - 加密算法:对明文进行各种替换或转换操作的一...
2017-06-04 21:45:50 10894
原创 编码全解:从ASCII/ISO-8859/GB2312/GBK到Unicode的UCS-2/UCS-4/UTF-8/UTF-16/UTF-32
ASCII编码为了能在电报、打印机、计算机等电信设备上进行信息交换,就必须为不同的设备制定统一的编码格式。早期的电信设备字符编码基本都是使用6位编码。1963年美国国家标准协会(ANSI)制定并公布的ASCII编码是第一个被广泛采用7位编码。ASCII全称:American Standard Code for Information Interchange,美国信息交换标准码。直至1986...
2017-06-02 17:08:00 5097
原创 Java I/O流总结与巩固
字节流字节流就是每次以8位一个字节的方式执行输入输出。所有字节流都继承自InputStream或OutputStream,包括字符流在内的所有类型的I/O流都是基于字节流构建的。字节输入流InputStream字节输入流基本上都需要实现InputStream这个抽象类的方法: 方法摘要 备注 public abstract int read() thr...
2017-05-22 14:51:18 800
原创 关于Java
关于JavaJava既是编程语言又是平台。Java编程语言Java编程语言是一种高级语言,具有以下的几种特性:简单(相对于C/C++这类语言)面向对象(而且是纯面向对象)跨平台(只要该平台有JRE就可以运行Java程序)分布式(Java的RMI机制是目前分布式技术中最成熟的)高性能(Java是编译解释混合的语言,比Python,Javascript这类解释型语言效率高...
2017-05-17 22:30:58 530
原创 Java Collection框架概述
集合接口概要:List (since 1.2)Vector(since 1.0):Stack(since 1.0):ArrayList(since 1.2):LinkedList(since 1.2):CopyOnWriteArrayList(since 1.5,concurrent):Map (since 1.2)Hashtable(since 1.0):Pro...
2017-05-05 16:52:59 2362
原创 单轴快排(SinglePivotQuickSort)和双轴快排(DualPivotQuickSort)及其JAVA实现
快速排序使用的是分治思想,将原问题分成若干个子问题进行递归解决。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。单轴快排(SinglePivotQuickSort)单轴快速排序是快速排序最简单的实现。步骤如下:如果待排序的数组...
2017-05-04 13:11:21 12577 11
原创 常见排序算法及JAVA实现
排序算法的分类先看维基百科中的一张关于排序算法的表 我们主要了解常见的一些排序算法。像Bogo排序,臭皮匠排序这类完全不实用的排序可以置之不理。 我们这里要说的排序算法都是内排序,也就是只在内存中进行,涉及到对磁盘等外部存储设备中的数据进行排序称之为外排序,关于外排序的内容可以查看维基百科。其实外排序使用的是归并排序的思想。简单选择排序(SelectSort)选...
2017-04-19 22:01:01 5055 5
原创 Linux服务器基本安全防范
每次登录服务器的时候总有提示说有人通过ssh尝试n次登录失败。 查一查/var/log/secure日志文件 grep "Failed password for invalid user" /var/log/secure | awk '{print $13}' | uniq -c | sort -nr | more 卧槽,简直就是国内外云集啊,什么乌克兰、保加利亚、俄罗斯、巴西、阿根廷…..
2017-04-15 16:45:08 6695
原创 CentOS 7中Systemd取代init进程
CentOS 7中Systemd取代init进程由于这个学期学校有Linux课程,我也一直期待着这门课,为了练习在Linux上搭建一些应用,so 我把原来的Windows2012的云服务器换成了CentOS7(其实有很多其他原因,比如mstsc传输速度慢的可怕,而且服务器带宽本来就不行)。在学习过程中遇到了很多问题,主要在于很多Linux命令在CentOS7中有了替代品,也就是所谓的新特性,其中最“
2017-04-08 13:56:41 6078
原创 在CentOS7上安装MySQL的辛路历程
今天突然心血来潮,想把博客转移到到自己的云服务器上,嗯,想法不错,正好能练练手(后来找到了别的解决方案Hexo,才发现自己有多幼稚,果然是脑子一热,啥事想得出来,但是在这个过程中也学到了一些东西)。CentOS上安装MySQL数据库,linux配mysql,哎哟,不错哦。(→_→在找到别的解决方案后,马上就被我给卸了)。二话不说上yum安装大法[root@VM_235_40_cento...
2017-04-05 22:23:29 18069
原创 Http协议报文格式
Http协议概述HyperText Transfer Tansfer Protocol 超文本传输协议,是一种基于TCP的应用层协议,也是目前为止最为流行的应用层协议之一,可以说HTTP协议是万维网的基石。历经了0.9、HTTP/1.0、HTTP/1.1、HTTP/2几个版本(关于HTTP协议的历史,这里有一片文章介绍的比较详细),目前流行的还是HTTP1.1这个版本,HTTP2还在推广中,我...
2017-03-30 19:32:23 31801 5
转载 泛洪攻击(Flood)与TCP代理(TCP proxy)
下文摘自H3C攻击防范指导手册泛洪攻击网络上常常会发生泛洪攻击和网络扫描攻击。泛洪攻击指攻击者向攻击目标发送大量的虚假请求,驱使被攻击者由于不断应付这些无用信息而筋疲力尽,合法的用户却由此无法享受到相应服务,即发生拒绝服务。扫描攻击是攻击者对网络进行主机或端口扫描,通常攻击者通过扫描了解网络的状况,为后续的攻击做准备。 防火墙通过检测网络流量,分析异常流量的特征,能成功检测出各种...
2017-03-29 12:31:20 4737
原创 TextureView、SurfaceTexture、Surface
相关文章SurfaceView、SurfaceHolder与SurfaceTextureView、SurfaceTexture与Surface 上篇文章我们说了SurfaceView,接下来我们对Texture进行一下分析。 SurfaceView由于使用的是独立的绘图层,并且使用独立的线程去进行绘制。前面的文章中也说到SurfaceView不能进行Transition,Rotatio...
2017-03-26 23:34:49 12425 1
原创 SurfaceView、SurfaceHolder与Surface
相关文章SurfaceView、SurfaceHolder与SurfaceTextureView、SurfaceTexture与Surface按照官方文档的说法,SurfaceView继承自View,并提供了一个独立的绘图层,你可以完全控制这个绘图层,比如说设定它的大小,所以SurfaceView可以嵌入到View结构树中,但是需要注意的是,由于SurfaceView直接将绘图表层绘...
2017-03-26 23:28:51 5224 4
Android 音乐播放器简单实现源码实例下载
2017-05-05
快速排序的六种实现,单轴快排,双轴快排JAVA实现
2017-05-04
前端 运维 安卓客户端 等工具集, angrytools.com网的神器
2017-03-11
View滑动效果常用属性详解2-使用scrollX|scrollY和Scroller实现自定义ViewPager
2017-01-02
使用scroll,translation,margin三种滑动效果的对比
2017-01-01
AndroidStudio黑色主题以及AndroidStudio下的Eclipse快捷键
2016-10-27
前端API合集HTML5,CSS3,JavaScript,jQuery,Bootstrap的API,都是个人认为质量最好的API文档
2016-09-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人