自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 idea将普通项目转换成maven项目(简单通用)

首先,好久没有更新博客了,对关注过我的人表示抱歉。今天重新开始博客生涯。就先冲一些简单的东西开始吧。其实将不同项目转换成maven或其他什么项目很简单。右键项目,选中“add framework support…”然后就是选中你想创建的项目就行点击“OK”,完成...

2021-04-22 22:14:05 543 3

原创 关于SSM框架设置拦截器和过滤器

我们知道拦截器和过滤器都是在项目中起到拦截过滤请求的功能,所以可能在设置的时候会傻傻分不清。这里我们先来比较它们的区别。过滤器Filter是JavaEE标准,在Servlet的规范中定义的,是Servlet容器支持的,是属于Servlet容器的,依赖Servlet容器;拦截器Interceptor是Spring的组件之一,是属于Spring框架的,依赖于Spring框架,归Spring管理,配置在Spring的文件中,因此能使用Spring里的任何资源和对象,例如Service对象、数据源、事务管理等,

2020-06-20 23:12:03 1649

转载 cookie和session的区别

1.存储位置不同cookie的数据信息存储在客户端上;session的数据信息存储在服务器上。2.存储容量不同单个cookie保存的数据 <= 4kb,一个站点最多保存20个cookie;可以设置cookie时间使cookie过期;session没有上限,但设置了session销毁机制(session-destory())3.存储方式不同cookie只能保管ASCII...

2020-02-10 16:51:48 299

原创 三次握手和四次挥手(快速入门)

三次握手四次挥手

2020-02-05 19:26:27 303

原创 关于线程池的合理配置

要了解线程池配置,不得不知道IO密集和CPU密集。IO密集IO密集就是指该任务存在大量IO操作,这也意味着会存在大量的阻塞,大IO操作不会占用CPU资源的。如果在单线程下执行该任务会浪费大量的CPU资源,所以为了防止CPU资源被浪费,建议使用多线程,这样会使当某个线程阻塞时,其他线程会继续使用CPU资源。推荐:多线程数 = 2 * CPU数(这里的多线程数指的是最大线程数)CPU密集CP...

2019-11-09 21:10:09 161

原创 线程池实现原理及测试实例

我们知道,Java创建线程池的方式有四种:newFiexedThreadPool(int Threads):创建固定数目线程的线程池。newCachedThreadPool():创建一个可缓存的线程池,调用execute 将重用以前构造的线程(如果线程可用)。如果没有可用的线程,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。newSingleThrea...

2019-11-05 20:20:53 204

原创 转发和重定向的区别

转发重定向总结转发是服务器端的跳转,而重定向是浏览器的跳转。注意:使用request域对象进行数据共享时,只能使用转发。

2019-10-24 17:29:22 167

原创 双亲委派机制

前言我们知道,对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在JVM中的唯一性。但有时候,虽然两个类来源于同一个class文件,被同一个虚拟机加载,但只要加载它们的类加载器不同,那么两个类必定不相同。为了解决JVM的唯一性问题,就引入了双亲委派机制双亲委派机制public Class<?> loadClass(String name) throws ClassNo...

2019-09-04 22:09:20 971

原创 TCP和UDP的区别

我们常说;TCP是安全的,UDP是不安全的。为什么会这样呢?这是因为TCP是将信息拆分成多个包进行发送,每发一个信息,客户端就得向服务器发送一个类似于“我已经收到了”的信息,服务器只有接受到了这个反馈信息才能继续发送之后的信息。而UDP是一次性将所有的信息都发送出去,它不管你收没收到,所以说UDP是不安去的,但也以为这个原因,UDP比TCP更快。三次握手四次挥手...

2019-09-01 22:59:48 165

原创 java反射+代理及其在框架中的使用情况

反射(reflect)反射是什么?官方解释是能够分析类能力的程序称为反射,也就是说反射在解析时可以获取类的信息。为什么会有反射这个概念呢?这是因为一个类当你无法获取它的实例,却又想对这个类的实例进行管理时就需要反射来实现。下面我们一步步来对反射进行深入了解:我们知道和反射有关的类主要有5中:Class类(对应类的结构信息)Field类(对应类的域)Method类(对应类成员方法)Con...

2019-08-27 21:01:28 308

原创 java为什么重写equals时都推荐重写hashCode

很多人在重写equals时,都会看到网上一般推荐同时重写hashCode,为什么呢?一开始我以为equals中比较的是hashCode,查了下源码发现并不是这么回事,那么到底为什么会有这么一个推荐呢?我们先了解一下hashCode的值代表的含义:在Object中hashCode代表的就是对象的存储地址,所有的类都是继承于Object,所以所有的类默认的hashCode值都是它的存储地址;而St...

