JAVA技术
文章平均质量分 71
JAVA技术类
大圣哥哥阿
这个作者很懒,什么都没留下…
展开
-
Java中难理解的四个概念
前言Java 是很多人一直在用的编程语言,但是有些 Java 概念是非常难以理解的,哪怕是一些多年的老手,对某些 Java 概念也存在一些混淆和困惑。所以,在这篇文章里,会介绍四个 Java 中最难理解的四个概念,去帮助开发者更清晰的理解这些概念:匿名内部类的用法多线程如何实现同步序列化匿名内部类匿名内部类又叫匿名类,它有点像局部类(Local Class)或者内部类(Inner Class),只是匿名内部类没有名字,我们可以同时声明并实例化一个匿名内部类。一个匿名内部类仅适用在想使用原创 2021-05-31 20:15:48 · 604 阅读 · 1 评论 -
Spring5学习之基础知识总结
1.概述1、Spring 是轻量级的开源的 JavaEE 框架2、 Spring 可以解决企业应用开发的复杂性3、Spring 有两个核心部分:IOC 和 AopIOC:控制反转,把创建对象过程交给 Spring 进行管理Aop:面向切面,不修改源代码进行功能增强4、Spring 特点方便解耦,简化开发Aop 编程支持方便程序测试方便和其他框架进行整合方便进行事务操作降低 API 开发难度2.入门Demo1.jar包引入<project xmlns="http://maven原创 2021-05-30 22:13:17 · 495 阅读 · 3 评论 -
请允许我说一句:“这方面我最细”——Java类加载相关知识总结
类加载器类加载器作用负责将.class文件(存储的物理文件)加载到内存中类加载器过程加载:通过全类名获取这个类准备用流传输,加载进内存,加载完毕创建一个Class对象链接验证:确保Class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全(文件中的信息是否符合虚拟机规范有没有安全隐患)准备:负责为类的类变量(被static修饰的变量)分配内存,并设置默认初始化值(初始化静态变量)解析:将类的二进制数据流中的符号引用替换为直接引用(本类中如果用到了其他类,此原创 2021-05-28 22:03:12 · 446 阅读 · 11 评论 -
面试官问我:如何理解BIO、NIO、AIO的区别?我差点拉胯!
很多文章在谈论到BIO、NIO、AIO的时候仅仅是抛出一堆定义,以及一些生动的例子。看似很好理解。但是并没有将最基础的本质原理显现出来,如果没有没有从IO的原理出发的话是很难理解这三者之间的区别的。所以本篇文章从Java是如何进行IO操作为开头进行分析。Java中的IO原理首先Java中的IO都是依赖操作系统内核进行的,我们程序中的IO读写其实调用的是操作系统内核中的read&write两大系统调用。那内核是如何进行IO交互的呢?1.网卡收到经过网线传来的网络数据,并将网络数据写到内存中.原创 2021-05-27 15:30:47 · 757 阅读 · 31 评论 -
Java基础学习之字符串知识总结,小白必看!
一、前言字符串是多个字符连接起来组合成的字符序列。字符串分为可变的字符串和不可变的字符串两种。(1)不可变的字符串:当字符串对象创建完毕之后,该对象的内容(上述的字符序列)是不能改变的,一旦内容改变就会创建一个新的字符串对象。Java中的String类的对象就是不可变的。(2)可变的字符串:StringBuilder类和StringBuffer类的对象就是可变的;当对象创建完毕之后,该对象的内容发生改变时不会创建新的对象,也就是说对象的内容可以发生改变,当对象的内容发生改变时,对象保持不变,还是同一个原创 2021-05-26 21:40:27 · 255 阅读 · 6 评论 -
优秀程序员经验之谈:必须要注意的十个点,少走弯路,提高效率 爆赞!
1. 多走半里路很多事情并不难,只是缺乏多走半里路的习惯!反例public boolean isInValid(String str) { if (str == null || str.trim().length() == 0) { return true; } return false;}多走一步,海阔天空public boolean isInValid(String str) { return (str == null) || (st原创 2021-05-24 14:59:33 · 179 阅读 · 0 评论 -
JVM的内存结构详解
一、JVM基础知识1、什么是JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。2、JRE/JDK/JVM是什么关系JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java程序都要在JRE下才能运行。普通用户只需要运行已开发原创 2021-05-21 21:32:02 · 303 阅读 · 1 评论 -
一文弄懂 Gitflow、Github flow、Gitlab flow 的工作流
Git 作为一个源码管理系统,不可避免涉及到多人协作。协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去。”工作流程”在英语里,叫做”workflow”或者”flow”,原意是水流,比喻项目像水流那样,顺畅、自然地向前流动,不会发生冲击、对撞、甚至漩涡。本文介绍三种广泛使用的工作流程:Git flowGithub flowGitlab flow一、功能驱动本文的三种工作流程,有一个共同点:都采用”功能驱动式开发”(Feature-driven developmen原创 2021-05-21 21:07:45 · 3110 阅读 · 0 评论 -
今天5.20我把女朋友都忘了,花了几个小时整理出来超详细的Java尾递归。
一、序言尾调用维基百科在计算机学里,尾调用是指一个函数里的最后一个动作是返回一个函数的调用结果的情形,即最后一步新调用的返回值直接被当前函数的返回结果。此时,该尾部调用位置被称为尾位置。尾调用中有一种重要而特殊的情形叫做尾递归。经过适当处理,尾递归形式的函数的运行效率可以被极大地优化。尾调用原则上都可以通过简化函数调用栈的结构而获得性能优化(称为“尾调用消除”),但是优化尾调用是否方便可行取决于运行环境对此类优化的支持程度如何。尾递归维基百科:若函数在尾位置调用自身(或是一个尾调用本身的其原创 2021-05-20 20:23:53 · 196 阅读 · 1 评论 -
Java基础篇—— 构造器与方法重载
显式初始化要求我们在写程序时就确定初始值,这有时很不方便。我们可以使用构造器(constructor)来初始化对象。构造器可以初始化数据成员,还可以规定特定的操作。这些操作会在创建对象时自动执行。定义构造器构造器是一个方法。像普通方法一样,我们在类中定义构造器。构造器有如下基本特征:构造器的名字和类的名字相同构造器没有返回值我们定义Human类的构造器:public class Test{ public static void main(String[] args) {原创 2021-05-18 20:23:22 · 232 阅读 · 1 评论 -
Java基础篇——方法与数据成员
调用同一对象的数据成员方法可以调用该对象的数据成员。比如下面我们给Human类增加一个getHeight()的方法。该方法返回height数据成员的值:public class Test{ public static void main(String[] args) { Human aPerson = new Human(); System.out.println(aPerson.getHeight()); }}class Human{原创 2021-05-17 19:11:57 · 239 阅读 · 0 评论 -
Java基础篇——从HelloWorld到面向对象
作者:Vamei 出处:http://www.cnblogs.com/vamei“Hello World!”先来看一个HelloWorld.java程序。这个程序在屏幕上打印出一串字符"Hello World!":public class HelloWorld{ public static void main(String[] args) { System.out.println("Hello World!"); }}程序中包括Java的一些基本特征:转载 2021-05-17 17:34:01 · 131 阅读 · 0 评论 -
WebUploader实现图片上传功能
本文实例为大家分享了WebUploader实现图片上传的具体代码,供大家参考,具体内容如下**描述:**springmvc 在jsp页面实现 WebUploader插件上传图片, 上传到 oss阿里云存储上。预览:理解: 前端 WebUploader插件(这个得去看官网)调起后台,后台 request 接收文件参数,重新拼装图片url,oss创建连接上传图片提交图片,最后返回图片绝对url和相对url给前端。先实现前端:1.定义js 2.定义页面//导入 WebUploader插件js、css原创 2021-05-15 19:52:24 · 773 阅读 · 0 评论 -
Java logback日志的简单使用
说明logback作为log4j的替代,有很多优势。要将logback应用到项目中,步骤很简单。加入依赖的jar包和配置文件即可。logback.xml中主要元素:property定义属性,定义之后,后文可以通过该变量引用。appender定义日志输出格式、位置、文件分割等。被或引用。logger定义日志名称及对应的级别。name可以是包名、类名或者单纯的字符串。如果是包名或者类名,那么该包或类中的日志级别,对应这里的设置;如果是单纯的字符串名,那么通过getLogger({name})获原创 2021-05-14 20:31:38 · 1051 阅读 · 2 评论 -
JAVA和JVM运行原理
JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。编译器负责把Java程序转成Class文件,方便Jvm来读取它.Jvm是java虚拟机,其实它就是解释器,把Class文件中的命令转成某种平台的命令,比如把Java命令转成Windows下的命令,然后Java程序就执行了.这里和大家简单分享一下JAVA和JVM运行的原理,Java语言写的源程序通过Java编译器,编译成与平台无原创 2021-05-14 19:42:42 · 130 阅读 · 0 评论 -
Java如何发起http请求的实现(GET/POST)
前言在未来做项目中,一些功能模块可能会采用不同的语言进行编写。这就需要http请求进行模块的调用。那么下面,我将以Java为例,详细说明如何发起http请求。一、GET与POSTGET和POST是HTTP的两个常用方法。GET指从指定的服务器中获取数据POST指提交数据给指定的服务器处理1.GET方法使用GET方法,需要传递的参数被附加在URL地址后面一起发送到服务器。例如:http://121.41.111.94/submit?name=zxy&age=21特点:GET请求能原创 2021-05-13 16:57:46 · 6898 阅读 · 0 评论 -
Java多线程面试题(面试官常问)
进程和线程进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是从一个进程从创建、运行到消亡的过程。在Java中,当我们启动main函数时其实就是启动了一个JVM的进程,而mian函数所在的线程就是这个进程中的一个线程,称为主线程。线程是比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程都有自己的程序计数器、虚拟机和本地方法栈,所以系统在产生一个线程,或在各个线程之间切换工作是,负担要比进程转载 2021-05-12 21:10:19 · 129 阅读 · 0 评论 -
今天去公司面试面试官给我的问题我想分享给你们
今天面试公司对公司提的问题做了个解答 希望对大家有帮助吧面试题目:【数据结构和算法】解码异或后的排列做这题之前先看一下异或运算的几个规律a^a=0; 任何数字和自己异或都是00^a=a; 任何数字和0异或还是他自己a^b^c=a^c^b 异或运算具有交换律这题只要找出数组encoded中的第一个元素,后面做起来就简单了。那么怎么找encoded中的第一个元素呢,题中有个暗示就是n 是个奇数,我们画个图来看一下可以看到encoded数组中所有偶数位(下标从0开始的,是原创 2021-05-11 15:38:16 · 104 阅读 · 0 评论 -
解决idea找不到或无法加载主类的错误处理
错误: 找不到或无法加载主类 com.yan.ms.work.WorkServiceApplicationDisconnected from the target VM, address: ‘127.0.0.1:51456’, transport: ‘socket’有时候更新gradle后,启动项目就报错了,错误: 找不到或无法加载主类 com.yan.ms.work.WorkServiceApplicationDisconnected from the target VM, address: ‘原创 2021-05-11 14:32:17 · 2189 阅读 · 0 评论 -
Java 开发环境的搭建,开启你的编程之旅
Java 是一门跨平台的高级程序设计语言,可运行在linux、Windows、Mac OS及其他多种UNIX版本的系统。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等Java 版本Java Platform, Standard Edition (Java SE)Java SE 使您可以在台式机和服务器上开发和部署Java应用程序。Java SE和组件技术提供了当今应用程序所需转载 2021-05-10 15:27:57 · 293 阅读 · 0 评论 -
类似QQ聊天软件也能用Java实现啦!(多人聊天原理附源码)
多人聊天室原理图源码工具类:该类用于关闭各种流。public class CloseUtil { public static void CloseAll(Closeable... closeable){ for(Closeable c:closeable){ if (c != null) { try { c.close(); } catch (IOException e) { e.printStackTrace(); } } }原创 2021-05-07 20:53:57 · 614 阅读 · 0 评论 -
Java高并发情况下高效的随机数生成器
前言在代码中生成随机数,是一个非常常用的功能,并且JDK已经提供了一个现成的Random类来实现它,并且Random类是线程安全的。下面是Random.next()生成一个随机整数的实现:protected int next(int bits) { long oldseed, nextseed; AtomicLong seed = this.seed; do { oldseed = seed.get(); nextseed = (oldseed转载 2021-05-06 20:55:00 · 523 阅读 · 0 评论 -
Java 使用反射调用jar包中的类方式
下面讲展示的是从image.jar包中调用image.Buddy类的方法。public class Main { public static void main(String[] args) { try { // 两种方式都可以 URL url = new File("/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/image.jar").toURI原创 2021-05-06 19:45:28 · 1790 阅读 · 0 评论 -
JAVA多线程-线程生命周期
线程生命周期1. 线程的生命周期包括新建、就绪、运行、阻塞、销毁五中状态新建:使用new方法,实例化一个线程Thread thread = new Thread();就绪:调用start() 方法后,这时候线程处于等待CPU分配资源阶段 调用yeild()方法,让出cpu资源,程序由运行状态变为就绪状态 当阻塞的状态通过notify()和notifyAll()方法唤醒以后thread.start();运行:当就绪的线程获取到CUP资源以后, 便进入运行原创 2021-05-05 20:54:08 · 354 阅读 · 0 评论 -
Java多线程-线程的概念和创建
前言声明:该文章中所有测试都是在JDK1.8的环境下。该文章是我在学习Java中的多线程这方面知识时,做的一些总结和记录。如果有不正确的地方请大家多多包涵并作出指点,谢谢!一、基础概念我们知道CPU执行代码都是一条一条顺序执行的,所以本质上单核CPU的电脑不会在同一个时间点执行多个任务。但是在现实中,我们在使用电脑的时候,可以一边聊微信,一边听歌。那这是怎么做到的呢?其实操作系统多任务就是让CPU对多个任务轮流交替执行。举个例子:在一个教室中同时坐着一年级,二年级,三年级三批学生,老师花一分钟教转载 2021-05-05 17:24:11 · 137 阅读 · 0 评论 -
Java如何确定一个链表有环及入口节点
如何确定一个链表有环,入口节点是什么?1.首先定义一个单链表;var ,next,是单链表中的属性,分别表示节点值和下一个节点的指向;代码如下://定义一个链表 class List{ public int var; public List next;//有参构造 public List(int var) { this.var = var; }//无参构造 public List() { } //创建一个带环的链原创 2021-04-30 20:32:16 · 206 阅读 · 3 评论 -
Java中lambda表达式的分析与具体用法
Lamda表达式λ 希腊字母表中排序第十一位字母,英语名称为Lambda避免匿名内部类定义过多其实质属于函数式 编程的概念(params)->expression[表达式](params)->statement[语句](params)->{statements}(a-> System.out.print(“i like lambda–>”+a));new Thread (()->System.out.println(“多线程学习。。。。”)).start(原创 2021-04-30 19:54:05 · 143 阅读 · 1 评论 -
Java背包问题动态规划算法分析
背包问题【题目描述】一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,…,WnW1,W2,…,Wn,它们的价值分别为C1,C2,…,CnC1,C2,…,Cn,求旅行者能获得最大总价值。【输入】第一行:两个整数,MM(背包容量,M<=200M<=200)和NN(物品数量,N<=30N<=30);第2…N+12…N+1行:每行二个整数Wi,CiWi,Ci,表示每个物品的重量和价值。【输出】仅一行,一个数,表示最大总价值。【输入样原创 2021-04-29 20:31:56 · 247 阅读 · 0 评论 -
Spring Boot数据库密码加密的配置方法
前言由于系统安全的考虑,配置文件中不能出现明文密码的问题,本文就给大家详细介绍下springboot配置数据库密码加密的方法,下面话不多说了,来一起看看详细的介绍吧1.导入依赖 <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> &原创 2021-04-29 20:12:54 · 577 阅读 · 0 评论 -
JAVA Future类的使用详解
前言在高性能编程中,并发编程已经成为了极为重要的一部分。在单核CPU性能已经趋于极限时,我们只能通过多核来进一步提升系统的性能,因此就催生了并发编程。由于并发编程比串行编程更困难,也更容易出错,因此,我们就更需要借鉴一些前人优秀的,成熟的设计模式,使得我们的设计更加健壮,更加完美。而Future模式,正是其中使用最为广泛,也是极为重要的一种设计模式。今天就跟阿丙了解一手Future模式!生活中的Future模式为了更快的了解Future模式,我们先来看一个生活中的例子。场景1:午饭时间到了,同转载 2021-04-28 21:06:22 · 2417 阅读 · 0 评论 -
Java如何实现单链表的增删改查
一、新建学生节点类Stu_Node节点包含:学号:int num;姓名:String name;性别:String gender;下一个节点:Stu_Node next;为了便于打印节点内容需要重写toString方法class Stu_Node{ int num; String name; String gender; Stu_Node next; @Override public String toString() { re原创 2021-04-28 20:42:43 · 287 阅读 · 0 评论 -
Spring Boot 集成 Kafkad的实现示例
Spring Boot 作为主流微服务框架,拥有成熟的社区生态。市场应用广泛,为了方便大家,整理了一个基于spring boot的常用中间件快速集成入门系列手册,涉及RPC、缓存、消息队列、分库分表、注册中心、分布式配置等常用开源组件,大概有几十篇文章,陆续会开放出来,感兴趣同学请提前关注&收藏消息通信有两种基本模型,即发布-订阅(Pub-Sub)模型和点对点(Point to Point)模型,发布-订阅支持生产者消费者之间的一对多关系,而点对点模型中有且仅有一个消费者。前言Kafka是.原创 2021-04-27 20:51:05 · 250 阅读 · 0 评论 -
MyBatis详细执行流程的全纪录
Mybatis简介MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。mybatis详细执行流程一、通过Resource去加载全局配置文件import org.apache.ibatis.io.R原创 2021-04-27 20:34:03 · 201 阅读 · 0 评论 -
Java可变参数(不定向参数)的作用与实例
Java可变参数的作用:在编写方法的过程中,可能会遇见一个方法有不确定参数个数的情况。一般我们会用方法重载来解决问题:1 //方法重载,解决参数个数不确定问题2 public void method();3 public void method(int i);4 public void method(int i, int j);5 public void method(int i, int j, int k);但是,当参数个数过多,这样太过于繁琐,于是我们可以使用不定项参数(可变参数)的方式原创 2021-04-25 20:51:20 · 141 阅读 · 1 评论 -
@SpringBootApplication注解的使用
一、前言大部分的配置都可以用Java类+注解来代替,而在SpringBoot项目中见的最多的莫过于@SpringBootApplication注解了,它在每个SpringBoot的启动类上都有标注。这个注解对SpringBoot的启动和自动配置到底有什么样的影响呢?本文将为各位大佬解析它的源码,揭开@SpringBootApplication注解神秘的面纱。二、正文对SpringBoot工程的自动配置很感兴趣,于是学习其源码并整理了其中一些内容,如果有错误请大家指正~话不多说,直接上源码;@Sp.原创 2021-04-24 15:23:23 · 369 阅读 · 0 评论 -
带你快速了解Java中类和对象的关系
本文重点解读Java里的类和对象的关系1、首先介绍两个概念类:类是对现实生活中一类具有共同属性和行为事务的抽象,确定对象将会拥有的属性和行为。对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。概念比较抽象,我们来讲一个具体的项目开发场景,来理解类和对象。假如,我们现在要开发一套图书管理系统,我们如何在程序里面表示出一本书呢?这个时候就用到了类的概念,我们可以定义一个表示书的数据类型,这个新的数据类型就是类。上原创 2021-04-24 15:00:34 · 211 阅读 · 0 评论 -
SpringBoot整合阿里云OSS对象存储服务实现文件上传
1. 准备工作:一、首先登录阿里云OSS对象存储控制台创建一个Bucket作为你的存储空间。二、创建Access Keyan按要求创建进行,这里的方法步骤我就不展现出来了,你们可以自行查询阿里云文档,这个获取值本身就不难。重点:记下你的AccessKey ID、AccessKey Secret以及你刚才创建的Buacket名字BucketName。2. 配置:在pom里引入oss要用的依赖<dependency> <groupId>com.aliyun.oss&l原创 2021-04-23 17:53:07 · 342 阅读 · 0 评论 -
深入了解Java虚拟机栈以及内存模型
1、结合字节码指令理解Java虚拟机栈和栈帧栈帧:每个栈帧对应一个被调用的方法,可以理解为一个方法的运行空间。每个栈帧中包括局部变量表(Local Variables)、操作数栈(Operand Stack)、指向运行时常量池的引用(A reference to the run-time constant pool)、方法返回地址(Return Address)和附加信息。局部变量表:方法中定义的局部变量以及方法的参数存放在这张表中,局部变量表中的变量不可直接使用,如需要使用的话,必须通过相关指令将其原创 2021-04-23 17:12:17 · 117 阅读 · 0 评论 -
详解Jenkins 实现Gitlab事件自动触发Jenkins构建及钉钉消息推送
实践环境GitLab Community Edition 12.6.4Jenkins 2.284Post build task 1.9(Jenkins插件)Generic Webhook Trigger Plugin 1.72(Jenkins插件)GitLab 1.5.13(Jenkins插件)实现步骤钉钉机器人配置选择要推送的钉钉群 -> 点击群设置按钮 -> 点击智能群助手 -> 点击添加机器人 -> 点击添加机器人+号按钮 -> 点击自定义->填写机原创 2021-04-23 16:52:28 · 1302 阅读 · 0 评论 -
Mybatis中使用大于小于等于的正确方法
在mybatis中sql是写在xml映射文件中的,如果sql中有一些特殊字符的话,在解析xml文件的时候就会被转义,如若不希望被转义,那该怎么办呢?方法一:使用特殊转义字符例如,>=开始日期 并且<=结束日期> > 大于号< < 小于号 <if test="searchTimeBegin != null and searchTimeBegin != ''"> AND tcci.consume_time >= C原创 2021-04-22 16:58:52 · 44791 阅读 · 1 评论