自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java中的变量和常量

1、变量(variable)变量,顾名思义,就是变化的量。我们可以通过变量来操作存储空间中的数据,变量就是指代这个存储空间,一旦你定义了一个一个变量,那么空间的位置就确定了,虽然空间位置是确定的,但是里面放什么值是不确定的,不好理解的话可以这样想一下:一个大储物箱里有很多小格子来存放东西,在存放东西的时候就可以在这些格子贴一个小标签,这样贴上标签后,我们就知道哪个格子放什么。但是我们也只是知道格子里放的是什么,不知道具体放的是什么,比如A格子中我放鞋子,你是不知道你放的是什么牌子的鞋子。那个标签就相当

2021-02-24 22:18:37 56

原创 彻底吃透Mybatis 基本应用

1. 框架简介1.1 三层架构软件开发常用的架构是三层架构,之所以流行是因为有着清晰的任务划分。一般包括以下三层:a. 持久层:主要完成与数据库相关的操作,即对数据库的增删改查。因为数据库访问的对象一般称为Data Access Object(简称DAO),所以有人把持久层叫做DAO 层。//加入Java开发交流君样:756584822一起吹水聊天b. 业务层:主要根据功能需求完成业务逻辑的定义和实现。因为它主要是为上层提供服务的,所以有人把业务层叫做Service层或Business

2021-02-23 21:55:02 93

原创 Java秘技之日期与时间API用法详解

一、时间和日期在系统开发中,日期与时间作为重要的业务因素,起到十分关键的作用,例如同一个时间节点下的数据生成,基于时间范围的各种数据统计和分析,集群节点统一时间避免超时等。在时间和日期中有几个关键概念:日期:通常年月日的组合表示当前日期。时间:通常时分秒的组合表示当前时间。时区:世界各国家与地区经度不同,划分24个标准时区,相邻时区的时间相差一个小时。时间戳:从UTC时间的1970-1-1 00:00:00起到现在的总秒数。日期和时间的用法在系统中通常是获取时间和一些常见的计算与格式转换处理,

2021-02-23 21:30:50 92

原创 学习JVM必不可少的知识

1.Java垃圾回收机制对象被判断为垃圾的标准:没有被其他对象引用2.判断对象是否可被回收(1)引用计数算法  判断对象的引用数量通过判断对象的引用数量来决定对象是否可以被回收每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1任何引用计数为0的对象实例可以被当作垃圾回收优点:执行效率高,程序执行受影响较小缺点:无法检测出循坏引用的情况,导致内存泄露(2)可达性分析算法(引自离线数学的图论)通过判断对象的引用链是否可达来决定对象是否可以被回收可不可达判断:如果从一个对象没

2021-02-21 22:25:17 127

原创 深入解析Java ThreadPoolExecutor

ThreadPoolExecutor是Java语言对于线程池的实现。池化技术是一种复用资源,减少开销的技术。线程是操作系统的资源,线程的创建与调度由操作系统负责,线程的创建与调度都要耗费大量的资源,其中线程创建需要占用一定的内存,而线程的调度需要不断的切换线程上下文造成一定的开销。同时线程执行完毕之后就会被操作系统回收,这样在高并发情况下就会造成系统频繁创建线程。为此线程池技术为了解决上述问题,使线程在使用完毕后不回收而是重复利用。如果线程能够复用,那么我们就可以使用固定数量的线程来解决并发问题,这样一来

2021-02-21 22:23:05 102

原创 Java秘术之JVM内存管理

要知道JVM内存时如何管理的,我们需要先了解以下JVM整体的架构体系:下面进行分别的介绍:类加载子系统: JVM把类的描述数据加载到内存,并对其进行校验、解析和初始化,最后形成可以被JVM直接使用的java类型//加入Java开发交流君样:756584822一起吹水聊天运行时数据区:Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。

2021-02-19 22:25:53 80

原创 Java秘技之JVM 基础篇

