
JAVA基础知识
文章平均质量分 62
闻道☞
学习是最好的修行
展开
-
hibernate Validation 自定义枚举校验 和 固定值校验证
hibernate Validation 自定义枚举校验 和 固定值校验证转载 2023-09-19 13:29:39 · 187 阅读 · 0 评论 -
深入分析synchronized 原理和锁膨胀过程
上一篇文章介绍了多线程的概念及的使用方法《synchronized 的使用(一)》,但是仅仅会用还是不够的,只有了解其底层实现才能在开发过程中运筹帷幄,所以本篇探讨的实现原理及锁升级 (膨胀) 的过程。转载 2023-08-10 15:10:13 · 130 阅读 · 0 评论 -
Optional 用法
Optional 用法原创 2022-10-26 10:01:16 · 285 阅读 · 0 评论 -
HashMap 为什么线程不安全
前言:我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线程不安全主要体现在什么地方呢,本文将对该问题进行解密。1.jdk1.7中的HashMapHashMap 死循环是一个比较常见、比较经典的问题,在日常的面试中出现的频率比较高,所以接下来咱们通过图解的方式,带大家彻底理解死循环的原因。前置知识死循环问题发生在 JDK 1.7 版本中,造成这个问题主要是由于 HashMap 自身的运行机制,加上并发操作,从而导致了死循环。在 JDK 1.7 中 HashMap 的底层数据实现转载 2022-01-25 15:52:04 · 4305 阅读 · 0 评论 -
HashMap与ConcurrentHashMap面试题
HashMap1.为什么重写Equals还要重写HashCode方法规定:1.两个对象的Hashcode值相等,但是两个对象的内容值不一定相等;—Hash冲突的问题2.两个对象的值Equals比较相等的情况下,则两个对象的Hashcode值一定相等;3.重写Equals不重写HashCode容易导致内存泄漏2.HashMap如何避免内存泄漏问题保证作为HashMap 的Key 的对象是不可变的。也就是使用只读多对象来当作Key如果要使用一个类当作HashMap的key,同时也要修改它原创 2021-09-13 17:53:23 · 761 阅读 · 0 评论 -
linux jar 启动shell 脚本
linux jar 启动shell 脚本run.sh#! /usr/bin/bashusage() { echo "Usage: sh 执行脚本.sh [start|stop|restart|status]" exit 1}is_exist(){ pid=$(ps -ef | grep $APP_NAME | grep 'java -jar' | grep -v ...原创 2020-05-07 10:30:56 · 796 阅读 · 0 评论 -
深究Spring中Bean的生命周期
https://www.cnblogs.com/javazhiyin/p/10905294.html转载 2020-03-23 22:15:18 · 145 阅读 · 0 评论 -
JAVA序列化和反序列化的底层实现原理
一、基本概念1、什么是序列化和反序列化(1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程;(2)**序列化:**对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了Java对象的状态以及相关的描述...转载 2020-05-05 17:38:23 · 3025 阅读 · 1 评论 -
git 如何恢复到指定版本
查看git的提交版本和id 拿到需要恢复的版本号 命令:git log git log退出方法 英文状态下按Q 2. 恢复到指定版本 命令:git reset --hard44f994dd8fc1e10c9ed557824cae50d1586d0cb3 //后面这一大串44f994dd8fc1e10c9ed557824cae50d1586d0cb3就是版本...原创 2020-05-03 17:03:08 · 1047 阅读 · 0 评论 -
idea设置统一编码风格
1、代码模板:Code Templates设置 现在的项目一般都是一个团队共同开发,而每个人都有自己的编码习惯,为了统一格式,项目组在项目开发之前都会制定一系列的规范。俗话说约定优于配置,但是在执行过程中往往发现效果不是很好(主要是指编码规范这一方面)。所以我们不得不采取一些措施来协助我们统一项目开发人员的编码风格。主要包括三个方面:设置Code Templates、Eclipse form...原创 2019-11-21 17:35:49 · 4022 阅读 · 0 评论 -
Java集合框架之Set
1.Set接口概述一个不包含重复元素的collection。Set集合的特点 无序(存储顺序和取出顺序不一致),唯一import java.util.HashSet;import java.util.Set;/* * Collection * |--List * 有序(存储顺序和取出顺序一致),可重复 * |--Set *原创 2017-04-30 18:57:56 · 396 阅读 · 0 评论 -
FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
原文:https://www.cnblogs.com/cdf-opensource-007/p/7106018.htmlfastJson对于json格式字符串的解析主要用到了一下三个类:JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。JSONObject:fastJson提供的json对象。JSONArray:f转载 2017-12-18 18:02:49 · 230 阅读 · 0 评论 -
Java中JSON字符串与java对象的互换
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML、JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好,下面先看下JSON的格式,JSON可以有两种格式,一种是对象格式的,另一种是数组对象,{"name":"JSON","address":"北京市西城区","age":25}//JSON的对象...转载 2017-12-18 18:04:33 · 303 阅读 · 0 评论 -
自定义注解进行权限拦截
什么是注解?用一个词就可以描述注解,那就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。比如,下面这段代码:@Overridepublic String toString() { return "This is String Representation of current object.";}上面的代码中,我重写了toString()方法并使用了@...转载 2017-12-27 14:21:04 · 3665 阅读 · 0 评论 -
Java实例化的几种方式
Java创建有四种方式:(1)用new 语句创建对象,这是最常用的创建对象方法。(2)运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。(3)调用对象的clone()方法(4)运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。1.用new语句...转载 2017-04-21 09:32:23 · 7235 阅读 · 0 评论 -
什么是字符串常量池?
在理解字符串常量前,我们先熟悉一下如何创建一个字符串,在Java中有两种方法可以创建一个字符串对象:使用new运算符。例如:String str = new String("Hello");用字符串常量或者常量表达式。例如:String str="Hello"; //(字符串常量) 或者String str="Hel" + "lo"; //(字符串常量表达式).这些字符串...转载 2017-09-09 19:19:35 · 265 阅读 · 0 评论 -
java获取当月天数,指定年月的天数,指定日期获取对应星期
package com;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;/** * @author Gerrard */public class TestGetWeek { public static void main(String[] args) {转载 2017-08-02 10:22:34 · 3572 阅读 · 0 评论 -
classpath路径
在dos下编译Java程序,就要用到classpath这个概念,尤其是在没有设置环境变量的时候。classpath就是存放.class等编译后文件的路径。javac:如果当前你要编译的java文件中引用了其它的类(比如说:继承),但该引用类的.class文件不在当前目录下,这种情况下就需要在javac命令后面加上-classpath参数,通过使用以下三种类型的方法 来指导编译器在编译的时候去指转载 2017-07-07 16:47:23 · 689 阅读 · 0 评论 -
多重 catch 语句中,异常类型必须子类在前父类在后
多重 catch 语句中,异常类型必须子类在前父类在后,如果你把父类放前面就执行不到后边的了,比如你把Exception放到第一位,那么后面的就不会得到执行了,而且通常子类的信息比父类的要更精准一点,所以通常都是子类放前面从上到下,从前到后把子类放前面,因为子类的异常信息比父类更详细比如catch(FileNotFoundException)catch(IOExcep原创 2017-05-31 13:59:09 · 9666 阅读 · 2 评论 -
java实现http请求和响应的最简单的方式
进行Web开发关键是要了解超文本传输协议(HTTP),该协议用来传输网页、图像以及因特网上在浏览器与服务器间传输的其他类型文件。只要你在浏览器上输入一个URL,最前面的http://就表示使用HTTP来访问指定位置的信息。(大部分浏览器还支持其他一些不同的协议,其中FTP就是一个典型例子。)本文从HTTP协议的结构上初步探讨HTTP协议的工作原理和请求响应格式,并最后通过一个使用Java编转载 2016-12-04 15:57:49 · 15256 阅读 · 1 评论 -
字符流与字节流
/** * */package test;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;/** * @author 字符流 *...原创 2017-04-25 21:26:25 · 327 阅读 · 0 评论 -
JAVA中的参数传递原则
JAVA中的参数传递全是以值传递的总的来说,简单概括Java中进行方法调用的时候传递参数时,遵循值传递的原则:1)基本数据类型,传递的是数据的拷贝 。“值传递”,在这种方式下,被调用对象对新数据的改变不影响源数据的取值,如基本类型的传递//例1void method1(){int x=0;this.change(x);System.out.println(x);}vo...转载 2017-05-07 11:59:25 · 2661 阅读 · 0 评论 -
深入理解String为什么是不可变的类
如上图所示String s1="abcd" ; 等价于 String s1=new String("abcd");两个变量都指向同一个堆内存String s="abcd";s=s.concat("ef");是如下的流程:当一个字符串在堆中被分配内容时,它就是不可变的,任何String的方法都无法改变字符串本身,但它可以返回一个新的字符串对象。如果需要可以修改的字符串对象,可以使用Strin...转载 2017-05-07 11:57:28 · 682 阅读 · 0 评论 -
java反射机制详解
反射:程序运行期间发现更多的类及其属性的机制。Java反射机制主要提供了以下功能: 1.在运行时判断任意一个对象所属的类;2.在运行时构造任意一个类的对象;3.在运行时判断任意一个类所具有的成员变量和方法;4.在运行时调用任意一个对象的方法;生成动态代理。5.反编译:.class-->.java6. 通过反射机制访问java对象的属性,方法,构造方法等;1.透彻分析反射的基础_Class类对...原创 2017-04-22 16:16:12 · 684 阅读 · 0 评论 -
java基础知识学习之代理深入学习(用动态代理实现AOP,FacotryBean)
1.代理的概念与作用程序中的代理能为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理、日志、计算方法的运行时间、事务管理、等等;编写一个与目标类具有相同接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系统功能的代码。(参看下页的原理图)如果采用工厂模式和配置文件的方式进行管理,则不需要修改客户端程序,在配置文件中配置是使用目标类、还是代理类,这样以后...原创 2017-04-23 15:42:52 · 407 阅读 · 0 评论 -
非常有价值的JAVA开源项目
1. JCSprout(Java核心知识库)Github地址: https://github.com/crossoverJie/JCSproutstar: 12k 介绍: 处于萌芽阶段的 Java 核心知识库。2. Java-Guide (Java学习指南)Github地址: https://github.com/Snailclimb/Java-Guide star: 3.1k...原创 2019-08-14 14:49:35 · 1802 阅读 · 0 评论 -
java代码优化:35个技巧
转自:https://blog.youkuaiyun.com/qq_15766297/article/details/70503222代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽...转载 2019-05-22 10:02:25 · 3072 阅读 · 0 评论 -
JVM运行时内存区域及垃圾回收算法(一)
转载:http://youzhixueyuan.com/memory-model-and-recovery-algorithm-mechanism-of-jvm.html1.JVM内存模型JVM内存模型可以分为两个部分,如下图所示,堆和方法区是所有线程共有的,而虚拟机栈,本地方法栈和程序计数器则是线程私有的。 1.1 堆(Heap)详细堆内存是所有线程共有的,可以分为两个部...转载 2018-09-12 16:52:56 · 838 阅读 · 0 评论 -
JAVA异常处理及设计(二)
目录1.异常处理的基本语法1.1 throws 函数声明1.2 try…catch…finally语句块1.3 finally块1.4 异常的链化2.自定义异常3. 设计Java 异常的一些原则3.1 在Finally块中清理资源或者使用try-with-resource语句3.2 指定具体的异常3.3 对异常进行文档说明3.4 抛出异常的时候包含...原创 2018-08-01 14:30:05 · 590 阅读 · 0 评论 -
JVM运行时内存区域(三)
JVM运行时内存区域 根据《Java虚拟机规范》 JVM 将所管理的内存区域划分为 Method Area(方法区),Heap(堆),Program Counter Register(程序计数器), VM Stack(虚拟机栈),Native Method Stack (本地方法栈),其中Method Area和Heap是线程共享的,VM Stack,Native Method Sta...原创 2018-07-27 17:20:18 · 480 阅读 · 0 评论 -
JVM的新生代、老年代、MinorGC、MajorGC(二)
原文:https://www.cnblogs.com/ygj0930/p/6522828.html JVM中的堆,一般分为三大部分:新生代、老年代、永久代: 一:新生代:主要是用来存放新生的对象。一般占据堆的1/3空间。由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。 新生代又分为 Eden区、ServivorFrom、Serviv...转载 2018-03-06 17:11:15 · 469 阅读 · 0 评论 -
WebService 及java网络编程等基础概念(一)
1. 基础概念1.1Webweb的本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思。现广泛译作网络、互联网等技术领域。表现为三种形式,即超文本(hypertext)、超媒体(hypermedia)、超文本传输协议(HTTP)等。 如下图: 1.2 Web服务器Internet上的服务器也称为Web服务器,是一台在Internet上具有独立IP地址的计算机,可以向In...原创 2017-02-11 17:53:35 · 2824 阅读 · 0 评论 -
Socket,NIO,AIO基本概念(一)
多种IO方式的比较:1、BIO(同步阻塞IO)使用ServerSocket绑定IP地址和监听端口,客户端发起连接,通过三次握手建立连接,用socket来进行通信,通过输入输出流的方式来进行同步阻塞的通信每次客户端发起连接请求,都会启动一个线程。线程数量:客户端并发访问数为1:1,由于线程是Java虚拟机中非常宝贵的资源,一旦线程数急剧增加,系统性能会急剧下降,导致线程栈溢出,创建新的线...原创 2017-01-13 10:25:27 · 4031 阅读 · 0 评论 -
集合框架概述
原文:http://www.open-open.com/lib/view/open1474167415464.html数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。Java提供了几个能有效地组织和操作数据的数据结构,这些数据结构通常称为Java集合框架。在平常的学习开发中,灵活熟练地使用这些集合框架,可以很明显地提高我们的开发效率,当然仅仅会用还是转载 2017-03-18 16:07:43 · 804 阅读 · 0 评论 -
Java集合框架之List
1.为什么出现集合类面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。数组和集合类同是容器,有何不同?数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。 对象数组的内存图解集合类的特点集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的原创 2017-04-30 17:51:42 · 378 阅读 · 0 评论 -
equals()与hashCode()
1.equals()和hashCode()区别equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值。hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数。根类Object的hashCode()方法的计算,依赖于对象实例的iD(内存地址),故每个Object对象的hashCode都是唯一的;当然,当对象所对应的类重写了ha...转载 2017-07-09 10:06:31 · 493 阅读 · 0 评论 -
java泛性
为什么会有泛型呢?早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题。package cn.itcast_01;import java.util.ArrayList;import java.util.Iterator;/* * ArrayList存储字符串并遍历 *原创 2017-04-30 18:36:40 · 865 阅读 · 0 评论 -
java多态
Java中多态性的实现什么是多态 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用) 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间...转载 2017-04-24 14:05:21 · 420 阅读 · 0 评论 -
Java类加载器机制
1.类加载器定义1.1类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制.JVM中用来完成上述功能的具体实现就是类加载器.类加载器读取.class字节码文件将其转换成java.lang.Class类的一个实例.每个实例用来表示一个java类...原创 2017-04-23 11:29:15 · 1969 阅读 · 0 评论 -
servlet的介绍和使用
Servlet的应用• Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的web页面。它担当Web浏览器或其他http客户程序发出请求、与http服务器上的数据库或应用程序之间交互的中间层。• 主要内容:Web应用程序开发过程、Servlet的运行原理、Servlet的生命周期等。Java Web应用程序的开发过程•转载 2016-12-04 16:19:55 · 837 阅读 · 0 评论