![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
一只野生饭卡丘
这个作者很懒,什么都没留下…
展开
-
杂谈——GC日志该怎么看?
正所谓不关注GC的程序员不是一只好的CRUD的程序猿。那怎么看这个GC信息呢?如果你用的是IDEA,在VM options里面加上参数参数即可:-XX:+PrintGCDetailsok,我们来运行一个项目看看。我们拿出一条GC信息来看看。[GC (Allocation Failure) [PSYoungGen: 41826K->1068K(42496K)] 9...原创 2019-08-27 15:01:00 · 6759 阅读 · 0 评论 -
杂谈——编译时多态与运行时多态
说到重载和重写,大家可能都知道。但是如果问你“编译时多态”和“运行时多态”,那么很多人可能会有一些些小小的蒙圈。其实,这也没有啥好蒙圈的,因为: 重载都是编译时多态,而重写表现出两种多态性,当对象引用本类实例时,为编译时多态,否则为运行时多态。 怎么判定是编译时多态还是运行时多态呢?如果在编译时能够确定执行多态方法中的哪一个,称为编译时多态,否则称为运行时多态。 下面我们就从重载和...原创 2018-12-20 10:32:35 · 2604 阅读 · 0 评论 -
杂谈——String、StringBuffer、StringBuilder和StringTokenizer有什么区别
字符串是Java中很特殊的一个东西,本帅博主自学习Java以来被这小兔崽子拽入多次坑。而Java语言中有四个类可以对字符或者字符串进行操作,它们分别是Character、String、StringBuffer和StingTokenizer。其中Character用于单个字符操作,String用于字符串操作,属于不可变类,而StringBuffer也是用于字符串操作,不同之处是StringB...原创 2018-12-06 13:29:31 · 408 阅读 · 0 评论 -
多线程——多线程同步的三种实现方法
当使用多线程访问同一个资源的时候,非常容易出现线程安全的问题(例如,当多个线程同时对一个数据进行修改的时候,会导致某些线程对数据的修改丢失)。因此,需要采用同步机制来解决这种问题。而Java主要提供了三种实现同步机制的方法。今天我们就来认识一下~~一、synchronized关键字在Java语言中,每个对象都有一个对象锁与之相关联,该锁表明对象在任何时候只允许被一个线程锁拥有,当一个线...原创 2018-12-01 23:56:31 · 19097 阅读 · 6 评论 -
多线程——run()方法与start()方法有什么区别
接触到多线程的客官们都会遇见run()方法与start()方法,这两个都是多线程中举足轻重的大佬。那么这两个大佬的真面目是什么呢,有啥区别吗?这里就要普及一下线程如何启动了。通常,系统通过调用线程类的start()方法来启动一个线程,此时该线程处于就绪状态,而非运行状态,这也就意味着这个县城可以被JVM来调度执行。在调度过程中,JVM会通过调用线程类的run()方法来完成试机的操作...原创 2018-12-01 22:35:28 · 3437 阅读 · 2 评论 -
Java——实现Java多线程的三种方法
Java虚拟机允许应用程序并发地运行多个线程。在Java语言中,多线程的实现一般有以下3种方法,其中前两种是最常用的方法。1.继承Thread类,重写run()方法Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例。并且,启动线程的唯一方法就是通过Thread类的start()方法。start()方法是一个native(本地)方法,它将启动一个新线程,并执...原创 2018-12-01 21:48:34 · 452 阅读 · 0 评论 -
Java——类什么时候会进行初始化
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。 类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码。那什么时候对类进行初始化呢?虚拟机规范严格规定了有且只有5种情况必须立即对类进行初始化:第一种:遇到new、getstatic、putstatic、invokestatic这四...原创 2018-11-27 16:48:50 · 2970 阅读 · 0 评论 -
JVM——内存溢出和内存泄漏的区别
今日本帅博主在研究JVM,今天我们就来游走于内存溢出与内存泄漏之间,且看看它们是个啥,且又有啥子区别。1.内存溢出和内存泄漏是啥内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。 内存泄露 memory leak,是指程序在申请内存后,无法释...原创 2018-12-02 21:57:26 · 8365 阅读 · 3 评论 -
杂谈——探秘字节流与字符流
正所谓,一切事情皆有缘由。而程序中的所有数据,自然也有它自己的流。(哈哈,强行押韵最为致命 ヽ(✿゚▽゚)ノ)今天我们要认识的就是字节流和字符流这两个小兔崽子。想要认识它们,我们就得先获得“流”这本秘籍,去看看“流”到底是什么。1.流是什么呢?要知道,在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,...原创 2018-12-02 19:58:05 · 4076 阅读 · 1 评论 -
杂谈——Java中同步与异步有什么区别
大家在使用手机的时候,比如小米手机,自带云空间,可以将数据同步到云空间上;很多文档app也有同步的功能。而我们牛气冲冲的Java自然也有同步与异步,不过Java中的同步与异步似乎与我们平常认知中的同步异步有些区别。到底是什么呢?今天我们就来了解一下Java中同步与异步有什么区别。1.同步在多线程的环境中,经常会碰到数据的共享问题,即当多个线程需要访问同一个资源时,它们需要以某种顺序...原创 2018-11-30 00:16:27 · 2765 阅读 · 0 评论 -
杂谈——运行时异常和普通异常有什么区别
说到异常,大家都熟悉,只要程序出错了,那么肯定会说:“哎呀,我的程序出错啦~它抛出异常啦”。但单单以“异常”的名称来称呼它们,未免也太粗糙了。我们毕竟是一个精致的程序员,当然得知道他们到底都有哪些种类啦。这就好比一个优质的男朋友(比如本帅博主)必须能够精准地区分女朋友的口红色号一般。那Java到底有哪些异常呢?其实也不多,Java提供了两种错误的异常类,分别是Error和Excepti...原创 2018-12-21 16:11:35 · 5816 阅读 · 2 评论 -
杂谈——Integer的缓存机制
这个问题很多人其实都知道——如果值在-128到127之间,Integer对象的引用地址是相等的。身边很多朋友都说是字面量在常量池中缓存的原因。其实并不是的,这是Integer的缓存机制:在Integer类中,定义了一个私有的静态类IntegerCache,这个类是用来支持Integer缓存的,它的作用是把一部分Integer类型的对象在Integer类加载的时候一起创建出来并放在一个cac...原创 2018-12-27 16:40:37 · 1950 阅读 · 0 评论 -
Java——深入了解Java中的迭代器
Java集合框架的集合类,我们有时候称之为容器。容器的种类有很多种,比如ArrayList、LinkedList、HashSet...,每种容器都有自己的特点,ArrayList底层维护的是一个数组;LinkedList是链表结构的;HashSet依赖的是哈希表,每种容器都有自己特有的数据结构。因为容器的内部结构不同,很多时候可能不知道该怎样去遍历一个容器中的元素。所以为了使对容器内元素的操作...原创 2018-12-22 09:21:07 · 2106 阅读 · 1 评论 -
杂谈——记一次代码的优化历程
之前有一个需求,有一批项目数据,需要对项目数据的标题按照一定进行清洗,清洗完之后去除重复标题的数据,得到最终结果。已知项目数据一共有四种状态,分别为公告,预告,结果与变更。在这个需求里,公告、预告为同一规则,结果与变更为另一规则,规则关键词如下:具体规则如下:由此可知,我需要去除目标数据中所有规则关键词的组合词。由于当时需求比较紧急,因此便马上根据规则写了一套很粗糙的程序...原创 2019-07-10 15:41:36 · 6328 阅读 · 0 评论 -
异常——map.containsKey(n)出现NullPointerException异常
刚才遇到这个异常,记录一下。我将一个map放在for循环里面存储东西,里面还嵌套了一些别的逻辑,在每次循环的最后,将map置为null。在运行的时候,遇到了空指针异常。后来经过排查,发现是 因为Map没有实例化,直接复制null了。把复制null的语句去掉之后就没有问题了,所以要记得初始化。...原创 2019-05-28 10:20:26 · 2678 阅读 · 0 评论 -
笔记——BigDecimal存储到数据库时decimal小数自动变为0
今天做支付模块,处理金额的时候,发现存储的bigDecimal("0.1"),存储到数据库中变为了0.。如下图:检查了一下日志,发现存储的数据的确没有问题,因此将问题的根源确定到了数据库的头上。后来才发现,在建表的时候,将小数点默认为0了,如下图。这真是太呆瓜了。果断改了为了4。现在就没有问题了。所以在使用decimal类型的数据的时候,一定要记得精度的设...原创 2019-03-22 21:25:45 · 9657 阅读 · 0 评论 -
分享——POI-3.8-3.9-3.10 三个版本全套jar包
自己拿咯~链接: https://pan.baidu.com/s/1Jwnw_pGHOx4CIOoSeHoQ5A 提取码: frmi原创 2019-03-09 11:59:38 · 10355 阅读 · 3 评论 -
Session惹得祸——前台修改数据后不能回显,必须要重新登录才可显示修改后的数据
今天做项目,做个人中心的信息修改功能的时候遇到一个bug:每一次成功修改数据后数据库中的数据被成功修改,但是该页面不会回显修改后的数据,一直刷新甚至清除浏览器缓存也没有用。只有在重新登录系统的时候,才能看见修改后的数据。后来发现了原因:我前台的数据有部分是用session获取到的,而我更新数据之后,并没有更新session,所以session还是原来的session,因此数据不会变动,在每次修...原创 2019-02-27 21:11:12 · 1964 阅读 · 5 评论 -
杂谈——如何合并两个有序链表(时间复杂度为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 · 5788 阅读 · 1 评论 -
杂谈——Mybatis一二级缓存简单详解
先说缓存,合理使用缓存是优化中最常见。将从数据库中查询出来的数据放入缓存(内存)中,每次查询数据时,先判断缓存区中是否存在数据,如果存在,就从缓存区中获取数据,如果不存在,就从数据库中获取数据,将数据存放到缓存区中。这样的话,下次访问该数据的时候使就不必从数据库查询,而是直接从缓存中读取,避免频繁操作数据库,提高数据访问效率,减轻数据库的压力,同时提高系统性能。咱们今天就来认识一下Mybati...原创 2018-12-23 10:56:40 · 4165 阅读 · 0 评论 -
杂谈——Java线程池详解
在一个应用程序中,我们无可避免地需要多次使用线程,也就意味着,我们需要多次创建并销毁线程。而创建并销毁线程的过程势必会消耗内存。举个例子,假设我们要去爬三百主流媒体网站,每天要抓一次数据,平均每次开销50毫秒,处理开销2毫秒,则可以开二十五个线程,假设每个网站有十个请求,那么三百个网站就有3000个请求。从上面我们可以知道,CPU等待时间/CPU执行时间=25:1,这样的开销太大了,而这二...原创 2018-12-23 00:47:34 · 4647 阅读 · 0 评论 -
杂谈——Java中throws和throw的区别
之前本帅博主写过一篇关于try-catch和finally的文章,即try-catch与finally语句块中使用return的注意事项以及相关引申,这篇文章讲述了一些它们之间的注意事项。这try-catch语句块中,还有很重要的一点,就是异常。对于异常,我们从来都不陌生。可以说,自从我们第一次写代码到现在的第n次写代码,异常从未离我们远去,甚至随着我们学习面的逐渐旷阔而变得越发的频繁与复...原创 2018-12-17 20:34:48 · 1902 阅读 · 0 评论 -
Java——try-catch与finally语句块中使用return的注意事项以及相关引申
女朋友:“你知道你错哪了吗?”看到这个问题,你心里是不是“咯噔”一下,脑子里飞速回忆着自己哪里做错了? 是不是感觉自己要凉了?在这里,我可以郑重地告诉你,你可能真的要凉了,因为你想不起来自己哪里错了。如果你想要有有错立马知道的本事,建议大家给自己植入一段try-catch块。作为一名程序猿,try-catch绝对是自己忠心的伙伴,我们不必抓耳挠腮去挨个寻错,只要你犯错了,立马就...原创 2018-11-29 23:47:40 · 3020 阅读 · 0 评论 -
杂谈——抽象类(abstract class)与接口(interface)有什么异同
初学Java的小伙伴们在学习抽象类和接口的时候有很大的可能会弄得一头雾水,毕竟这两玩意好像有很多相似的地方。今天我们就一起来梳理梳理抽象类与接口之间有什么异同。1.抽象类与接口如果一个类中包含抽象方法,那么这个类就是抽象类。在Java语言中,可以通过把类或者类中的某些方法声明为abstract(abstract只能用来修饰类或者方法,不能用来修饰属性)来表示一个类是抽象类。...原创 2018-11-29 23:37:53 · 424 阅读 · 0 评论 -
杂谈——break、continue以及return有什么区别?
没有人喜欢一成不变,也没有人喜欢陷入循环之中。那么该如何打破循环呢?Java有三个大招:break、continue和return。今天我们就来认识一下这三个大招的作用以及它们之间的区别。1.breakbreak用于直接强行跳出当前循环,不再执行剩余代码。当循环中遇到break语句时,忽略循环体重任何其他语句和循环条件测试,程序控制在循环体后面的语句重新开始,所以,当多层循环嵌...原创 2018-11-29 22:46:27 · 366 阅读 · 0 评论 -
Java——final、static、static final修饰的字段赋值的区别
static修饰的字段在类加载过程中的准备阶段被初始化为0或null等默认值,而后在初始化阶段(触发类构造器<clinit>)才会被赋予代码中设定的值,如果没有设定值,那么它的值就为默认值。final修饰的字段在运行时被初始化(可以直接赋值,也可以在实例构造器中赋值),一旦赋值便不可更改;static final修饰的字段在Javac时生成ConstantValue属性,在类加...原创 2018-10-04 21:12:30 · 1000 阅读 · 0 评论 -
(Java)如何判断字符串是否相等以及比较字符串的大小
在Java中,经常需要比较两个字符串,这里总结一下。 1.判断字符串是否相等在Java中,可以使用“==”来进行判断字符串是否相等。示例:String s1="Hello";String s2="Hello";//输出返回值System.out.println(s1==s2);这时,我们如果运行一下,会发现会输出“true”。换一种赋值方式再试试。...原创 2018-09-27 13:23:04 · 16223 阅读 · 0 评论 -
数据结构——数组和链表的增删改查
今天整理了一边Java中数组和链表的优缺点,其实它俩的差别在“增、删、改、查”上就能够体现出来。1.数组数组又分为有序数组和无序数组(1)有序数组增:对于插入操作,有序数组的时间复杂度是O(n),因为他需要把比插入数大的都往后移.删:对于删除操作,需要先找到该数,这一过程的时间复杂度为O(logN),其次再删除该数,该数后面的数全部都往前移。因此总的过程的时间复杂度为O(N)级...原创 2018-09-27 11:56:02 · 1662 阅读 · 0 评论 -
Java和C++数组在内存中存储的区别
Java和C++在内存分配上有一些区别,尤其是数组的创建方面,这里来梳理一下这两者的区别。1.JAVA 数组注:必须规定数组的长度,且数组长度终生不变,数组必须先初始化才可以使用,初始化的时候会分配内存;动态初始化和静态初始化不能同时存在。1.1创建一维数组动态初始化:只指定数组的长度,具体数据不指定;此时数组元素的值是缺省值.语法规则:数据类型[] 数组名 = new 数据类...原创 2018-10-04 14:09:26 · 1006 阅读 · 1 评论 -
Java——关于Java的常见误解
1.Java是HTML的扩展?Java是一种程序设计语言;HTML是一种描述网页结构的方式。除了用于在网页上防止Java applet的HTML扩展之外,两者没有任何共同之处。2.Java是一种非常容易学习的程序设计语言?像Java这种功能强大的语言都不太容易学习。Java学习者必须将编写玩具式程序的轻松和开发实际项目的艰难区分开来。3.JavaScript是Java的简易版?...原创 2018-10-04 12:40:15 · 317 阅读 · 0 评论 -
Java——set()和get()的作用
我们先来看看set和get这两个词的表面意思,set是设置的意思,而get是获取的意思,顾名思义,这两个方法是对数据进行设置和获取用的。而且,在类中使用set和get方法时,都是在set和get后面跟上一些特定的词来形成特定意思的方法名,比如setage()和getage(),表示设置年龄和获取年龄。至于为什么会有set方法和get方法,主要是JAVA面向对象编程中的封装性和安全性。封装...原创 2018-10-04 11:39:36 · 2962 阅读 · 0 评论 -
模拟中奖(一):随机数的生成——random的运用
彩票对于人们来说一直都是一个“梦想”,人们都想着能够一夜暴富,毫无疑问,彩票是最美好的假想。那么,你想中彩票吗?吃瓜群众:想!快拿钱砸我吧!程序员:没兴趣,天底下没有真正的随机事件。哈哈,对于普罗大众来说,中彩票就好似一件随机的事情,既然是随机的,那么为什么中彩票的人不能是我呢?梦想还是要有的,万一实现了呢?但是对于程序员来说,世界上没有真正的随机事件,也没有真正的随机数。随机...原创 2018-09-26 23:19:43 · 3858 阅读 · 0 评论 -
模拟彩票(二)——众数抽奖算法
上一期讲了如何用random产生随机数来产生中奖号码,这次讲一个如何抽取幸运号码作为中奖号码。问题描述如下:某平台进行抽奖活动,需要抽出一位幸运观众,抽取方式为ID号码。用户ID一共七位,该中奖ID的每一位数皆为该位的众数。如果有两个众数,则取小。下面是实现代码:package com.atguigu.java;public class HelloWorld { priva...原创 2018-10-02 00:15:47 · 1612 阅读 · 0 评论 -
冒泡排序的优化(Java)
冒泡排序的中心思想是:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。算法的核心在于每次通过两两比较交换位置,选出剩余无序序列里最大(小)的数据元素放到队尾。冒泡排序算法的运作如下:1.比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。2.对每一对...原创 2018-09-26 09:53:03 · 502 阅读 · 0 评论 -
算法——输出数组最大子序列和
今天看算法,看到一道题,题目描述如下:给一个数组,找出该数组的最大子序列和。例如:数组{0,-1,-9,8,1,-8,10,-1},最大子序列为8+1-8+10=11,需要输出11。由于很久没有写算法,遇见这个问题想了很久,大约花了一个半小时才想出来这个问题。先贴一下代码:package com.atguigu.java;public class HelloWorld { ...原创 2018-09-29 00:55:34 · 1084 阅读 · 0 评论 -
Java——HttpServletRequest的getParameter()读取ajax请求
对于httprequrest的request.getParameter()的作用,其实就是读取请求的内容。这个方法基本上都是被用来读取和html中form表单的name与action属性,大致的内容如下:1.读取name属性<form action="" ><input name="name" value="Searchin"/><input typ...原创 2018-10-19 01:00:29 · 3560 阅读 · 0 评论 -
Java——static静态块的执行顺序
在学习类的加载顺序的时候,static块,即静态块的执行顺序是一个重点。在面试的时候这一块也是重点区域,所以需要深入地了解静态块。今天就来认识一下static块到底有什么样的特性,使得众多公司面试时都绕不开这一关。我们先来了解一下静态块是什么:static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会...原创 2018-10-19 22:40:49 · 4150 阅读 · 5 评论 -
杂谈——字符串创建和存储的机制及相关的例子
在Java语言中,字符串起着非常重要的作用,字符串的声明与初始化主要有如下两种情况:1.String s1=“abc”对于String s1=“abc”与String s2=“abc”语句,在JVM中存在这一个字符串常量池(其中保存着很多String对象,并且可以被共享使用,s1和s2引用的是同一个常量池中的对象。注:运行时常量池(包含字符串常量池),在jdk1.7之前存放在方法区中,...原创 2018-11-29 22:10:42 · 1858 阅读 · 0 评论 -
多线程——sleep()方法和wait()方法之间的区别
当本帅博主在写了两个小时项目之后,想要休息一会,这时候该怎么办呢?我有两种选择:去睡一会儿或者停止工作做点别的休息休息。那要是把主人公换成一个线程,那么该怎么办呢?好说!让它睡一会或者等一会呗。实现这个的正是今天要说的sleep()方法与wait()方法。sleep()是使线程暂停执行一段时间的方法;wait()也是一种使线程暂停执行的方法,例如,当线程交互时,如果线程对一个同步对...原创 2018-12-02 09:08:08 · 1120 阅读 · 3 评论 -
Java——深入理解Class对象(二):Class对象的加载及其获取方式
上一篇博客Java——深入理解Class对象(一)带大家简单认识了一下Java中Class对象。现在带大家了解一下Class对象的加载及其获取方式。1.Class对象的加载在Java——深入理解Class对象(一)我们已提到过,Class对象是由JVM加载的,那它必然不会是胡乱加载的,肯定有加载时机。实际上,所有的类都是在对其第一次使用时动态加载到JVM中的。当程序创建第一个对类的...原创 2018-11-29 00:29:37 · 835 阅读 · 0 评论