1. 什么是JVM:Java 虚拟机, 是class文件的运行载体。JVM可以实现一次编译,到处运行。JVM不是只供Java专用的,JVM是解析class文件的,只要语言编译成class文件就能被JVM解析。2. JVM的架构图3. JVM的运行模式JVM有两种运行模式:Server模式和Client模式两种模式的区别:Client模式启动速度快, Server模式启动较慢进入运行稳定期后,Server模式的程序运行速度要比Client快很多。Server模式启动的JVM是重

2021-02-19 22:19:57 120

原创 Java容器系列总结

为什么要使用集合当我们需要保存一组类型相同的数据的时候,我们应该是用一个容器来保存,这个容器就是数组,但是,使用数组存储对象具有一定的弊端, 因为我们在实际开发中,存储的数据的类型是多种多样的,于是,就出现了“集合”,集合同样也是用来存储多个数据的。数组的缺点是一旦声明之后,长度就不可变了;同时,声明数组时的数据类型也决定了该数组存储的数据的类型;而且,数组存储的数据是有序的、可重复的,特点单一。 但是集合提高了数据存储的灵活性,Java 集合不仅可以用来存储不同类型不同数量的对象,还可以保存具有映射关

2021-02-18 22:59:08 88

原创 Java中的ArrayList

一、概述ArrayList底层使用的是数组。是List的可变数组实现,这里的可变是针对List而言,而不是底层数组。数组有自身的特点,不变性,一旦数组被初始化,那么其长度就固定了,不可被改变。这就导致了ArrayList中的一个重要特性:扩容。二、源码解析2.1 声明public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneab

2021-02-18 22:47:42 216 1

原创 优雅的讲解JAVA操作数据库方式与设计模式应用

那么在讲解循环之前呢我们先来了解一下什么是循环 生活中的例子 车子的轮胎他就是一直在循环 马拉松跑到也是在循环 因为运动员不停的一圈一圈在跑这也是一个循环那么我们为什么要学习循环呢?下面看一个小问题 张浩Java考试成绩未达到自己的目标。为了表明自己勤奋学习的决心,他决定在程序中写一百遍“好好学习,天天向上!”打印出来,效果如图所示可以看到张浩打印了100遍System.out.print(“好好学习天天向上”);写了好久非常麻烦如如果我们写一万遍你 那么有没有更简单的方法实现这个复杂的问题呢

2021-02-18 22:45:23 77

原创 JAVA 之 static

在Java语言中,static表示“静态”的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块。static的主要作用在于创建独立于具体对象的域变量或者方法。本文主要来去讲解一下static的来龙去脉。static要解决什么问题?我们知道,当我们通过new关键字去创建对象的时候,那么数据的存储空间才会被分配,类中的成员方法才能被对象所使用。但是呢有两种特殊的情况:1、我们通过new关键字创建的对象共享同一个资源,而不是说每个对象都拥有自己的数据,或者说根本就不需要去创建对象,这个资源

2021-02-07 21:24:44 60

转载 java:Collection、泛型

第一章 Collection集合1.1 集合概述在前面基础班我们已经学习过并使用过集合ArrayList ,那么集合到底是什么呢?集合:集合是java中提供的一种容器,可以用来存储多个数据。集合和数组既然都是容器,它们有啥区别呢?* 数组的长度是固定的。集合的长度是可变的。    * 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。1.2 集合框架JAVASE提供了满足各种需求的API,在使用

2021-02-07 21:12:29 66

转载 Java操作BLOB和CLOB

BLOBBLOB全称为二进制大型对象(Binary Large Object)。它用于存储数据库中的大型二进制对象。可存储的最大大小为4G字节,通常像图片、文件、音乐等信息就用BLOB字段来存储。CLOBCLOB全称为字符大型对象(Character Large Object)。它与LONG数据类型类似,只不过CLOB用于存储数据库中的大型单字节字符数据块,不支持宽度不等的字符集。可存储的最大大小为4G字节,文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便。Ja

2021-02-07 21:10:01 292

原创 Java高级特性之反射

