自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 进程和线程

进程好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。一个车间里,可以有很多工人,他们协同完成一个任务。线程就好比车间里的工人,一个进程可以包含多个线程。进程的内存空间是共享的,每个线程都可以使用这些共享内存。对于某些共享内存,当一个线程使用该内存时,其他线程必须等它结束,才能使用这一块内存,防止他人进入的简单方法是加锁。先到的人锁上门,等锁...

2018-03-30 15:54:08 96

原创 常用排序算法的时间复杂度和空间复杂度及稳定性

一、时间复杂度二、空间复杂度 冒泡排序,简单选择排序,堆排序,直接插入排序,希尔排序的空间复杂度为O(1),因为需要一个临时变量来交换元素位置,(另外遍历序列时自然少不了用一个变量来做索引)快速排序空间复杂度为O(logn)~O(n)(就空间复杂度来说,主要是递归造成的栈空间的使用,最好情况,递归树的深度为logn,其空间复杂度也就为O(logn),最坏情况,需要进行n‐1递归...

2018-03-27 15:00:04 1935

原创 大话设计模式-----工厂方法模式

一、自己理解建立一个产品父类,各个产品子类继承自产品父类。建立一个工厂父类依赖于功能父类,各个工厂子类继承自工厂父类,各个产品工厂子类依赖于产品子类。用具体的产品工厂子类实例化工厂父类,从而调用功能工厂子类中的函数创建功能子类的对象实例化产品父类。工厂方法模式弥补了简单工厂模式不满足开闭原则的诟病,当我们需要增加产品时,只需要增加相应的产品和工厂类,而不需要修改现有的代码。二、例子...

2018-03-26 22:42:57 158

原创 大话设计模式-----简单工厂模式

1、    将各个功能分别封装成类,继承父类;然后建立一个工厂类,依赖于父类,在工厂类中,根据不同情况,用不同的子类实例化父类对象,从而执行相应的子类操作。    例如:    父类为运算类,加法类、减法类、乘法类以及除法类分别是运算类的4个子类;建立工厂类依赖于运算类,其中有一个运算函数,将运算类对象初始化为空,如果函数的参数为“+”,则用加法类实例化运算类对象,如果函数的参数为“-”,...

2018-03-26 22:24:40 134

原创 如何解决秒杀问题?

一、秒杀实例微信抢红包、双11抢购在秒杀场景下,这意味着多个用户在同时抢一件商品。假设有1000个人同时在抢一件商品,每个时间点仅有一个用户可以获得进入数据库操作的权限,剩下的9999个用户需要等待,待前面的用户完成操作后,会唤醒9999个用户,告诉他们可以进入了,最终又仅有一个用户可以进入。在秒杀情况下,CPU的负载非常高。二、解决方案1、限制用户点击的次数,即用户在浏览器点击相...

2018-03-21 17:55:54 1807

原创 oracle数据库和mysql数据库的区别

1、MYSQL里用双引号包起字符串,ORACLE里只可以用单引号包起字符串。2、Oracle是大型数据库,而mysql是中小型数据库。3、mysql的主键一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,在插入记录时,不需要再指定该记录的主键值,主键将自动增长;oracle没有自动增长类型,主键一般使用序列, 插入记录时将序列号的下一个值赋给该字段即可。4、oracl...

2018-03-21 15:55:09 8941 2

原创 HashMap和HashTable的区别

1、HashMap是Map接口的一个实现类,HashTable是Dictionary的子类。2、HashTable是线程安全的;HashMap不是线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrentHashMap。3、HashMap中使用containsValue()和containsKey()方法;HashTable中使用contains()方法,containsV...

2018-03-20 17:31:00 101

原创 Spring框架-----依赖注入(IOC注入)的方式

2018-03-17 17:53:05 172

原创 Spring框架-----注解

不同的注解:@Component是一个泛化的概念,仅仅表示一个组件(Bean),可以作用在任何层次。@Service通常作用在业务逻辑层(Service),但是目前该功能与@Component相同。@Constroller通常作用在控制层(Severlet),但是目前该功能与@Component相同。@Repository通常作用在数据访问层(Dao),该注解的作用不只是将类识别为Bean,同时它...

2018-03-17 17:40:01 186

原创 Spring框架-----AOP

AOP(Aspect Oriented Programming),面向切面编程,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为“Aspect”,即切面。简单说就是那些与业务无关,却为业务模块所通用的功能:例如日志记录、权限控制、性能统计,封装起来,并能动态的把这些功能添加到需要的代码中,便于减少系统的重复代码。这样各...

2018-03-17 16:04:24 100

原创 Spring框架-----IOC

1、IOC是什么?IOC---Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看做是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的反射编程,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件...

2018-03-17 15:47:41 133

原创 TCP\IP三次握手连接,四次挥手断开分析

一、三次握手第一次握手:主机A发送位码为syn为syn=1,随机产生seq numbe=1234567的数据包到主机B,主机B由SYN=1知道。主机A请求建立联机;第二次握手:主机B收到请求后要确认联机信息,向主机A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包。第三次握手:主机A收到ack number后,检查ack number是否...

2018-03-16 22:17:15 121

原创 选择排序(升序)

一、思想在要排序的一组数中,选出最小的一个数与第一个位置的数交换,然后在剩下的数当中再找最小的数与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。二、代码public class XuanZe { public static void selectSort(int [] arr) { int length = arr.length; for(int i=0;i<leng...

2018-03-15 13:32:16 670

原创 快速排序(升序)

一、思想将数组的第一个数设置为关键字,通过一趟排序将待排记录分割成独立的两部分,其中,第一部分的关键字均比第二部分的关键字小,即第一部分小于等于关键字,第二部分大于关键字,分别对这两部分继续排序,直到整个序列有序。图解如下:二、代码public class KuaiSort1 {    public static void swap(int []arr,int l...

2018-03-15 11:23:43 2976

原创 冒泡排序算法(升序)

一、原理设数组的长度是length,重复的走访数组length-1次,每次从第i个元素开始,依次比较相邻的两个元素的大小,若后面的元素小于前面的元素,则将两个元素的顺序交换,因而,最小的元素会经由交换慢慢“浮”到数列的顶端。二、实现代码public class MaoPao {    public static int[] maoPao(int [] arr) {    for(int i=0;...

2018-03-15 09:50:26 3615

原创 程序员面试宝典-----栈与队列

1、栈(1)定义:栈采用后进先出(LIFO)顺序。换言之,像一堆盘子那样,最后入栈的元素最先出栈。实际上,栈和链表本质上是一样的,只不过用户通常只能看到栈顶元素。(2)函数:pop():将栈顶元素弹出栈,并返回栈顶元素的值。push():向栈中压入一个元素。peek():返回当前栈顶元素的值。2、队列(1)定义:队列采用先进先出(FIFO)顺序。就像一支排队购票的队伍那样,最早入列的元素也是最先出...

2018-03-08 19:29:47 165

原创 Java并发编程实战-----原子性

1、定义:可以作为一个不可分割的操作来执行。例如,count++就不具备原子性,它包含了读取、修改和写入3个独立的操作。2、会导致不正确结果的情况(1)竞态条件当有多个线程时,正确的事件发生时序导致正确的结果,否则导致错误的结果。最常见的条件类型就是“先检查后执行”操作,即通过一个可能失效的观测结果来决定下一步的动作。“先检查后执行”的一种常见情况就是延迟初始化。延迟初始化的目的是将对象的初始化操...

2018-03-06 22:32:48 139

原创 程序员面试宝典-----链表

1、链表定义class Node{    Node next = null;    int data;    public Node(int d){          data = d;    }}2、关于链表解题技巧(1)遇到链表题时,务必弄清楚它到底是单向链表还是双向链表。(2)必须注意检查空指针。(3)“快行指针”技巧,同时用两个指针来访问链表,只不过其中一个比另一个超前一些,快指针往往先行...

2018-03-06 11:29:31 180

原创 java并发编程实战-----简介

1、并发和并行的区别并发:多个程序在同一时间段运行,只有一个CPU。并行:多个程序在同一时刻运行,有多个CPU。2、线程带来的风险(1)安全性问题:“永远不发生糟糕的事情”,两个或多个线程同时访问一个变量,可能会出现差错。例如,两个线程同时对一个变量执行读操作,从而它们得到了相同的值,违背了该变量值唯一的条件。(2)活跃性问题:“某件正确的事情最终会发生”。当某个操作无法执行下去的时候,就会发生活...

2018-03-05 20:01:42 149

空空如也

空空如也

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

TA关注的人

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