自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java NIO编程理论基础篇——Java I/O的发展以及linux网络I/O模型

发展简述:Java在jdk1.4之前,Java对I/O的支持并不完善,开发人员会遇到许多问题,例如:没有数据缓冲区,性能较低;没有C或者C++中的Channel概念,通常...

2019-01-01 23:58:45 5455 10

原创 浅谈缓存一致性原则和Java内存模型(JMM)

Java内存模型(JMM)是一个概念模型,底层是计算机的寄存器、缓存内存、主内存和CPU等。 多处理器环境下,共享数据的交互硬件设备之间的关系: JMM: 从以上两张图中,谈一谈以下几个概念:1.缓存一致性协议(MESI):由于每个处理器都含有私有的高速缓存,在对缓存中数据进行更新后,其他处理器中所含有的该共享变量的缓存如果被处理器进行读操作,就会出现错误。有些计算机采用LO...

2018-08-01 04:19:55 6860 1

原创 Navicat for MySQL上执行SQL语句

注:博主的Navicat版本是在Navicat上执行SQL语句的入口很难找…记录一下别看它是个查询的入口,它除了可以执行查询还可以update甚至alter语句也可以在这里执行完了点运行就ok了,运行之后会跳出一个执行结果的控制台。...

2019-11-16 17:34:12 5604 1

原创 Guava Cache快速上手

引入Guava Cache是一个本地缓存解决方案,属于Google Guava开源库的一部分。本地缓存将数据存入内存中,相比对磁盘进行操作甚至网络会快非常多,一般用于解决某些不会频繁变化但数据查询非常频繁,并且愿意消耗一定内存空间的场景。源码github地址:https://github.com/google/guava/tree/master/guava/src/com/google/co...

2019-10-28 14:46:23 375

原创 小总结2018/11/28

现在是2018/11/28晚上23:38不太舒服的一天,除了早上去上机之外几乎是躺了一天,本应该上的舞蹈课也没去。晚上还是会照例刷刷CSDN,今天是粉丝变成三位数的日子,这两天看着这个趋势想到这一天应该快要到来了,但是没想到今天就破了百,emmm谢谢大家,这两天差不多要继续更博了。我也不知道自己分享的东西是不是可以给别人带来或多或少的帮助,自己确实是真实的受益者,以为自己学会了还是得写写博客才...

2018-11-29 23:46:03 308 5

原创 查找不重复无序数组中是否存在两个数字的和为某个值 ---Java语言

今天去某在线教育面试面试官让做的一道题,题目描述如下:给定一个不重复的无序数组arr和一个定值num查找arr中是否有两个数的和等于num有则返回这两个数的下标(可能有多组, 只用返回一组), 没有则返回null很多人一想可能就是两层for循环,我想了很久最后写了双重for循环…【这个代码太easy就不放了】然后面试官说知道哈希吗,由于哈希查找的时间复杂度是O(1),从哈希的角度去考虑,...

2018-09-30 00:28:44 1906 2

原创 非递归实现树的前中后序遍历总结 --- Java语言实现