概念定义什么是反射?JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法,这种动态获取、调用对象方法的功能称为java语言的反射机制。反射是通过Class对象(字节码文件),来知道某个类的所有属性和方法。也就是说通过反射我们可以获取构造器,对象,属性,方法。执行流程获取Class对象的方式Class student = Student.class; //方式一Class<?> forName = Class.

2021-02-06 22:33:26 63

原创 Java异常到底是什么?它的核心原理到底是什么?

什么是异常正如文档开头所说,世界上并没有完美的程序,程序在运行中可能会存在着异常状态,这种异常状态,可能是异常(Exception),也可能是错误(Error),一个健壮性的程序就要考虑程序可能存在的异常状态,并对其进行处理。Throwable类是Java中所有错误和异常的超类,位于java.lang包,从JDK1.0开始引入。Throwable有两个子类Exception(Java中所有异常类的父类)和Error(Java中所有错误类的父类)。错误往往是程序运行时发生,程序员不可控制,对程序造成不可

2021-02-04 22:36:43 133

转载 深入解析Java--变量

变量使用变量是为了解决问题,解决内存中的数据读取比较麻烦这一问题,因为计算机读取内存中的数据时,是通过内存地址地址来读取,内存地址很难记住,16 进制的数据,随机分配。变量就是给内存地址取了一个别名,并且这个别名是可以由开发者自定义的。变量是一个概念,存储在内存中,方便存取内存中的数据,可以自定义变量名,就不用去记系统分配的16进制数据了。是程序中存储数据的基本单元。变量三要素:1、数据类型2、变量名3、变量值如何使用变量1、声明变量的数据类型和变量名。计算机会根据数据类型在内存中开

2021-02-03 22:13:17 112 1

转载 Java 使用Cipher类实现加密

