![](https://img-blog.csdnimg.cn/20201219181020822.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 76
j
Java劝退师、
虽千万人,吾往矣。王德昌的博客。
展开
-
接口和抽象类的区别?解析接口和抽象类的特点和用法
接口是一种用于声明一组方法的类型,它只定义了方法的签名而没有具体的实现。接口的定义使用interface接口中的方法默认都是抽象方法,不需要使用abstract关键字进行修饰。接口还可以包含常量字段,这些字段默认都是类型的。接口可以被其他类实现,并通过实现接口的方式来声明自己具备接口中定义的方法。接口只能包含抽象方法和常量字段,不能定义具体的方法实现。一个类可以实现多个接口,从而具备多个接口中定义的方法。接口之间可以有继承关系,一个接口可以继承自另一个接口。原创 2023-08-22 18:09:19 · 330 阅读 · 0 评论 -
Java List的扩容机制原理及应用
在Java中,List是一种非常常用的数据结构,用于存储有序的元素集合。List的底层实现有多种,如ArrayList、LinkedList等。在使用List时,我们经常会遇到一个问题:当元素数量超过了List的初始容量时,List会如何扩容?本文将分析Java List的扩容机制原理,并通过示例代码和测试代码来加强阐述内容。原创 2023-08-21 17:27:43 · 1882 阅读 · 0 评论 -
SpringBoot 使用Hibernate (JPA)
Hibernate是一个开源的对象关系映射(ORM)框架,为Java语言提供了一种与数据库交互的简单、高效的方式。SpringBoot是一个快速开发框架,简化了Spring应用的配置和部署。本文将介绍如何在SpringBoot项目中使用Hibernate来进行数据持久化操作。原创 2023-08-20 19:14:44 · 1400 阅读 · 0 评论 -
Java使用Hutool
本文介绍了Java工具集Hutool的基本用法和常见功能,包括字符串处理、日期处理、加密解密和文件操作。通过本文的阐述和示例代码,读者可以更好地理解和使用Hutool工具库,提高Java开发效率。原创 2023-08-18 15:06:06 · 1124 阅读 · 0 评论 -
java.net.BindException: Address already in use: bind
"java.net.BindException: Address already in use: bind"是一个常见的Java网络编程异常。它通常在尝试绑定一个已经被占用的端口时抛出。这个异常告诉我们,所尝试绑定的地址已经被其他进程占用了。原创 2023-08-17 17:50:46 · 9629 阅读 · 1 评论 -
Jvm启动参数优化和例子
Jvm(Java虚拟机)是Java语言的基石,对于Java应用的性能至关重要。而Jvm启动参数的优化是提高Java应用性能的一个重要手段。Jvm启动参数的优化及示例,包括JVM性能优化、内存管理、垃圾回收、并发等方面的内容,帮助开发者更好地理解和优化Jvm的启动参数。原创 2023-08-01 16:13:54 · 298 阅读 · 0 评论 -
Java创建线程的几种方式
在Java中,线程是一种轻量级的执行单元,可以同时执行多个任务。创建线程是Java多线程编程的基本操作之一,本文介绍了Java中创建线程的几种方式,包括继承Thread类、实现Runnable接口、使用Callable和Future、以及使用线程池。通过示例代码和测试用例展示了每种方式的使用方法和原理解释。原创 2023-08-10 16:17:05 · 617 阅读 · 0 评论 -
Java8新特性,Lambda,Stream流
总结,Java 8引入了一些非常有用的新特性,使Java开发变得更加快速和便捷。这些新特性提高了Java的表现力,提升了开发者的生产力,并使得Java能够更好地满足现代应用开发的需求。description:介绍Java 8的新特性,包括Lambda表达式,Stream API, Optional类, Nashorn JavaScript引擎,新日期和时间API。原创 2023-08-08 18:36:13 · 261 阅读 · 0 评论 -
SpringBoot配置文件多环境
在应用程序的开发过程中,我们常会设计不同的环境,例如:开发环境、测试环境和生产环境,这些环境对应的数据库等配置可能都是不同的。因此我们需要根据不同的环境加载不同的配置文件。SpringBoot给我们提供了这么一种机制,我们只需要简单的配置就能实现。本文将详细介绍如何在SpringBoot项目中配置多环境,通过简单的配置,实现在不同环境加载不同的配置文件。同时也提供了相应的测试代码来验证配置的有效性。。原创 2023-08-07 17:00:39 · 431 阅读 · 0 评论 -
SpringBoot跨域及解决方式
跨域”,从字面上理解就是指跨越了域。在这里,“域"是指的是"域名”。在浏览器中,出于安全考虑,同源策略会限制来自不同源(即不同域名、协议或者端口)的"document"或脚本等资源能进行的交互。例如,浏览器允许脚本在用户浏览器内对自身创建的文档或元素进行更改,但是禁止脚本对来自不同源的窗口或文档进行任何操作。以上就是关于SpringBoot跨域问题的讨论以及解决方式,希望对大家有所帮助。在实际的开发过程中,还需要根据实际的业务需求来选择合适的解决方案。原创 2023-08-06 18:27:22 · 279 阅读 · 0 评论 -
线程、进程的区别
了解Java中的线程和进程,以及单线程和多线程的区别。深入理解并发编程的复杂性,提高程序的性能和效率。原创 2023-08-05 17:20:55 · 193 阅读 · 0 评论 -
MyBatis的三级缓存
关于MyBatis三级缓存的技术文章,从一级缓存到二级缓存,再到三级缓存,详细分析了它们的实现方式和使用场景,对于理解MyBatis提供的缓存机制有较大的帮助。同时,文章也给出了相应的示例代码和测试用例,以便读者更好地理解和使用MyBatis的缓存机制。原创 2023-08-04 10:45:50 · 1596 阅读 · 0 评论 -
CopyOnWriteArrayList底层原理
深入剖析了CopyOnWriteArrayList的底层原理和适用场景,提供了实例代码,帮助读者更好的理解和使用这个类。原创 2023-08-03 14:06:48 · 292 阅读 · 0 评论 -
Java重载方法匹配优先级
Java重载方法匹配优先级 在我们学习Java的时候关于重载有个小的知识点叫方法重载匹配优先级。虽然javac编译器能确定方法的重载版本,但是在很多情况下重载的版本并不是唯一的,往往只能确定一个相对合适的版本。请看以下代码你觉得输出的内容是什么呢?package cn.laoniu;import java.io.Serializable;public class Reload { public void sayType(Character arg) { System.ou...原创 2021-04-13 19:40:07 · 1329 阅读 · 2 评论 -
Call From localhost/127.0.0.1 to ubuntu-linux:9000 failed on connection exception:
java操作Hadoop的时候:Call From localhost/127.0.0.1 to ubuntu-linux:9000 failed on connection exception连接拒绝当指定地址有一台机器,但客户端使用的特定TCP端口上没有程序监听时,您将获得ConnectionRefused异常-并且没有防火墙阻止静默删除TCP连接请求。如果您不知道什么是TCP连接请求,请查阅规范。除非两端存在配置错误,否则常见的原因是Hadoop服务没有运行。当集群关闭时,这种堆栈.原创 2021-03-03 18:15:29 · 2232 阅读 · 5 评论 -
mybatis plus 出现 Invalid bound statement (not found)
mybatis-plus 3.4.1按照官网的配置出现了如下错误org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.niu.manager.mapper.DepartmentMapper.selectList at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:...原创 2020-12-31 14:43:11 · 29872 阅读 · 22 评论 -
Java文件快速copy复制
最近学习netty的时候发现nio包下有个FileChannel类,经过了解这个类作用是个专门负责传输文件的通道,支持多线程,而且经过测试FileChannel复制文件的速度比BufferedInputStream/BufferedOutputStream复制文件的速度快了近三分之一。在复制大文件的时候更加体现出FileChannel的速度优势。而且FileChannel是多并发线程安全的。代码贴下package com.niu.nio;import java.io.File;import原创 2020-12-29 16:55:18 · 15010 阅读 · 11 评论 -
try-with-resource如何优雅的关闭io流
JAVA的一大特性就是JVM会对内部资源实现自动回收,即自动GC,给开发者带来了极大的便利。但是JVM对外部资源的引用却无法自动回收,例如数据库连接,网络连接以及输入输出IO流等,这些连接就需要我们手动去关闭,不然会导致外部资源泄露,连接池溢出以及文件被异常占用等。传统的手动释放外部资源一般放在一般放在try{}catch(){}finally{}机制的finally代码块中,因为finally代码块中语句是肯定会被执行的,即保证了外部资源最后一定会被释放。同时考虑到finally代码块中也有可能出现异原创 2020-12-29 13:10:42 · 21451 阅读 · 102 评论 -
如何自己搭建短链接服务
如何打造一个短网址服务短链接我们或多或少都使用过,所谓短链接就是根据较长的原链接url生成一段较短的链接,访问短链接可以跳转到对应的原链接,这样做好处在于:1. url更加美观;2. 便于保存和传播;3. 某些网站内容发布有字数限制,短链接可以节约字数。短链接实现的原理非常简单,可以概括为:为每个原链接生成不重复的唯一短链接 将原链接和对应短链接成对保存到数据库 访问短链接时,web服务器将目标重定向到对应的原链接...原创 2020-12-25 18:09:50 · 19243 阅读 · 8 评论 -
如何优雅地写后端API接口
在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式。前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后端人员瞧不起前端人员,那现在后端人员要重新认识一下前端,前端已经很成体系了1.接口交互前端和后端进行交互,前端按照约定请求URL路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端。针对URL路径的restful风格,以及传入参数的公共请求头的要求(如:app_version,api_versio原创 2020-12-23 15:14:42 · 24930 阅读 · 4 评论 -
SpringBoot使用拦截器
拦截器对使用SpringMvc、的开发人员来说特别熟悉,因为你只要想去做好一个项目必然会用到它。拦截器在我们平时的项目中用处有很多,如:日志记录、用户登录状态拦截、安全拦截等等。而SpringBoot内部集成的是SpringMVC控制框架,所以使用起来跟SpringMVC没有区别,只是在配置上有点不同。本文只介绍如何在springboot中使用拦截器。环境/版本一览:开发工具:Intellij IDEA 2020.2.3 springboot:2.3.7.RELEASE jdk:1.8.0_21原创 2020-12-22 15:52:56 · 18851 阅读 · 13 评论 -
Java-排序 【冒泡排序】
冒泡排序基本的思想是每次比较两个数,大的沉下去,小的冒起来算法主要是比较相邻的两个元素,如果第一个比第二个大,就交换他们两个。一直从开始的一对比较到最后的一对,直到最后时间复杂度:O(n²)package com.niu.demo;import java.util.Arrays;/** * @description: 冒泡排序 * @author: nxq email: niuxiangqian163@163.com * @createDate: 2020/12/21 6:01.原创 2020-12-21 18:20:32 · 19098 阅读 · 7 评论 -
【设计模式】Java中单例模式Singleton
单例模式,顾名思义就是只有一个实例,并且它自己负责创建自己的对象,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。核心代码:构造方法私有化,private。提供一个静态的公开对外获取实例的方法1.懒汉式public class MyStringUtil { private static MyStringUtil myStringUtil; //私有化构造器 private MyStringUtil(){ } //提供一个静原创 2020-12-21 17:02:03 · 21408 阅读 · 5 评论 -
Java反射原理与使用
当类加载器将类加载进jvm之后,jvm会创建每一个类的元数据对象(Class),java语言允许通过元数据对象动态的创建对象实例,这种机制就称为java的反射机制,基本上所有框架的底层都用到了反射机制,spring、mybatis、servlet都用到了1.如何获取一个类的元数据对象(Class)呢现在有一个User类package com.niu.demo;public class User { private String name; private String pa原创 2020-12-21 16:23:09 · 20032 阅读 · 6 评论 -
【代理模式】Java的静态代理与动态代理
代理模式代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。代理类主要负责为委托了(真实对象)预处理消息、过滤消息、传递消息给委托类,代理类不现实具体服务,而是利用委托类来完成服务,并将执行结果封装处理。通俗的来讲代理模式就是我们生活中常见的中介。java为我们提供了基于接口的动态代理。介绍动态代理之前我们先说一下静态代理1.静态代理创建一个接口,然后创建一个被代理的类实现接口中的抽象方法,再创建一个代理类,让代理类也实现这个接口,在代理类里创建一个被代理的类,在调用被代理原创 2020-12-21 15:42:21 · 19297 阅读 · 5 评论 -
Java中String、StringBuffer和StringBuilder的区别
Strings are constant; their values cannot be changed after they原创 2020-12-20 15:41:47 · 22379 阅读 · 3 评论 -
SpringBoot项目中获取配置文件的配置信息
系统配置文件 application.yaml或者 application.properties 中的属性值假如我们配置文件.yaml的信息是myconfig: username: abc password: 123或者.propertiesmyconfig.username=abcmyconfig.password=1231. 通过@Value类需要被spring扫描到@Componentpublic class MyConfig { @Val..原创 2020-12-20 12:35:54 · 23276 阅读 · 1 评论 -
SpringBoot上传文件
SpringBoot单文件上传,多文件上传环境/版本一览:开发工具:Intellij IDEA 2020.2.3 springboot:2.3.7.RELEASE jdk:1.8.0_211 maven:3.6.3目录结构1.搭建项目1.1 先创建一个springboot工程加入web依赖<dependency> <groupId>org.springframework.boot</groupId> .原创 2020-12-19 16:44:55 · 40702 阅读 · 7 评论 -
Java遍历集合
Java遍历集合 list,set,map1.java遍历list public static void main(String[] args) { //先创建一个list集合,放入三条数据 List<String> list = new ArrayList<>(); list.add("xiaoming"); list.add("xiaohong"); list.add("xiaozha原创 2020-12-19 15:57:04 · 24534 阅读 · 1 评论 -
System.err和System.out的区别
在 java API,文档中给出的解释是:out为“标准输出流”,err为“标准错误输出流”大多数操作系统都有三个标准文件描述符:标准输入,标准输出,标准出错。 三个操作系统的文件描述符映射到编程语言的标准库中,往往加了一层包装,但是名字通常还是叫标准输入,标准输出,标准出错。 在其它语言中的一般写法是:stdin,stdout,stderr(有的语言里大写,有的语言里小写)。对应Java中的System.in,System.out,System.err。我们使用out和e...原创 2020-12-19 14:49:32 · 25327 阅读 · 6 评论 -
String.Join的使用,让代码更优美
【善用新语法,让代码更优美】jadk1.8为我们提供了String.join()方法几个使用的例子。让我们在项目灵活的使用它,使代码更加优美package com.niu.demo;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * @description: String.Join的使用 * @author: nxq email: niuxiangqian163@16原创 2020-12-19 14:19:58 · 30250 阅读 · 54 评论 -
【延时任务处理、订单失效】RabbitMQ死信队列实现
订单失效问题订单失效问题比较麻烦的地方就是如何能够实时获取失效的订单。对于这种问题一般有两种解决方案:定时任务处理,延时任务处理定时任务处理用户下订单后先生成订单信息,然后将该订单加入到定时任务中(30分钟后执行),当到达指定时间后检查订单状态,如果未支付则标识该订单失效。 定时去轮询数据库/缓存,看订单的状态。这种方式的问题很明显,当集群部署服务器的时候需要做分布式锁进行协调,而且实时性不高,对数据库会产生压力延时任务处理当用户下订单后,将用户的订单的标识全部发送到延时队列中,3.原创 2020-12-18 09:48:26 · 31163 阅读 · 27 评论 -
SpringBoot整合SpringDataJPA
SpringBoot整合SpringDataJPAJPA是什么首先,我们说说JPA是什么?JPA(java persistence api),它并不是一个框架,而是一组规范。我觉得对于任何一个开发人员来说,理解“规范”这个词应该不在话下。其中,Hibernate就实现了这个规范,而且那是相当成功的(其实TopLink和OpenJPA也都实现了JPA规范,不过它们被Hinernate的光环笼罩了)。所以呢,当我们说到JPA的时候,好多人首先想到的就是Hibernate。SpringBootDa原创 2020-12-17 10:37:36 · 28588 阅读 · 7 评论 -
SpringBoot 整合 Mybatis
SpringBoot Mybatis 整合SpringBoot Mybatis这么有名的框架废话不多说了,直接开始环境/版本一览:开发工具:Intellij IDEA 2020.2.3 springboot:2.3.7.RELEASE jdk:1.8.0_211 maven:3.6.3工程结构:开始搭建:创建数据库 t_user_dbSET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- -----------------.原创 2020-12-17 09:08:01 · 27235 阅读 · 2 评论 -
【算法】二分搜索方法
【算法】二分搜索方法 二分搜索法运用了分治策略。给定已经排好序的n个元素,在这个n个元素中查找一个特定的元素x。 二分搜索法的基本思想是将n个元素分成个数大致相同的两半,取arr[n/2]与x进行比较。如果x=arr[/2],则找到x,算法终止。如果x<arr[n/2],则只要在数组a的左半部分继续搜索x。如果x>arr[a/2],则只要在数组arr的右半部分继续搜索x。java实现代码: public static void main(St...原创 2020-11-08 23:18:00 · 29615 阅读 · 3 评论 -
面试官:如何用Zk(Zookeeper)实现实现分布式锁?
前言锁我想不需要我过多的去说,大家都知道是怎么一回事了吧?在多线程环境下,由于上下文的切换,数据可能出现不一致的情况或者数据被污染,我们需要保证数据安全,所以想到了加锁。所谓的加锁机制呢,就是当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问,直到该线程读取完,其他线程才可使用。还记得我之前说过Redis在分布式的情况下,需要对存在并发竞争的数据进行加锁,你们...转载 2020-04-09 23:56:35 · 12317 阅读 · 0 评论 -
一个HashMap跟面试官扯了半个小时
一个HashMap能跟面试官扯上半个小时前言HashMap应该算是Java后端工程师面试的必问题,因为其中的知识点太多,很适合用来考察面试者的Java基础。开场面试官: 你先自我介绍一下吧!安琪拉: 我是安琪拉,草丛三婊之一,最强中单(钟馗不服)!哦,不对,串场了,我是**,目前在–公司做–系统开发。面试官: 看你简历上写熟悉Java集合,HashMap用过的吧?安琪拉...转载 2020-04-09 23:51:10 · 11126 阅读 · 0 评论 -
2020年Java多线程与并发系列22道高频面试题
前言现在不管是大公司还是小公司,去面试都会问到多线程与并发编程的知识,大家面试的时候这方面的知识一定要提前做好储备。1、Java中实现多线程有几种方法(1)继承Thread类;(2)实现Runnable接口;(3)实现Callable接口通过FutureTask包装器来创建Thread线程;(4)使用ExecutorService、Callable、Future实现有...转载 2020-04-09 23:45:46 · 12027 阅读 · 1 评论 -
Spring的IOC是啥?有什么好处?
设计模式7大原则为什么会有人说设计模式已死呢,因为spring这些框架帮你做好了类和对象的管理,让你写代码的时候只专注于你实现的功能,而不是设计。先来看看设计模式的7大原则: 开放-封闭原则 单一职责原则 依赖倒转原则 最小知识原则 接口隔离原则 合成/聚合复用原则 里氏代换原则,任何基类可以出现的地方,子类一定可以...转载 2020-04-09 23:44:23 · 27378 阅读 · 1 评论 -
HashMap是如何形成死循环的?(最完整的配图讲解)
作者|依本多情原文:blog.csdn.net/qq_36520235/article/details/86653136第一个状态:当线程一刚刚扩容好数组,此时刚要准备进行rehash,但是此时线程二强行插入进来执行,并且线程二已经rehash完成之后的状态图(上半部分表示的线程一,下半部分表示的是线程二)第二个状态:此时线程一已经被唤醒了,要开始进行操作rehash...转载 2020-04-09 23:42:31 · 10912 阅读 · 0 评论