前言三种遍历的递归写法都很好写,所以总结一下非递归写法。先贴一张图复习一下三种遍历方式就进入正文啦~【注:本文所有代码实现中树的结点定义如下:public class Node { int val; Node left; Node right; Node parent; Node() {} Node(int val) { ...

2018-09-22 17:00:52 3902 3

原创 判断一颗树是不是XX树总结 --- Java语言实现

前言写这篇博客的原因是今天去面试了,结果有段时间没刷题【都是借口…好好刷题吧…】让手撕了一个判断是否是一颗完全二叉树的代码,挣扎了挺久还是没有写完整,所以回来整理一下,继续努力!【注:以下所有代码实现中的结点定义如下:public class Node { int val; Node left; Node right; Node parent; No...

2018-09-20 00:56:31 884 1

原创 深入理解volatile的内存语义,并通过volatile写一个线程安全的单例

前言:对缓存一致性协议以及内存屏障和happens-before原则不太了解的小伙伴建议先百度google维基一下或移步的我的另一篇博客《浅谈缓存一致性原则和Java内存模型(JMM)》之后再看这篇博客更好理解哦 在研究Java并发包之前一直以为volatile关键字只是一个打辅助的,之后发现J.U.C包的底层就是依靠volatile关键字和CAS实现的。那我们现在就来看一看volatile...

2018-08-07 12:49:32 1919 5

原创 Redis持久化(RDB和AOF)

前言为了使Redis在重启后仍能保证数据不丢失,需要将数据从内存中以某种形式持久化到硬盘中。Redis提供了两种持久化的方式:RDB和AOF,这两种持久化方式所产生的存储文件的格式分别是.rdb和.aof。一.RDB1.什么是RDB方式?RDB就是快照方式实现持久化,所谓快照就是将当前的信息全部存储到一个位于安装目录下的dump.rdb文件中,redis默认是开启RDB方式的。...

2018-06-23 21:08:43 331 1

原创 排序算法之堆排思想及代码实现

在介绍堆排序前,我们需要了解一下一种数据结构 —— 顶堆。什么是顶堆?它是一颗完全二叉树,顶堆有大顶堆和小顶堆两种。所谓大顶堆就是在这颗完全二叉树中,任何一颗子树都满足:父结点的值 > 孩子结点的值;小顶堆则相反。 如图: 什么是堆排序(Heapsort)?利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。 ...

2018-03-26 22:47:57 379 1

转载 volatile和乐观锁悲观锁

最近想学习一些并发的内容,感觉是很复杂的一个体系,看到两篇非常好的博客分享一下 《volatile关键字解析》 从并发的引入包括内存模型开始讲,对volatile关键字的原理从汇编结果的角度讲解清晰 《Java并发问题–乐观锁与悲观锁以及乐观锁的一种实现方式-CAS》 清晰的说明了悲观锁与乐观锁的区别,并对乐观锁的原理进行了剖析...

2018-03-19 11:00:20 1561

原创 经典快排思想,以及快排的改进

一.经典快排思想前提条件:给定一个无序数组arr取这个数组最后一个数 num 作为标准,将前面部分的数分为两部分,使得<=num的部分在左边,>num的数在右边;然后将最后一个数和>num部分的第一个数进行交换,就使得原本在数组最后位置的num找到了正确的位置,它的左边都是比它小的以及和它一样的数,右边都是比它大的数回到1,进行递归或迭代,使得所有的数都找到正确的位...

2018-03-02 16:50:40 2787

原创 插入排序、归并排序以及小和问题

一.插入排序插入排序的思想了类似于向一个有序的数组里面插入一个数。最初我们将一个无序的数组0~N-1的0~0部分视作有序,然后取1位置的数与0位置上的数进行比较,比0位置上数小就进行交换,比0位置上数大就不变,从而使0~1部分排成有序,以此类推。也就是说,取有序部分后边的数插入到那个有序的部分,将这个数和它前面的数依次进行比较,比前面的数小就进行交换,比前面的数大就已经找到了这个数的位置,直到...

2018-02-28 21:55:50 1921 2

原创 递归的实质以及递归时间复杂度的计算

说到递归,总会提到这么几个问题: 递归和迭代的区别是什么? 答:迭代式调别人,而递归是调自己 递归能不能改为迭代? 答:可以 那么递归的实质是什么?今天就说一下递归的实质1.递归的实质:压系统栈压到栈里的是当前的所有信息,包括当前跑到多少行,当前的参数和函数内的参数变量,等等 返回后再进行弹栈,然后读取弹栈后栈顶空间的信息,也就是返回到调用的地方。 我们也常常会说,递归可能会...

2018-02-28 21:02:25 1047

原创 对数器的使用

听左神算法课的时候学到了一个非常有用的东西——对数器 对数器是用来测试代码正确性的,我们在找不到合适的oj系统测试自己的代码时,可以自己写一个对数器对代码进行测试设计对数器的一般步骤为:1.有一个你要测的方法a; 2.实现一个绝对正确即使复杂度不好的方法b; 3.实现一个随机样本产生器; 4.实现比对的方法; 5.把方法a和方法b比对很多次来验证方法a是否正确 6.如果有一个样...

2018-02-27 17:21:30 3600

原创 时间复杂度和两种基础排序

一.认识时间复杂度1.常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。2.时间复杂度:它是常数操作数量的指标,常用O表示。计算方法:在常数操作数量的表达式中,只要高阶项,不要低阶项,也不要系数,剩下的部分如果记为f(N),你们时间复杂度为f(N)*O(1),即O(f(N)); 评价一个算法流程的好坏,最先看的指标是时间复杂度,然后...

2018-02-27 15:13:28 600

原创 JDBC基础(二):Statement和Preparement

Statement对象是用来执行SQL语句的 PreparedStatement:预编译的Statement对象,是Statement的子接口。一.性能和代码编写的简洁程度方面它允许数据库预编译SQL语句(这些SQL语句通常有带有参数),以后每次只需改变SQL命令的参数,避免数据库每次都需要编译SQL语句,提高了性能。 e.g. 连接数据库部分//已定义好driver、url

2018-01-29 17:08:19 1849

原创 JDBC基础篇

什么是JDBC?JDBC全称是Java Database Connectivity,即Java数据库连接,它是一种可以执行SQL语句的API。程序通过JDBC API连接到关系数据库,并使用结构化语言(SQL,数据库标准的查询语言)来完成对数据库的查询、更新。 由于JDBC为数据库开发提供了标准的API,所以使用JDBC开发的数据库应用可以跨平台运行,如果使用相同的标准SQL也可以跨数据库使

2018-01-29 13:54:57 617 1

原创 请求转发(requestDispatcher)和请求重定向(sendRedirect)

在进行网页中跳转时有两种方式完成,分别是请求转发和请求重定向。1.请求转发(requestDispatcher)该动作是服务器行为,在web容器中进行的,客户端对于跳转是不知道的,地址栏中显示的URL是不会变化的因为请求转发中是一次请求,相同的request,可以在请求中设置属性对象(setAttribute())来实现数据共享request.getRequestDispatcher

2018-01-28 21:40:57 1601

原创 MySQL语句整理

SQL(Structured Query Language)语句,即结构化查询语言,是操作和检索关系数据库的标准语言。SQL语句一般分为以下几种:DCL(Database Control Language,数据控制语言)语句:主要由GRANT和REVOKE两个关键字完成DDL(Database Definition Language,数据定义语言)语句:主要由CREATE、ALTER、

2018-01-26 16:42:51 513 2

原创 处理机调度与死锁

一.处理机调度的层次及调度算法的目标1.高级调度:作业调度,多用于多道批处理系统,分时系统和实时系统不设置高级调度2.中级调度:内存调度,即内存管理中的对换(swap),以后会专门讲解swap,这篇主要是进程调度及作业调度3.低级调度:进程调度,多用于多处理、分时、实时等多种操作系统4.目标:1)提高资源利用率:主要是提高处理机的利用率 2)公平性:是对于进程来讲的 3)平衡性:是对于系统