2019-08-26 19:48:42 471

原创 关于spring事务注解

我们知道对于spring项目一般都是在service层进行事务注解的。事务注解:“@Transactional”。不捕获异常情况当你不用捕获异常时,可以直接在类或方法上添加事务注解,它两的区别在于在类上添加注解会对service中的所有方法进行回滚,而在方法上添加注解,只会在改方法上进行回滚。捕获异常情况当你需要捕获异常时,如果还是只添加了注解“@Transactional”,你只会捕获异...

2019-08-17 11:46:09 521

原创 前台checkbox和多选select传值类型区别

最近做项目时,由于我使用的是多选select传值,而朋友却是使用checkbox,最后统一使用select时,他们后台出现了参数类型的异常。为此我特意去看了一下控制台。下面是控制台的内容:select:checkbox:从上面可以看出:select是可以使用String或数组来接收的,而checkbox只能使用list或map来接收。...

2019-08-10 18:22:11 598

原创 Java爬虫解析

最近做了好几个爬虫项目,有一定想法,在这里和大家分享一下:我使用两者爬虫的解析方式:jsoup解析:jsoup是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。这种方式非常简单,可以快速入手,这也是Java爬虫最常见的方法。正则表达式解析:正则表达式通常被用来检索...

2019-07-19 16:08:40 1110

原创 快速理解Java单线程和多线程比较

单线程是一个一个线程顺序执行,一个线程只有当前一个线程执行完之后才能执行。这种方法可以会导致当某个线程等待响应的时间特别长时,下一个线程需要一直等待,而这时CPU处于空闲。多线程是一个时间段一个时间段的执行各个线程,每个线程之间切换执行,这就不存在上面说的某个线程处于等待时CPU却是空闲的情况,但多线程也会多出线程切换产生的性能开销。所以当比较单线程和多线程哪个更快时,就是对上面两者之间开销的...

2019-07-10 16:43:00 2324

原创 史上关于Java字符串和intern()的最详解释(不看后悔)

不可变字符串我们都知道Java中字符串是不可变的,可是还是会有很多小伙伴会对这产生误解,那是对字符串的理解存在一些小缺陷。看下面的代码:String str1="aaa"; str1="bbb";有些小伙伴看到这就会产生疑问了:你明明说字符串是不可变的,为什么上面的变量str1可以不断变化呢?这就需要知道上边的变量str1并不是一个真正意义上的字符串对象本身,它只是字符串的引...

2019-06-22 18:10:17 858 2

原创 内部类详解

内部类的定义和优虐内部类是定义在另一个类中的类。内部类有以下优点:内部类可以访问该类定义所在的作用域中的数据,包括私有的数据。内部类可以对同一个包中的其他类隐藏起来当想定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。借助内部类可以实现多继承。内部类的缺点:其他类可以通过一个类的内部类来访问这个类的私有成员内部类本身不能有static方法,但可以访问外围类的静态域和...

2019-06-20 10:17:27 212

原创 Java重写compareTo方法的原理分析和具体实现

原理分析当我们想排序一个自定义的数组,Java又没有直接提供它们的比较方式时。我们可以通过实现接口Comparable并重写compareTo()方法来添加对自定义数组的比较,然后通过Arrays的sort()方法来将这个数组排序。有些同学就要问了:为什么重写了compareTo()方法就可以通过Arrays.sort()来进行排序了,我们可以通过源码来解释:我们从源码可以看到调用Arr...

2019-06-20 00:18:01 20217 2

转载 Java中Arraylist的add()和remove()方法

虽然ArrayList是可变数组,但是为了提高性能我们在使用中应尽量提前估算容量,add()的时间复杂度为O(1),但是扩容会拉低性能,所以定义时应估算容量,减少扩容次数;remove()方法,每次删除要移动后边数组,所以时间复杂度为O(n),为提高性能,尽可能删除最后的数据。一.Add()源码解析数组扩容这是对ArrayList效率影响比较大的一个因素,虽然ArrayList可以自己扩容,...

2019-06-19 19:42:24 12882

原创 Java保证共享变量“可见性”的机制

Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM(Java虚拟机),JVM执行字节码,最终转化为汇编指令在cpu上执行,Java中所使用的并发机制依赖于JVM的实现和cpu的指令。在多线程中,有时候会遇到这种问题:当一个线程修改了共享变量时,另一个线程不知道这个变量已经被修改(数据修改不是修改原始数据,而是对拷贝的数据进行修改。)了,还是使用以前的变量(存放在一个缓存中),...