~~一、先看一个简单加密,解密实现~~1.1 加密/** * content: 加密内容 * slatKey: 加密的盐,16位字符串 * vectorKey: 加密的向量,16位字符串 */public String encrypt(String content, String slatKey, String vectorKey) throws Exception { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Paddin

2021-02-02 22:37:39 310

原创 SparkCore的调优之开发调优

开发调优调优概述Spark性能优化的第一步,就是要在开发Spark作业的过程中注意和应用一些性能优化的基本原则。开发调优,就是要让大家了解以下一些Spark基本开发原则,包括:RDD lineage设计、算子的合理使用、特殊操作的优化等。在开发过程中,时时刻刻都应该注意以上原则,并将这些原则根据具体的业务以及实际的应用场景,灵活地运用到自己的Spark作业中。原则一:避免创建重复的RDD通常来说,我们在开发一个Spark作业时,首先是基于某个数据源(比如Hive表或HDFS文件)创建一个初始

2021-01-31 21:35:15 95

原创 阿里二面之如何在面试中介绍自己的项目经验

1 用简历争取到更多的面试机会注意点1:阅读职位介绍上的技能要求年限,在简历上的醒目位置标明你有足量的相关技术项目经验。比如某职位需要有Spring boot 3年经验,又如某职位需要有2年大数据开发经验,而你恰好有了,就在简历第一页个人信息介绍下直接写明。万一假设你缺乏一些,比如要求是有2年大数据,而你就只有一年,你就回想下,你在读书阶段,有没有在外面做过兼职,有没有帮老师一起做过项目,有的话别客气,把这部分的技术年限也加上。注意点2:再仔细阅读职位介绍上要求的技术,也列在第一页的醒目位置。比如

2021-01-31 21:33:30 791

原创 一个资深程序员对Java泛型的看法

Q:什么是泛型?Java泛型本质:参数化类型从字面意思就可以看出,就是把“类型变成了参数”,如String类型、Integer类型等都作为参数。=================================================================泛型-承担“保安”的角色Q:泛型如何使用?1.List mylist1=new ArrayList();//未使用泛型;2.List mylist2=new ArrayList();//参数化类型;集合类容纳的对象都是

2021-01-30 21:33:38 124

原创 Java面向对象之异常(throw与throws)

一、基础概念1、throw和throws的区别:位置不同:throws用在函数上,后面跟的是异常类,可以跟多个。throw用在函数内,后面跟的是异常对象。功能不同:throws用来声明异常,让调用者知道该功能有可能出现的问题,并由调用者给出预先的处理方式。throw抛出具体问题的对象。语句执行到throw功能就结束了,跳转到调用者。并将具体的问题对象抛给调用者。注意:throw语句独立存在,下面不要定义其他语句。因为执行不到throw下面的语句。2、异常体系的特点: 类以及对象都具备可

2021-01-29 23:07:21 364

转载 Java中实现多线程关键词整理

Java``Runable,Callable,Future,FutureTask,ExecutorService,Excetor,Excutors,ThreadPoolExcetor在这里对这些关键词,以及它们的用法做一个总结。首先将它们分个类:Runable,CallableFuture,FutureTaskExecutorService,Executor,Excutors,ThreadPoolExcetor关于Ranable和Callable首先Java中创建线程的方法有三种:继承T.

2021-01-26 22:24:00 197

转载 Java数组转List的三种方式及对比

转载至:https://juejin.cn/post/6910119868637380616前言:本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。一.最常见方式通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常。List list = Arrays.asList(strArray);private void testArrayCastToListError.

2021-01-26 22:18:34 117

原创 java-----Iterator

迭代对于我们搞Java的来说绝对不陌生。我们常常使用JDK提供的迭代接口进行Java集合的迭代。Iterator iterator = list.iterator(); while(iterator.hasNext()){ String string = iterator.next(); //do something }迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计

2021-01-25 22:52:28 87

原创 Java使用Jetty实现嵌入式Web服务器及Servlet容器

首先来介绍下 Jetty,根据 wiki 的介绍:Jetty 是一个纯粹的基于 Java 的网页服务器和 Java Servlet 容器。尽管网页服务器通常用来为人们呈现文档,但是 Jetty 通常在较大的软件框架中用于计算机与计算机之间的通信。Jetty 作为 Eclipse 基金会的一部分,是一个自由和开源项目。该网页服务器被用在 Apache ActiveMQ、Alfresco、Apache Geronimo、Apache Maven、Google App Engine、Eclipse、FUSE

2021-01-23 22:51:54 294

原创 【千行代码,bug无处藏】——Jetty入门

这是一个JavaProject首先是待纳入Jetty管理的LoginServlet.javapackage com.jadyer.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest

2021-01-23 22:45:47 111

原创 唬人的Java泛型并不难

泛型public interface Foo {}public interface Bar {}public interface Zar<?> {}上面的代码有什么区别?泛型初探1、为何引入泛型?Java 泛型也是一种语法糖,使用泛型可以在代码编译阶段完成类型的转换,避免代码在运行时强制转换而出现ClassCastException的异常。网络搜索出来一大堆的名称解释,我们先看英文Generic type,从英文大概也能明白,Generic 这里可以理解为普通的,一般的,或者我们

2021-01-22 21:48:56 60

原创 Java消息队列-Spring整合ActiveMq

1、概述多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,W

2021-01-21 22:18:20 94

原创 阿里P8闭门造车java之collection

Collection来源于Java.util包,是非常实用常用的数据结构!!!字面意思就是容器。具体的继承实现关系如下图,先整体有个印象,再依次介绍各个部分的方法,注意事项,以及应用场景。collection主要方法:boolean add(Object o)添加对象到集合boolean remove(Object o)删除指定的对象int size()返回当前集合中元素的数量boolean contains(Object o)查找集合中是否有指定的对象boolean isEmpty()判断

2021-01-20 17:01:53 75

原创 java并发之TimeUnit理解

TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep(),在很长一段时间里Thread的sleep()方法作为暂停线程的标准方式,几乎所有Java程序员都熟悉它,事实上sleep方法本身也很常用而且出现在很多面试中。如果你已经使用过Thread.sleep(),当然我确信你这样做过,那么你一定熟知它是一个静态方法,暂停线程时它不会释放锁,该方法会抛出InterrupttedException异常(如果有

2021-01-19 17:21:49 87

原创 Java中的断言assert

Java陷阱之assert关键字一、概述在C和C++语言中都有assert关键,表示断言。在Java中,同样也有assert关键字,表示断言,用法和含义都差不多。二、语法在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语句都 将忽略!),如果要开启断言检查,则需要用开关-enableassertions或-ea来开启。assert关键字语法很简单,

2021-01-18 22:37:15 134

原创 Java中Native关键字的作用

初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法:public native int hashCode();为什么有个native呢?这是我所要学习的地方。所以下面想要总结下native。一、认识 native 即 JNI,Java Native Interface凡是一种语言,都希望是纯。比如解决某一个方案都喜欢就单单这个语言来写即可。Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Java本地接

2021-01-18 22:22:08 86

原创 探究final在java中的作用

一. final修饰变量1. 基础: final修饰基本数据类型变量和引用数据类型变量.相信大家都具备基本的常识: 被final修饰的变量是不能够被改变的. 但是这里的"不能够被改变"对于不同的数据类型是有不同的含义的.当final修饰的是一个基本数据类型数据时, 这个数据的值在初始化后将不能被改变; 当final修饰的是一个引用类型数据时, 也就是修饰一个对象时, 引用在初始化后将永远指向一个内存地址, 不可修改. 但是该内存地址中保存的对象信息, 是可以进行修改的.上一段话可能比较抽象, 希望下

2021-01-16 21:49:43 155

原创 java中equals,hashcode和==的区别

1、==java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。2.引用类型(类、接口、数组)当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。对象是放在堆中的,栈中存放的是对象的引用(地址)。由此可见’=='是对栈中的值进行比较

2021-01-16 21:45:14 112

原创 Java中this和super的用法总结

这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~thisthis是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。this的用法在java中大体可以分为3种:1.普通的直接引用这种就不用讲了,this相当于是指向当前对象本身。2.形参与成员名字重名,用this来区分:class Person { private int age = 10; public Person(){ System.out.pr

2021-01-15 22:42:05 68

原创 Java Socket编程----通信是这样炼成的

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术。下面就让我们一起揭开Socket的神秘面纱。Socket编程一、网络基础知识(参考计算机网络)1、两台计算机间进行通讯需要以下三个条件:IP地址、协议、端口号2、TCP/IP协议:是目前世界上应用最为广泛的协议,是以TCP和IP为基础的不同层次上多个协议的集合,也成TCP/IP协议族、或TCP/.

2021-01-15 22:27:09 133

原创 分布式锁的几种实现方式

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可。在很多

2021-01-14 22:36:41 75

原创 java开发中sql注入正则表达式检测

sql拼装过程中有时候需要把特殊外部的参数拼装到sql语句中去,若不检测外部传入的参数是否含有sql关键词,黑客利用系统这个漏洞注入sql脚本语句进行数据库删除或盗取数据资料。sql关键词脚本检查正则表达式\b(and|exec|insert|select|drop|grant|alter|delete|update|count|chr|mid|master|truncate|char|Java语言/** * 是否含有sql注入,返回true表示含有 * @param obj * @retur

2021-01-14 22:32:27 1028 1

原创 分布式之redis

1、为什么使用redis分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。回答:如下所示,分为两点(一)性能如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。题外话:忽然

2021-01-13 22:50:10 105

原创 jedisLock—redis分布式锁实现

一、使用分布式锁要满足的几个条件:系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现)共享资源(各个系统访问同一个资源,资源的载体可能是传统关系型数据库或者NoSQL)同步访问(即有很多个进程同事访问同一个共享资源。没有同步访问,谁管你资源竞争不竞争)二、应用的场景例子管理后台的部署架构(多台tomcat服务器+redis【多台tomcat服务器访问一台redis】+mysql【多台tomcat服务器访问一台服务器上的mysql】)

2021-01-13 22:43:36 100

空空如也

空空如也

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

TA关注的人

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