2017-12-19 23:24:51 539

原创 进程的描述与控制 进程的状态和转换 三态模型和五态模型

进程的引入由于早期未配置os的系统和单道批处理系统中程序是顺序执行的,然而这种方式浪费资源、系统资源利用率较低,从而出现了多道批处理系统。内存中可以同时装入多个程序,使其共享资源、并发执行。为了能使程序并发执行,并且可以对并发执行的程序加以描述和控制,于是引入了“进程”什么是进程?进程是程序的一次执行; 是一个程序及其数据在处理机上顺序执行时所发生的活动; 是具有独立功能的程序在一个数据集合上运

2017-12-08 10:07:19 23440 5

原创 javaWeb开发之MySQL和Cookie的使用练习中遇到的一些问题及解决

1. 找不到mysql驱动:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver在做数据准备即连接好数据库之后进行过测试,运行了java代码控制台上也显示了所有的要显示的数据库的信息,但是在写好jsp页面之后却出现了找不到驱动的问题,而且做数据准备的时候也将驱动导入了项目 java.lang.ClassNotFoundExceptio

2017-12-02 00:42:14 347

原创 使用eclipse进行JavaEE开发,查看经过Tomcat编译后的字节码文件路径

今天在学习jsp生命周期的时候想查看经过Tomcat编译后的字节码文件的位置发现在Tomcat的路径中只有最初自带的那些工程,在查找资料后发现我们可以在eclipse的工作空间找到这些文件 在你的工作空间路径后加 \.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\jspLifeCircleDe