2019-06-19 15:04:59 649

原创 并发编程之上下文详解

并发编程的一些概念我们知道并发和并行两者表示的含义是不同的:并发:线程间竞争资源,同时只能执行一个并行:线程间不竞争资源,同时可以执行多个,线程互不干扰。有些小伙伴可以不知道什么时候会用到多线程,我们只要记得一句话:当处于cpu浪费或者是需求需要时,适用多线程上下文切换即使是单核处理器也支持多线程执行代码,cpu通过给每个线程分配cpu时间片来实现这个机制(时间片是cpu分配各个线...

2019-06-19 14:04:43 288

转载 常见的状态码信息

我们在浏览网页时经常会看到一些错误代码,那这些代码是什么意思呢?这也是关于网络知识方面的很常见的面试题。一、HTTP状态码用户试图通过 HTTP 或文件传输协议 (FTP) 访问一台正在运行 Internet 信息服务 (IIS) 的服务器上的内容时,IIS 返回一个表示该请求的状态的数字代码。该状态代码记录在 IIS 日志中,同时也可能在 Web 浏览器或 FTP 客户端显示。状态代码可以指...

2019-06-17 09:51:13 712

原创 Java128陷阱

当我们在比较Java中Interger类型的数据时,有时候会发现两个明明相同的值,最后比较的结果为false,这是为什么呢?这就要了解一下我们常说的“128陷阱”在Java中,Interger是数据类型int的封装类,当Interger类型的数据在(-128~127)中时,Java比较是按照基本数据类型来比较的,也就是我们说的(值类型比较);而当interger表示的数据超过了这个范围,就是按照...

2019-06-14 15:45:01 533

原创 java接口和抽象类

首先,我们先确定接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。接口技术主要用来描述类具有什么功能,而不给出每个功能的具体实现,这和抽象类有点像。接口...

2019-06-09 00:01:09 147

原创 Java参数传递原理和JVM详解

很多人再刚接触Java参数传递的时候,会一脸的问号????,到底参数是怎么传递的呢?我们首先要知道Java虚拟机中运行时数据区的分布情况:虚拟机中各区域的作用程序计数器:    程序计数器的主要作用就是控制程序的运行。每一个线程都需要一个独立的程序计数器,虚拟机通过程序计数器来判断那个线程执行。这个区域占用内存极小,是“线程私有”的内存区域。虚拟机...

2019-06-08 23:22:40 993

原创 史上最易懂的快速排序

根据百度百科的介绍,快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分(分治),其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。具体链接或许上面太过抽象,简而言之,快速排序就是让一个数的左边都小于它,右边都大于它,然后递归的调用这个数的两边;最后每个数都大于它左边的数,小于它...

2019-06-05 01:15:20 238

原创 java类型转换精度丢失

在进行详细讲解之前,先看看数值类型之间的合法转换:    从图中我们可以看出存储占用字节少的类型向存储占用字节多的类型转化不会丢失精度,而存储占用字节多的类型向存储占用字节少的类型(包括占用字节一样的类型)转换都可能发生精度丢失,那么为什么会造成精度丢失呢?看下面例子。直接转换引起的精度丢失就拿int转换float来解释吧:我们知道int是4个字节3...

2019-06-03 20:19:05 2195 1

原创 stringbuilder原理Java

    我们知道String可以可以看作是数组,长度是不可变的(也就是我们常说的不可变字符串)。String实际上是内部封装成数组,但不代表字符串本身就是个数组。也就是说,我们不能像访问数组一样通过首地址+索引的方式来访问字符串,但String类型中封装了一系列的API接口来实现它,像charAt();那么如果我们想将字符串实现想动态数组那样可以动态添加字符...

2019-06-03 15:19:59 553

原创 数值类型乘除的优化位运算原理

我们知道数值类型的位运算要远比乘除运算要快的多,这是因为位运算只需要移动几下位模式就行,时间消耗非常小,而乘除运算就得运算乘数次的加法运算;比如:256<<2 这是将256的二进制向左移动了2位,相当于256*4256*4 256直接乘以4(2^2)两者的结果是一样的,再运算量很小时,可能看不出时间损耗差异,但当运算量特别大时,时间损耗的优虐就会显现出来(运算...

2019-06-03 00:43:55 237

原创 Java匿名对象的性能优势分析

什么是匿名对象?匿名对象就是一个未命名的对象,可以参考:那么匿名对象相比于正常对象有什么优势呢?我们可以从上图发现匿名对象没有栈中的对象名,使用这种语法形式可以在不创建新变量的情况下重新初始化一个对象,这样就可以省略因为创建新变量而产生的存储消耗(存储变量a的消耗),地址管理(变量存储对象的物理地址)等损失...

2019-06-02 23:50:02 390

原创 变化的数据为什么不能压缩

    我在之前已经提到了固定长度的数组为什么可以压缩,可以和之前比较来学习,具体可以参考:数组压缩的原理。现在我们说说为什么变换的数组不能压缩。我们可以通过下面的图来了解一下:从图中我们可以了解到,如果可变数组可以压缩,那么当可变数据发生变化时,可能导致整个数组的改变,这不是我们想要的结果,所以说可变数据是不能压缩的。...

2019-06-02 23:23:20 234

原创 java数组和文件存储压缩原理

数组压缩原理    我们知道基本数据类型的大小是固定的,比如int32位(1b),而一个物理存储单元占4kb,若只存一个int类型的话,会浪费非常大的物理空间。所以就有了压缩技术。当你存储固定大小的变量数组时,操作系统会将全部的数组单元存放到同一个物理存储单元中(当数组的大小没有大于存储空间时),可以通过该存储单元的地址+索引来获取数组中的各个元素,这样就...

2019-06-02 22:48:46 897

原创 Linux命令之mv命令

mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files)。命令格式mv [选项] 源文件或目录 目标文件或目录    1.当mv命令中的第二个参数类型(目标)是文件时,实现**重命名**源文件或目录的功能,记住这里源文件或目录只能有一个,因为如果有多个时,会存在命名冲突的问题 。 &nbs...

2019-05-27 22:56:10 34386

原创 Linux命令之rm命令

rm(remove)删除:该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。删除要谨慎,在删除之前线确定好该删除的文件及路径是否正确,不然可能会后悔莫及。命令格式rm [选项] 文件… 1.rm:删除前会询问受否删除2.rm -f(force):忽略不存在的文件,强行删除,从不给出提示。3.rm -i(interactive):...

2019-05-25 22:34:21 1200

原创 Linux命令之mkdir命令

Linux用mkdir来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。命令格式mkdir [选项] 目录...1.mkdir:创建一个新的空目录2.mkdir -p(parents):目录可以是一个路径,若路径上的某个目录不存在,则自动创建;若存在,则继续往下创建.若不加-p,就写路径,会报错。3.mkdir -m(...

2019-05-21 22:06:33 693

原创 Linux命令之pwd命令

Linux中用 pwd 命令来查看”当前工作目录“的完整路径。也就是说当你想自动当前目录的确切位置时,就需要使用pwd命令符命令格式pwd [选项]1.pwd2.pwd -P(记住p是大写)。它和直接pwd的区别在于:进入链接文件,pwd显示的是链接文件所在的路径而pwd -P 用于显示当前的实际工作路径3.当前目录被删除了,而pwd命令仍然显示那个目录...

2019-05-18 20:45:07 1476

原创 Linux命令之cd命令

cd 命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的。所以学好cd命令非常有用。命令格式cd 【目录名】...

2019-05-17 16:31:12 266

原创 linux命令之ls命令

ls(list的缩写)命令是linux下最常用的命令。 通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等。格式ls [选项] [目录名]参数1.下面是一个最简单的ls命令,列出了/root目录下的所有文件名(不含有隐含文件),也可以写成-G - a 1.-a,-all,这个和上面没有任何参数的ls命令的区...

2019-05-13 21:54:25 1110

原创 javaArrayList

我们知道,数组是静态的,只有当它的大小确定了才能给它初始化赋值,而且这个大小是不能被修改的,所以有时候你刚开始不确定你要输入数据的多少时,简单的数组不好实现(万一你输入的数据多于数组大小时,就会报错:数组溢出),为此java引用了" 数组列表".数组列表格式如下:ArrayList<参数类型> 变量名字= new ArrayList<参数类型可以没有>(容量大小也可以不...

2019-05-05 15:55:00 3490

原创 java中方法调用

java方法调用的过程主要分为2个阶段:(假设要调用x.f(args),隐式参数x是对象C的一个对象):1.编译器首先查看对象的声明类型和方法名。    编译器在编译时首先会一一列举出所有C类中名为f的方法和其父类中访问属性为public且名为f的方法    到这,编译器已经获得了所有可能被调用的候选方法。2....

2019-04-24 21:10:44 675

空空如也

空空如也

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

TA关注的人

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