java相关
文章平均质量分 68
收录一些常见的java面试题!
程序员小赵同学
大道至简,盘古生其中。
展开
-
SpringBoot自动装配原理
为什么要用Springboot?SpringBoot相比Spring有什么优点?说到这个问题,必然会牵扯到自动装配,无需手动添加很多配置,开箱即用。首先我们都知道,在spring中约定大于配置。所以我们首先要有一个约定,启动项目的时候去读取某个目录下的配置。那么所有需要自动装配的工具,都可以在这个约定的目录下设置自己的初始默认配置。项目启动时自动统一加载即可。当前SpringBoot官网最新版本是2.7.5,咱们这次就分析这个版本下的源码。原创 2022-11-20 22:35:05 · 2424 阅读 · 0 评论 -
MDC、ThreadLocal、InheritableThreadLocal的区别和联系
ThreadLocal使用来存储线程本地变量的。MDC的底层使用的就是ThreadLocal来存储的,只不过是做了一些安全校验,如MDC取值时ThreadLocalMap==null怎么办。InheritableThreadLocal支持子线程继承父线程中的thread-local值。留个问题哈:现在项目中很多使用多线程的地方都是使用的线程池,线程池中的线程并不具备父子关系,这样threadlocal怎么传递?原创 2022-11-10 18:07:27 · 1332 阅读 · 2 评论 -
Java使用Xpath实现爬虫功能
Java使用Xpath实现爬虫功能看到有人通过Xpath实现爬虫功能,就写了一个Java版本的。全网最简单易学的教程。网上的其他教程看着都是用 过时的方法实现的,我这是用的新方法,不会报错。原创 2022-06-09 20:00:26 · 1364 阅读 · 0 评论 -
CAP && BASE理论 && 几种一致性简单介绍
CAP && BASE理论CAP理论BASE理论几种一致性简单介绍强一致性弱一致性最终一致性顺序一致性原创 2022-05-28 04:28:38 · 124 阅读 · 0 评论 -
Java基础-动态代理
1、什么是代理生活中的代理1、房产中介,租户不能直接对接房主,要通过中介。中介就是代理,同时中介提供价格调整、房屋维修等增强功能。2、商家店铺,用户不能直接去厂家买东西,要通过商家。商家就是代理,同时商家提供商品价格调整、举办优惠活动等增强功能。由上面的例子可以看出,代理和目标都实现了同一种功能,只不过代理在原功能的基础上进行了功能增强。(中介和房主都提供房屋出租的功能,中介只不过是在原功能的基础上进行了价格调整、房屋装修等额外功能)2、代理的特点功能增强(在原功能的基础上封装其他功能)原创 2022-04-29 10:13:26 · 232 阅读 · 0 评论 -
Java基础-反射
反射就是把Java类中的各个成员映射成一个个的Java对象。即在运行状态中1、对于任意一个类,都能知道这个类的所有属性和方法。2、对于任意一个对象,都能调用它的任意一个属性和方法。这种动态获取信息以及动态调用对象方法的功能叫做Java的反射机制。1、对象创建过程为什么在介绍反射的时候需要先介绍对象创建过程?通过对象创建,引出Class对象通过javac命令把Java源代码编译成class文件。类加载器加载class文件到内存类元信息存放在方法区。(类元信息:类、方法等字节码信息)原创 2022-04-29 10:11:11 · 205 阅读 · 0 评论 -
JAVA TCP Socket实现互相通信
文章目录TCP Socket执行流程socket serversocket client测试功能TCP Socket执行流程服务器首先运行,等待连接建立创建欢迎socket和本地端口号绑定(客户端访问的指定端口号)在欢迎socket上阻塞的等待接受用户的连接客户端主动和服务器建立连接创建客户端本地套接字(隐式捆绑到本地port)指定服务器的IP地址和端口号,和服务器进程连接服务器收到来自客户端的请求,进行处理服务器接收来自客户端的请求,解除阻塞式等待,返回一个新的socket原创 2022-02-26 19:26:59 · 2322 阅读 · 2 评论 -
Java String Split多个参数
今天遇到一个需求,需要通过多个分隔符切割字符串,又不想多次切割,研究出了下面的用法:String x = "1&&2&&3||4||5&&6";String[] split = x.split("&&|\\|\\|");for (String s : split) { System.out.println("split-1:" + s);}String x2="hello;world,hi,";String[] split原创 2022-01-06 10:50:50 · 1424 阅读 · 1 评论 -
Java 克隆方式
java克隆目录Java克隆介绍代码实现CloneableBOCommonBOSerializableBOSerializableUtilMainTest为什么推荐选择深克隆?Java克隆介绍 在Java中存在两种克隆方式:深克隆:不仅克隆对象本身,还克隆对象包含的引用所指向的所有对象。(通过实现Serilable接口)浅克隆:仅克隆对象本身,不可隆对象中的引用指向的对象。(通过实现Cloneable接口)代码实现CloneableBOpackage clone;/** * 通过实原创 2021-12-31 15:51:20 · 2442 阅读 · 0 评论 -
Java是值传递(没有引用传递)!!!
很多程序设计语言(特别是,C++和Pascal)提供了两种参数传递的方式:值调用和引用调用。有些程序员认为Java程序设计语言对对象采用的是引用调用,实际上,这种理解是不对的。由于这种误解具有一定的普遍性,所以下面给出一个反例来详细地阐述一下这个问题。 请问下面的employee1和employee2交换引用地址了吗?public static void main(String[] args) { Employee employee1 = new Employee("张三",15原创 2021-08-09 17:32:01 · 78 阅读 · 0 评论 -
Java核心技术:卷1基础知识(第十版)笔记一:基础设计结构
文章目录基本程序设计结构数据类型整型浮点类型char类型Unicode和char类型boolean类型变量运算符数学函数和常量数值类型之间的转换位运算符字符串字符串拼接输入输出文件输入与输出控制流程大数值数组基本程序设计结构数据类型整型Java提供了4种整形,byte 1字节short 2字节int 4字节long 8字节 在Java中,整型的范围与运行Java代码的机器无关。这就解决了软件从一个平台移植到另一个平台,或者在同一个平台中的不同操作系统之间进行移原创 2021-08-06 18:47:48 · 568 阅读 · 0 评论 -
一个简单的死锁示例
前言: 前端时间面试美团的时候,面试官出了这样一道题:手写一个死锁。。。。 我只记得是资源互斥、抢夺导致的,却没有手动写过,导致没写出来。 死锁产生条件:互斥;请求的资源是互斥的,当被一个线程使用时,其余线程不可使用。请求和保持;线程拥有资源1,去请求资源2。若此时资源2无法获取,线程进入“请求资源2且保持资源1”的状态。循环等待多个线程同时请求对方资源,同时又持有对方所需资源,形成一个循环。不剥夺线程持有资源只能自己释放,不能被剥夺。 死原创 2021-07-13 11:10:34 · 490 阅读 · 0 评论 -
EasyExcel读取Excel简单Demo
目录MavenExcelDemoDataDemoDataListenerDemoMain执行结果Maven<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version></dependency><dependency>原创 2021-05-31 15:35:34 · 750 阅读 · 1 评论 -
Lambda表达式
文章目录简介语法作用域实例注意简介Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。语法(parameters) -> expression 或 (parameters) ->{ statements; }以下是lambda表达式的重要特征:可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。可选的参数圆括号:原创 2021-05-14 18:17:35 · 156 阅读 · 0 评论 -
面向对象设计原则
面向对象设计原则概述软件的可维护性和可复用性是两个非常重要的用于衡量软件质量的属性,软件的可维护性是指软件能够被理解、改正、适应及扩展的难易程度,软件的可复用性是指软件能够被重复使用的难易程度。面向对象设计原则也是后续设计模式学习的基础,每一个设计模式都符合某一个或多个面向对象的设计原则,面向对象设计原则是用于评价一个设计模式的使用效果的重要指标之一。单一职责原则一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中。在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用原创 2021-04-27 15:38:48 · 81 阅读 · 0 评论 -
设计模式概述
设计模式概述什么是模式?模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。什么是软件模式?GOF(Gang of Four)将模式的概念引入软件工程领域,标志着软件模式的诞生。软件模式并不仅限于设计模式,还包括架构模式、分析模式和过程模式等,实际上在软件生存周期的每一个阶段都存在着一些被认同的模式。软件模式是在一定条件下的软件开发问题和解法。软件模式与具体的应用领域无关,在模式发现过程中要遵循大三律(Rule of There),即只有经过三个以上不同领域的系统的校验,原创 2021-04-27 15:37:52 · 124 阅读 · 0 评论 -
Map从入门到性能优化
文章目录一、Map简介二、Map的常用方法三、HashMap3.1 基本用法3.2 基本原理(Entry基本介绍)3.3 构造方法(map初始化及扩容)3.3.1 无参构造方法3.3.2 单参数构造方法3.3.3 双参数构造方法3.4 几种遍历3.4.1 ketSet3.4.2 values3.4.3 entrySet3.4.4 iterator3.4.5 性能分析3.4.5.1 key3.4.5.2 value3.5 常用方法四、LinkedHashMap五、TreeMap六、总结一、Map简介 M原创 2020-11-07 22:21:25 · 1549 阅读 · 0 评论 -
上传项目到GitHub详细教程
文章目录一、简介二、操作步骤1、新建GitHub仓库2、安装Git3、配置本地Git仓库4、将本地Git仓库连接到远程GitHub仓库5、GitHub仓库的更新提交三、总结一、简介 由于公司用的版本管理工具是SVN,而且之前学习做项目也都是用的SVN。所以对目前相当火热的Git的了解也就仅局限于教程。 但是一直就感觉教程上的知识很片面,很多问题只有实操才会暴露,在最近准备每天打卡LeetCode之际,打算将我做的题记录在一个项目里,保管在GitHub上。 一是锻炼了算法思维,二是熟悉了Git操原创 2020-10-13 14:54:41 · 1261 阅读 · 0 评论 -
java小技巧 ----- 边工作边总结,持续更新ing
java小技巧1、尽量使用StringUtils.isBlank代替StringUtils.isEmpty2、多个if且判断的是常量时,用switch代替if3、当需要拼接字符串时,String.format("获取失败 key%s", 变量)、 “” + “” 、StringBuilder的思考。4、操作出现异常时,不要返回null和new空对象。而是应该抛异常。5、前台查询条件比较多时,使用动态sql而不是手动判断拼接sql。7、sprin6、常量尽量统一,不要多个项目下都有同一个常量。原创 2019-12-07 12:25:36 · 164 阅读 · 0 评论 -
GET和POST本质上有什么区别?
转自:https://baijiahao.baidu.com/s?id=1620934682611653374&wfr=spider&for=pc不知道各位读者在面试的时候,有没有被问过这个问题:“请说一下GET和POST两者的本质区别”。基本上做过WEB开发的,对这个问题,都可以回答出一堆的区别。比如:最直接的区别,GET请求的参数是放在URL里的,POST请求参数是放在请...转载 2019-08-13 14:55:21 · 204 阅读 · 0 评论 -
SSM+Oracle+Maven框架
最近属于公司考核期,让使用SSM搭建一个系统。要求使用Oracle数据库。在这里把自己整理的框架分享一下。SSM+Maven+Oracle+Log4j。只是写了一个简单的登陆界面。数据库是train,表是person。具体的可以下载项目看一下,就一个简单的示例框架。 框架地址如下:链接: https://pan.baidu.com/s/1GFhggLmRyP0UjOXG2JCAqw 提取...原创 2019-07-09 10:41:42 · 408 阅读 · 0 评论 -
String、InputStream、OutputStream格式转换
1、String –> InputStreamInputStream stream = new ByteArrayInputStream(str.getBytes());或者ByteArrayInputStream stream= new ByteArrayInputStream(str.getBytes());2、InputStream–>StringInputStre...原创 2019-04-04 09:53:47 · 6141 阅读 · 0 评论 -
可用的空的ssm框架(前后台已跑通,maven管理)
可用的空的ssm框架(前后台已跑通,可以直接导入使用,应该没问题)原创 2019-03-24 19:30:30 · 333 阅读 · 0 评论 -
Java开发小问题
专门开个贴记录一下在公司实习过程中踩过的一些坑吧。原创 2019-03-21 21:38:05 · 363 阅读 · 0 评论 -
java split 对”.” “\” "|" "*" "+"转义
我们平时转义 “|” 的时候一般都是 “\|” ,加上一个 “\” 这种。但是在regex里面 “\\" 表示一个 "\”,所以在split里面想表示“|”,需要写成“\\|”。其他的符号转义也同理。共勉。...原创 2019-03-05 11:08:53 · 4571 阅读 · 0 评论 -
java多线程的使用
java新建线程的简单示例本博客内容较基础,适用于java基础比较薄弱的人群。通过这篇文章可以让你学会简单的创建线程的方法。原创 2018-12-21 10:35:17 · 347 阅读 · 0 评论 -
冒泡排序、选择排序的简单实现
一、冒泡排序 依次比较相邻的两个数,将小数放在前面,大数放在后面 。冒泡排序的核心是双循环,冒泡排序优点:比较简单,空间复杂度较低,是稳定的,缺点:时间复杂度高 O2;private void kuaisu(int[] sort){ for(int i=1;i<sort.length;i++){ for(int j=0;j<so...原创 2019-04-15 11:00:21 · 217 阅读 · 0 评论 -
单例模式的简单介绍及写法
单例模式是最常用到的设计模式之一,熟悉设计模式的朋友对单例模式都不会陌生。一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式。但是除了这两种方式,本文还会介绍其他几种实现单例的方式,让我们来一起看看吧。简介 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某...转载 2019-04-14 23:09:43 · 473 阅读 · 0 评论 -
菱形继承问题
在java中只允许单继承,至于原因就需要牵扯到“菱形继承问题”。菱形继承问题 在介绍之前首先看一张图: 在上面这张图中看一看出,如果classC同时继承了classA和classB。那么如果superClass有一个方法test();classA和classB都对该方法进行了重写,那么如果classC需要引用该方法,编译器将不能识别你要调用的是哪个父类中的方法。这就是著名的菱形...原创 2019-04-14 21:54:38 · 415 阅读 · 0 评论 -
final,finally,和 finalize 三者之间有什么不同?
1、final修饰符(关键字)。 被final修饰的类不能被继承。被final修饰的变量在使用的过程中不被修改。被声明为final的变量必须在声明时给出变量的初始值,而在以后的引用中只能读取。被final声明的方法也同样只能使用,即不能方法重写。2、finally finally是在异常处理时提供的用来执行必须要执行的操作。不管有没有异常被抛出、捕获,finally块都会被执行。try块...原创 2019-04-14 21:46:37 · 578 阅读 · 0 评论 -
UUID生成策略
uuid是在一定范围内由机器生成的一串数据,根据网卡MAC地址、时间戳、命名空间、随机数等条件由机器自动生成。在一定程序上避免了数据重复。 下面简单介绍一下UUID的生成策略。导包:import java.util.UUID;生成方法:String s = UUID.randomUUID().toString();生成的值:eb8ed5f2-4030-48ac-9181-e651...原创 2019-09-06 12:48:07 · 916 阅读 · 0 评论 -
String和TimeStamp的相互转换
项目中用到的操作的数据格式是String,但是数据库字段保存的是TimeStamp。 所以就需要我们在保存数据库之前进行格式转换。之前也在百度上搜了一些方法去转换。虽然看上去也是生成了TimeStamp格式,但是保存数据库还是失败。 后来找同事要的转换格式的方法,确认可用。Timestamp timestamp = new Timestamp(DateUtils.stringToDa...原创 2019-09-06 12:55:21 · 5301 阅读 · 0 评论 -
SpringBoot整合Jpa项目(含Jpa 原生sql语句介绍)
1、插入语句@Transactional @Query(value = "insert into number_rule values(?1,?2)", nativeQuery = true)@Modifying int insertRule(int nums,int rule);2、更新语句@Transactional@Query(value = "update number_c...原创 2019-08-30 16:44:56 · 5051 阅读 · 1 评论 -
多线程:解决Runnable接口无start()方法的问题
run():线程对象调用run方法不开启线程。仅是对象调用方法。start():线程对象调用start开启线程,并让jvm调用run方法在开启的线程中执行。 所以如果仅仅是调用run方法的话,就相当于还是单线程,会顺序执行。 但是在Test类实现Runnable接口之后,Test类是没有start方法的,只有run方法。这时调用run方法也仅仅是调用一个普通方法,不会开启新线程。 ...原创 2019-08-29 12:57:03 · 3830 阅读 · 3 评论 -
获取任意区间随机数
还记得以前就经常遇到这个问题,每次都查,记录一下。Random random = new Random();int ra = random.nextInt(72); 上面的方法生成的随机数范围时[0,72)。闭开区间:包括0,不包括72。 nextInt(72);即生成范围为72的随机数。 还是举例说明吧。求区间5-8;包括5,包括8Random random = ...原创 2019-08-30 16:23:23 · 1310 阅读 · 0 评论