2017-10-30 14:14:40 1571

原创 Servlet处理一个上传的文件

Servlet中可以使用post请求上传文件一.使用getReader()和getInputStream()<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>title> </head> <body>

2017-09-12 23:26:57 562 1

原创 Java8新增的Lambda表达式

一.Lambda表达式入门Lambda表达式支持将代码块作为方法参数,允许使用更简洁的代码来创建只有一个抽象方法的接口(函数式接口)的实例。 Lambda表达式的语法分为三部分: - 形参列表:形参列表允许省略形参类型,如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。 - 箭头(->):左侧是形参列表,右侧花括号内的内容是代码块。 - 代码块:重写的方法的代码。如果

2017-08-04 21:35:30 382

原创 Java异常之throws和throw 以及异常使用注意的原则

一.使用throws抛出异常如果在当前方法不知道该如何处理该异常时,则可以使用throws对异常进行抛出给调用者处理或者交给JVM。JVM对异常的处理方式是:打印异常的跟踪栈信息并终止程序运行。 throws在使用时应处于方法签名之后使用,可以抛出多种异常并用英文字符逗号’,’隔开 e.g.1 public void throwsTest() throws ExceptionClass1, E

2017-07-21 21:20:20 34287

原创 关于Checked异常和UnChecked异常(即RuntimeException)

在写完上一篇博客之后总感觉还是没有将Checked异常和Runtime异常分清,在查找资料看博客以及一些api文档之后想用简单易懂的语言将这两者做义工简单的阐述。 大家都知道,Exception类下分为RuntimeException(即unchecked异常)和其他异常(即checked异常)。  1. Checked异常,顾名思义,是可检查的异常,即在编译阶段IDE会提示让程序员对该异常进行

2017-07-19 11:19:31 3791

原创 java异常处理之try...catch...finally详解

异常处理机制已经成为判断一门编程语言是否成熟的标准之一,其对代码的健壮性有很大影响。一直以来异常处理使用不是很得心应手,今天对异常进行了较为深入的学习,这篇主要是对try…catch…finally的一个总结。一.java继承体系    Java语言为异常处理提供了丰富的异常类,这些类之间有严格的继承关系。如图: 从图中我们可以看出,所有的类都是继承于Throwable这个父类,java将所有

2017-07-17 22:11:51 3677 1

原创 性能指标、性能测试的一些概念以及性能调优

性能指标:1.响应时间:从开始到完成某项工作所需时间的度量。eg:从客户端发送消息给服务器,服务器处理后并将信息返回给客户端,客户端接收到信息为止。响应时间通常随负载的增加而增加。反应系统处理效率的指标2.吞吐量:反应系统处理能力的指标用到两个throughPut(数据流量)和TPS(translations Per Second)(每秒处理的事物量)3.资源利用率

2017-05-08 22:24:49 2217

原创 编写测试用例及一个例子

一.概念1.什么是测试用例?在测试过程中很重要的一类文档,它是测试工作的核心、是一组在测试时输入输出的标准、是软件需求的具体对照。2.测试用例的作用:检验软件是否满足客户需求、体现一个测试人员的工作量、展现测试用例的设计思路3.测试用例所包含的内容:用例编号、用例名称、测试背景、前置条件、优先级、重要级、测试数据、测试步骤、预期结果、实际结果、备注。4.测试用例的编写流...

2017-04-22 16:18:25 119471 80

