自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Searchin_R的博客

传说他的身上流淌着龙的血液

  • 博客(34)
  • 收藏
  • 关注

原创 杂谈——数据库索引

具体知识如下图(图片来源:https://www.cnblogs.com/gavinsp/p/5513536.html ):   

2018-12-28 10:20:14 340

原创 杂谈——Integer的缓存机制

这个问题很多人其实都知道——如果值在-128到127之间,Integer对象的引用地址是相等的。身边很多朋友都说是字面量在常量池中缓存的原因。其实并不是的,这是Integer的缓存机制:在Integer类中,定义了一个私有的静态类IntegerCache,这个类是用来支持Integer缓存的,它的作用是把一部分Integer类型的对象在Integer类加载的时候一起创建出来并放在一个cac...

2018-12-27 16:40:37 1996

原创 并发编程——为什么volatile变量++操作线程不安全

学习volatile的时候也许我们会看到下面这句话:对于volatile变量来说,自增操作线程不安全。  那为什么不安全呢?本帅博主看的是《并发编程的艺术》这本书,这本书对这一事件也没有做出很让人易懂的解释。那么我们自己用例子来测试一下咯~测试代码如下: package xiancheng;public class volatileTest { public stat...

2018-12-26 21:26:40 1200 1

原创 数据结构——链表实现队列(泛型)

package Test;public class LinkedListQueue { public static void main(String[] args) { // TODO Auto-generated method stub Queue <Integer> queue=new Queue<Integer>(); queue.add(1)...

2018-12-25 16:32:06 402

原创 杂谈——关于mybatis 的mapper namespace 作用及解析

在mybatis中,映射文件中的namespace是用于绑定Dao接口的,即面向接口编程。 当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句,如下:假设定义了IArticeDAO接口public interface IArticleDAO{List<Article> selectAllArticl...

2018-12-25 00:48:44 498

原创 杂谈——Mybatis一二级缓存简单详解

先说缓存,合理使用缓存是优化中最常见。将从数据库中查询出来的数据放入缓存(内存)中,每次查询数据时,先判断缓存区中是否存在数据,如果存在,就从缓存区中获取数据,如果不存在,就从数据库中获取数据,将数据存放到缓存区中。这样的话,下次访问该数据的时候使就不必从数据库查询,而是直接从缓存中读取,避免频繁操作数据库,提高数据访问效率,减轻数据库的压力,同时提高系统性能。咱们今天就来认识一下Mybati...

2018-12-23 10:56:40 4210

原创 杂谈——Java线程池详解

在一个应用程序中,我们无可避免地需要多次使用线程,也就意味着,我们需要多次创建并销毁线程。而创建并销毁线程的过程势必会消耗内存。举个例子,假设我们要去爬三百主流媒体网站,每天要抓一次数据,平均每次开销50毫秒,处理开销2毫秒,则可以开二十五个线程,假设每个网站有十个请求,那么三百个网站就有3000个请求。从上面我们可以知道,CPU等待时间/CPU执行时间=25:1,这样的开销太大了,而这二...

2018-12-23 00:47:34 4704

原创 Java——深入了解Java中的迭代器

Java集合框架的集合类,我们有时候称之为容器。容器的种类有很多种,比如ArrayList、LinkedList、HashSet...,每种容器都有自己的特点,ArrayList底层维护的是一个数组;LinkedList是链表结构的;HashSet依赖的是哈希表,每种容器都有自己特有的数据结构。因为容器的内部结构不同,很多时候可能不知道该怎样去遍历一个容器中的元素。所以为了使对容器内元素的操作...

2018-12-22 09:21:07 2156 1

原创 杂谈——运行时异常和普通异常有什么区别

说到异常,大家都熟悉,只要程序出错了,那么肯定会说:“哎呀,我的程序出错啦~它抛出异常啦”。但单单以“异常”的名称来称呼它们,未免也太粗糙了。我们毕竟是一个精致的程序员,当然得知道他们到底都有哪些种类啦。这就好比一个优质的男朋友(比如本帅博主)必须能够精准地区分女朋友的口红色号一般。那Java到底有哪些异常呢?其实也不多,Java提供了两种错误的异常类,分别是Error和Excepti...

2018-12-21 16:11:35 5841 2

原创 杂谈——TCP/IP 协议栈详解

说到协议栈,我们就先来看看它的定义是什么。 TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。 本帅博主之前写过一篇关于OSI模型的博客,OSI模型采用了七层结构,分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP 协议则采用4层结构,分别是应用层、传输层、网络层和链路层,...

2018-12-20 16:00:19 2852 1

原创 杂谈——编译时多态与运行时多态

说到重载和重写,大家可能都知道。但是如果问你“编译时多态”和“运行时多态”,那么很多人可能会有一些些小小的蒙圈。其实,这也没有啥好蒙圈的,因为: 重载都是编译时多态,而重写表现出两种多态性,当对象引用本类实例时,为编译时多态,否则为运行时多态。 怎么判定是编译时多态还是运行时多态呢?如果在编译时能够确定执行多态方法中的哪一个,称为编译时多态,否则称为运行时多态。 下面我们就从重载和...

2018-12-20 10:32:35 2680

原创 JVM——Minor GC、Major GC和Full GC之间的区别

1.Minor GC我们知道,新生代可以分为Eden和Survivor区域,而从新生代代空间(包括 Eden 和 Survivor 区域)回收内存则被称为 Minor GC。可以参考JVM——四种垃圾收集算法详解中的标记复制算法。2.Major GC vs Full GCMajor GC 是清理老年代。但是由于很多MojorGC 是由MinorGC 触发的,所以有时候很难将MajorG...

2018-12-19 17:48:50 1625

原创 JVM——Client模式虚拟机与server模式虚拟机的区别。

目前java虚拟机有两种模式,分别为Client模式和Server模式。这两种模式可以使用-Client和-Server参数可以进行设置。如果没有设置的话,怎么办呢?那当然难不倒虚拟机,以它的智商当然会根据当前计算机系统环境自动选择运行模式。那它怎么检测呢?当不指定运行模式参数时,虚拟机启动检测主机是否为服务器,如果是,则以Server模式启动,否则以Client模式启动(J2SE5.0检...

2018-12-19 16:38:38 3861

原创 杂谈——如何合并两个有序链表(时间复杂度为O(n))

假设本帅博主有链表arr1:int[] arr1 = {1,3,6,8,23,34,56,77,90};链表arr2:int[] arr2 = {-90,34,55,79,87,98,123,234,567};我要如何才能够合并这两个有序链表,使得合并后的链表有序,并且使算法的时间复杂度为O(n)呢?思考一下噢~.......本帅博主也就不说别的啦,直接上代码:...

2018-12-18 10:03:49 5843 1

原创 杂谈——Java中throws和throw的区别

之前本帅博主写过一篇关于try-catch和finally的文章,即try-catch与finally语句块中使用return的注意事项以及相关引申,这篇文章讲述了一些它们之间的注意事项。这try-catch语句块中,还有很重要的一点,就是异常。对于异常,我们从来都不陌生。可以说,自从我们第一次写代码到现在的第n次写代码,异常从未离我们远去,甚至随着我们学习面的逐渐旷阔而变得越发的频繁与复...

2018-12-17 20:34:48 1954

原创 并发编程——线程的定义、六种状态的转换和属性

注:本篇博客有很多地方会用上本帅博主以前写过的博客,届时或贴原文链接,或摘抄部分内容。各位看官可以根据自己的需求选择。并发编程,自然就会涉及到多线程;而多线程,那自然是由线程组成的咯。所以俺们今儿个就来系统地了解一下线程,瞅瞅它的定义、以及那几种状态和属性。1.线程线程是指程序在执行过程中,能够执行程序代码的一个执行单元。 说到线程那么必然会提及进程,以及二者之间的区别。详情请参考...

2018-12-15 16:09:12 531

原创 并发编程——如何让程序最大程度的并发执行?

本帅博主和伙伴们正在学习,遇上一个较为冗长的程序例子,又必须打出来,但是又不想占用太多时间。像我这样,既想要敲出这个程序,又不想占用自己太多时间,该怎么办呢?这就需要并发编程来帮忙了。A君写一段,B君写一段,C君再写一段,凑起来,就变成一个完成的程序啦,这样就提升了效率。 看完上面这个例子,大家也许就对并发编程有了一个大概的了解, 但并发编程到底是什么呢?这段时间本帅博主一直在JVM和并发...

2018-12-14 22:42:29 1116

原创 JVM——四种垃圾收集算法详解

之前几篇博客介绍了内存模型以及判断对象是否存活的两种算法,当一个对象死亡的时候,就要被当做垃圾回收。那么今天我们就来了解一下垃圾收集算法,看看都是怎么将这些死亡的对象给回收了去。目前主要的垃圾收集算法有四种,分别是标记-清除算法、复制算法、标记整理算法以及分代收集算法。下面我们就来看看这四种算法都是啥。1.标记-清除算法标记-清除算法是最基础的收集算法。从它的名字我们可以看出来,这个算...

2018-12-14 00:49:24 817

原创 JVM——从简单Demo分析Java 四种引用类型

有内存分配自然也就有内存回收,是否回收一个对象就需要判断它是否符合回收条件。判断对象是否存活主要也就是引用计数法以及可达性分析算法。这两种算法可以参考:JVM——引用计数算法与可达性分析算法但是无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判定对象是否存活都与“引用”有关。在JDK1.2以前,Java中的引用的定义很传统:如果referenc...

2018-12-13 01:05:12 583

原创 JVM——引用计数算法与可达性分析算法

前几篇博客我们一起认识了JVM的内存模型(程序计数器、虚拟机栈、本地方法栈、方法区与堆),了解了它们的内存结构与分配,同时也略带提到关于内存的回收。JVM——内存模型(一):程序计数器JVM——内存模型(二):虚拟机栈与本地方法栈JVM——内存模型(三):堆与方法区有内存分配就肯定有内存回收,这个大家都知道,可哪些东西需要回收?什么时候进行回收呢?又怎么样回收呢?之前我们介绍了...

2018-12-12 23:56:14 3323 2

原创 JVM——内存模型(三):堆与方法区

前两篇博客我们认识了程序计数器、虚拟机栈与本地方法栈。今天我们来一起认识一下堆与方法区。关于堆内存,我之前有写过一篇关于堆外内存的博客,里面有详细介绍堆内存。这里为了观看方便,就直接把关于堆内内存的部分拿过来咯。(想了解堆内内存与堆外内存的伙伴们,可以参考:Java——堆外内存详解。)1.Java堆内存那什么东西是堆内存呢?我们来看看官方的说法。“Java 虚拟机具有一个堆(Hea...

2018-12-12 15:40:46 661

原创 JVM——内存模型(二):虚拟机栈与本地方法栈

本篇文章将继续认识Java虚拟机中的内存模型,今天要认识的是我们常说的"栈”。栈其实也分两种,一种是虚拟机栈,一种是本地方法栈。而我们平常说的最多的,就是虚拟机栈。接下来就让我们走进这两个栈,看看他们是个啥。1.虚拟机栈虚拟机栈,即Java Virtual Machine Stacks,描述的是Java方法执行的内存模型。每个方法在执行的同时都会创建一个栈帧,即Stack Fram...

2018-12-12 00:58:08 2007 2

原创 JVM——内存模型(一):程序计数器

拥有最高权利却又从事着平民百姓的基础工作是一种什么样的体验?对于从事C、C++的程序员来说,这种感觉他们实在是熟悉得不能再熟悉了。在内存管理的领域,不论是对象的生命的开始,还是终结,所有对象的命运都被他们掌握在手里。他们既是掌管最高权利的皇帝,也是从事基础工作的平民。那么Java程序员又是什么样的?对于Java程序员来说,他们的体验在这一方面也许就没有C、C++他们的那么丰富了。为什么...

2018-12-11 22:42:08 1389 5

原创 杂谈——String、StringBuffer、StringBuilder和StringTokenizer有什么区别

字符串是Java中很特殊的一个东西,本帅博主自学习Java以来被这小兔崽子拽入多次坑。而Java语言中有四个类可以对字符或者字符串进行操作,它们分别是Character、String、StringBuffer和StingTokenizer。其中Character用于单个字符操作,String用于字符串操作,属于不可变类,而StringBuffer也是用于字符串操作,不同之处是StringB...

2018-12-06 13:29:31 454

原创 JVM——堆外内存详解

内存是好东西,我们常听堆内存,很多人却不知道还有一个堆外内存。那这两个都是个啥玩意呢?且让本帅博主今天给你好好说道说道。一、堆内内存那什么东西是堆内存呢?我们来看看官方的说法。“Java 虚拟机具有一个堆(Heap),堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。” 也就是说,平常我们老遇见的那位,JVM启动时分配的,就叫作堆内存...

2018-12-04 23:22:29 7922 3

原创 数据库——SQL Server的存储过程

上一篇博客总结了许多数据库常用的SQL语句,今天我们就来看一下SQL的存储过程。简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不仅限于批处理。本篇主要介绍变量的使用,存储过程和存储函数的创建,调用,查看,修改以及删除操作。上一篇博客对这一部分内容也有提到一些,今天我们来具体地看一看。一:存储过程概述SQL Server中的存储过程是使用T_SQL编...

2018-12-04 13:38:02 720

原创 数据库——常用SQL语句总结

数据库是个好东西,最好是系统地学习一下相关的知识,当然,如果实在没有时间,那就学习一下如何操作数据库好了。这里就根据网上的各类总结文章,总结一下常用的SQL语句,给学习SQL的胖友,更是给健忘的自己。一、基础操作1、使用sql对数据库操作连接数据库命令: mysql -u root -p密码 创建数据库:create database dbname; 查看所有的数据库:show d...

2018-12-04 00:56:06 2629

原创 JVM——内存溢出和内存泄漏的区别

今日本帅博主在研究JVM,今天我们就来游走于内存溢出与内存泄漏之间,且看看它们是个啥,且又有啥子区别。1.内存溢出和内存泄漏是啥内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。 内存泄露 memory leak,是指程序在申请内存后,无法释...

2018-12-02 21:57:26 8426 3

原创 杂谈——探秘字节流与字符流

正所谓,一切事情皆有缘由。而程序中的所有数据,自然也有它自己的流。(哈哈,强行押韵最为致命 ヽ(✿゚▽゚)ノ)今天我们要认识的就是字节流和字符流这两个小兔崽子。想要认识它们,我们就得先获得“流”这本秘籍,去看看“流”到底是什么。1.流是什么呢?要知道,在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,...

2018-12-02 19:58:05 4142 1

原创 Java——static详解

在Java语言中,static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:类名.静态方法名(参数列表...)类名.静态变量名到这里有人可能会想问:是不是我在任何地方都可以调用这个变量或者这个方法呢?显然,我们的主角具有很大的独...

2018-12-02 09:31:13 2530 1

原创 多线程——sleep()方法和wait()方法之间的区别

当本帅博主在写了两个小时项目之后,想要休息一会,这时候该怎么办呢?我有两种选择:去睡一会儿或者停止工作做点别的休息休息。那要是把主人公换成一个线程,那么该怎么办呢?好说!让它睡一会或者等一会呗。实现这个的正是今天要说的sleep()方法与wait()方法。sleep()是使线程暂停执行一段时间的方法;wait()也是一种使线程暂停执行的方法,例如,当线程交互时,如果线程对一个同步对...

2018-12-02 09:08:08 1154 3

原创 多线程——多线程同步的三种实现方法

当使用多线程访问同一个资源的时候,非常容易出现线程安全的问题(例如,当多个线程同时对一个数据进行修改的时候,会导致某些线程对数据的修改丢失)。因此,需要采用同步机制来解决这种问题。而Java主要提供了三种实现同步机制的方法。今天我们就来认识一下~~一、synchronized关键字在Java语言中,每个对象都有一个对象锁与之相关联,该锁表明对象在任何时候只允许被一个线程锁拥有,当一个线...

2018-12-01 23:56:31 19230 6

原创 多线程——run()方法与start()方法有什么区别

接触到多线程的客官们都会遇见run()方法与start()方法,这两个都是多线程中举足轻重的大佬。那么这两个大佬的真面目是什么呢,有啥区别吗?这里就要普及一下线程如何启动了。通常,系统通过调用线程类的start()方法来启动一个线程,此时该线程处于就绪状态,而非运行状态,这也就意味着这个县城可以被JVM来调度执行。在调度过程中,JVM会通过调用线程类的run()方法来完成试机的操作...

2018-12-01 22:35:28 3475 2

原创 Java——实现Java多线程的三种方法

Java虚拟机允许应用程序并发地运行多个线程。在Java语言中,多线程的实现一般有以下3种方法,其中前两种是最常用的方法。1.继承Thread类,重写run()方法Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例。并且,启动线程的唯一方法就是通过Thread类的start()方法。start()方法是一个native(本地)方法,它将启动一个新线程,并执...

2018-12-01 21:48:34 478

空空如也

空空如也

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

TA关注的人

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