原创 软件测试基础知识概论

一.软件1.软件:是能够完成预定功能和性能的可执行的计算机程序,包括是程序正常执行所需的数据,还包括在软件开发过程中记录的开发活动及为了维护和使用软件的一系列文档。2.软件的生存周期:一个软件从定义到开发、使用和维护,直到最终被废弃,所经历的整个漫长的时期。这个时期包括软件定义阶段(问题定义、可行性研究)、软件开发阶段(需求分析、软件设计、程序编写、软件测试)、软件维护阶段(运行维护)

2017-04-20 14:30:24 1676

原创 二叉树的遍历思想及核心代码实现

二叉树在计算机中的存储方式往往线性结构,线性存储分为顺序存储和链式存储,将二叉树按层序编号。顺序结构:按编号的顺序进行存储,对于完全二叉树而言,顺序存储可以反映二叉树的逻辑,但是对于大多数的二叉树则无法反映其逻辑关系,不过可以用 ^ 来代替不存在的结点,但是如果这个树是一个右斜树,就非常浪费存储空间。所以二叉树的存储形式一般为链式存储结构。链式存储:每一个结点都分有一个数据域(data)和...

2016-08-15 21:57:51 938

原创 Java集合总结

集合和数组在存储数据的时候是各有优缺点的,先总结下集合和数组的区别1.数组长度固定,集合长度不固定2.数组只能存储同一类型的元素,集合可以存储不同数据类型(在引入泛型后,可以规定元素的类型相同)3.数组可以存储基本类型也可以存储引用类型,集合只能存储引用类型集合分为两大类,Collection和MapCollection:是超级接口,需要由实现类去实现接口,存储单列元素

2016-08-10 10:16:09 396

原创 计算器核心算法代码实现(Java)

在进行一个表达式的计算时,先将表达式分割成数字和字符串然后利用出入栈将分割后的表达式进行中缀转后缀,再将后缀表达式进行计算得到结果(思想在上一篇写过)现在贴下Java语言的代码实现。(学习Java时间不长所以可能会有很多不足的地方,我会改进也欢迎大神可以给我一些意见和建议~谢谢啦)我将这部分分成三个方法完成功能,并在getResult方法调用(getResult方法被主方法调用) p...

2016-08-06 13:45:36 1584

原创 中缀表达式转后缀表达式并进行计算 原理

在计算一个表达式的时候,可以用数据结构中栈的知识,将我们平常熟悉的中缀表达式转为后缀表达式,再将后缀表达式进行计算得到结果。先说下什么是中缀什么是后缀:中缀表达式:eg: 9+(3-1)*3+10/2,就是我们平常计算时的表达式;后缀表达式:eg: 9 3 1 - 3 * + 10 2 / + ,不包含括号,运算符在两个运算对象后面的表达式。1.中缀表达式转后缀表达式我们先初始化一...

2016-08-04 18:01:10 4644

原创 Date和Calendar类的一些使用

调用Date类计算从出生到现在过去多少天,代码及注释如下:import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Scanner;public class DateYourDays { public static void mai

2016-07-27 21:44:19 572 1

原创 Java中String和StringBuffer、StringBuilder

1.String和StringBuffer、StringBuilder:String是不可改变的,但StingBuffer和StringBuilder是可以改变的。在操作时,String会在常量池中开辟多个新的空间,StingBuffer和StringBuilder直接改变值,大大降低了对空间的浪费。2.在API中这样介绍StringBuffer和StringBuilder:S

2016-07-26 20:51:54 294

原创 Java中的“==”和equals()

1.“==”:A:比较基本类型:比较值     B:比较引用类型:比较对象的地址值2.equals():只能比较引用类型,在Object类中有该方法的定义,其作用是比较两对象的地址。但是比较地址值并没有实际意义,而且Object是所有类的父类,被所有类继承,一般在调用的时候都会重写该方法,比如在String类中,被重写为boolean equals(Object anObject),返回的

2016-07-26 15:09:11 281

空空如也

空空如也

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

TA关注的人

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