java基础
文章平均质量分 66
不定期分享一些java基础以及日常踩的坑。
锋声
遇坑填坑
展开
-
HashMap遍历、性能、原理以及安全性
HashMap遍历、性能、原理以及安全性HashMap 遍历1.迭代器 EntrySet2.迭代器 KeySet3.ForEach EntrySet4.ForEach KeySet5.Lambda6.Streams API 单线程7.Streams API 多线程性能测试性能原理分析安全性测试1.迭代器方式2.For 循环方式3.Lambda 方式4.Stream 方式小结总结HashMap 遍历HashMap 遍历从大的方向来说,可分为以下 4 类:迭代器(Iterator)方式遍历;For E原创 2021-12-15 16:25:52 · 258 阅读 · 0 评论 -
5种全局ID生成方式、优缺点及改进方案
5种全局ID生成方式、优缺点及改进方案1、全局唯一id介绍全局唯一id特点:2、常见全局唯一id生成策略1、数据库自增长序列或字段生成id2、UUID3、Redis生成ID4、zookeeper生成ID5、Twitter的snowflake算法1、全局唯一id介绍系统唯一id是我们在设计阶段常常遇到的问题。在复杂的分布式系统中,几乎都需要对大量的数据和消息进行唯一标识。在设计初期,我们需要考虑日后数据量的级别,如果可能会对数据进行分库分表,那么就需要有一个全局唯一id来标识一条数据或记录。生成唯一id的原创 2021-11-30 16:51:09 · 855 阅读 · 0 评论 -
Java 几个常用工具类库
Java 几个常用工具类库1、Apache相关IOUtils类2、Apache相关FileUtils3、StringUtils (org.apache.commons.lang.StringUtils)4、Apache 相关EntityUtils5、Apache相关StringUtils(org.apache.commons.lang3.StringUtils)6、Apache 相关FilenameUtils7、Spring相关的StringUtils(org.springframework.util.St原创 2021-11-29 14:46:28 · 621 阅读 · 0 评论 -
Java 泛型通配符 T,E,K,V,?
Java 泛型通配符 T,E,K,V,?1、前言2、泛型带来的好处3、泛型中通配符5、Class和 Class区别1、前言Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。2、泛型带来的好处在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转原创 2021-11-29 11:45:37 · 87 阅读 · 0 评论 -
23种设计模式通俗理解
23种设计模式通俗理解1、根据目的来分2、根据作用范围来分3、GoF的23种设计模式的功能1、FACTORY 工厂方法2、BUILDER建造者模式3、FACTORY METHOD抽象工厂4、PROTOTYPE 原型模式5、SINGLETON 单态模式6、ADAPTER 适配器模式7、BRIDGE 桥梁模式8、COMPOSITE合成模式9、DECORATOR装饰模式10、FACADE门面模式11、FLYWEIGHT享元模式12、PROXY代理模式13、CHAIN OF RESPONSIBLEITY责任链模式1原创 2021-11-27 17:15:29 · 249 阅读 · 0 评论 -
巧用 Java 8 的 Stream 来优化代码,太简洁了
巧用 Java 8 的 Stream 来优化代码,太简洁了!1、流如何简化代码2、什么是流3、如何生成流1.通过集合生成,应用中最常用的一种2.通过数组生成3.通过值生成4.通过文件生成5.通过函数生成 提供了iterate和generate两个静态方法从函数中生成流4、流的操作类型1.中间操作2.终端操作5、流使用1.中间操作2.终端操作6、总结Java8的新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读1、流如原创 2021-11-27 16:13:49 · 363 阅读 · 0 评论 -
Java 中的 BigDecimal 运算,如何解决精度丢失问题?
Java 中的 BigDecimal 运算,如何解决精度丢失问题?1、我们先看一个例子2、BigDecimal中的一些方法3、值得注意的是如果要想无精度丢失的情况下计算结果,那么需要把double,float类型的参数转化为String类型的。4、在一般开发过程中,我们数据库中存储的数据都是float和double类型的。1、我们先看一个例子可以看到在Java中进行浮点数运算的时候,会出现丢失精度的问题。那么我们如果在进行商品价格计算的时候,就会出现问题。很有可能造成我们手中有0.06元,却无法购买一原创 2021-11-27 14:58:52 · 1960 阅读 · 0 评论 -
Tomcat安装及配置(最新保姆级)
Tomcat安装及配置一、什么是Tomcat二、Tomcat的下载三、配置环境变量四、验证是否配置成功一、什么是TomcatTomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运原创 2021-09-28 17:57:18 · 1209 阅读 · 0 评论 -
Maven安装与配置(最新保姆级)
Maven安装与配置一、官网下载二、配置环境变量三、配置本地仓库四、配置镜像五、测试一、官网下载1)官网下载地址https://maven.apache.org/download.cgiBinary是可执行版本,已经编译好可以直接使用。Source是源代码版本,需要自己编译成可执行软件才可使用。tar.gz和zip两种压缩格式,其实这两个压缩文件里面包含的内容是同样的,只是压缩格式不同tar.gz格式的文件比zip文件小很多,用于unix操作系统。zip格式用于Windows操作系统,原创 2021-09-28 17:32:37 · 1247 阅读 · 2 评论 -
JDK安装与配置(最新保姆级)
文章目录一、JDK安装1)官网下载2)安装步骤3)配置步骤一、JDK安装1)官网下载官网下载地址https://www.oracle.com/java/technologies/downloads/根据自己的系统版本下载提示登录ORACLE账户,如果没有就用邮箱注册一个登录后就可以下载了2)安装步骤傻瓜式安装,直接点击下一步即可。 注意:不建议安装到默认盘一般软件默认安装C盘,C盘是系统盘,安装太多软件系统会卡。不建议安装到中文目录中或者目录带空格很多国外开原创 2021-09-28 16:45:36 · 7208 阅读 · 0 评论 -
javaSE高级-JVM
javaSE高级-JVM正在更新中…原创 2021-09-13 09:31:17 · 67 阅读 · 0 评论 -
javaSE高级-JUC并发编程(回顾)
文章目录1、什么是JUC2、进程和线程2.1、深入理解进程和线程2.2、扩展:java可以开启线程吗?2.3、并发与并行2.4、线程的状态2.5、wait和sleep3、Lock锁3.1、开发中错误开启线程的方法3.2、传统的 synchronized3.3、Lock锁3.4、Synchronized 和 Lock4、生产者和消费者4.1、synchronized版本4.2、存在问题(虚假唤醒)4.3、Lock版4.4、Condition的优势5、8锁的现象6、集合类不安全7、Callable8、Count原创 2021-09-11 17:51:34 · 224 阅读 · 0 评论 -
javaSE进阶-GUI编程(回顾)
1、简介Gui的核心技术:Swing AWT不流行主要原因:因为界面不美观。需要 jre 环境!为什么我们要学习?可以写出自己心中想要的一些小工具。工作时候,也可能需要维护到swing界面,概率极小!了解MVC架构,了解监听!2、AWT2.1、AWT介绍AWT:抽象的窗口工具,包含了很多的类和接口元素:窗口、按钮、文本框java.awt包下#mermaid-svg-zD94iU3R7WJ9urtN .label{font-family:'trebuch原创 2021-09-07 17:35:10 · 251 阅读 · 0 评论 -
javaSE高级-注解和反射(回顾)
java基础-注解和反射原创 2021-09-06 23:41:27 · 396 阅读 · 6 评论 -
javaSE进阶-网络编程(回顾)
文章目录1、计算机网络概念2、网络通信要素:3、IP4、端口5、通讯协议6、TCP/IP6.1、文件上传6.2、Tomcat7、UDP7.1、发短信(需要IP地址)7.2、UDP 实现聊天7.3、在线咨询URL1、计算机网络概念计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接(有线性、无线)起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。网络编程的目的:传播交流信息数据交换、通信。想要达到这个效果,需原创 2021-09-06 22:08:29 · 204 阅读 · 0 评论 -
javaSE进阶-多线程(回顾)
文章目录一、线程简介1、多任务2、多线程3、程序.进程.线程4、Process与Thread5、核心概念二、线程实现1、线程创建(三种方法)1.1、继承Thread类(重要)1.2、实现Runnable接口1.3、实现Callable接口(了解)1.4、小结(Thread和Runnable对比)2、静态代理2.1、实现: 结婚案例2.2、总结2.3、好处3、Lamda表达式3.1、定义3.2、函数式接口的定义:三、线程状态1、线程五大状态:2、线程方法2.1、停止线程:2.2、线程休眠2.3、线程礼让2.4原创 2021-09-06 18:06:20 · 332 阅读 · 0 评论 -
javaSE进阶-I/O流(回顾)
正在整理中…原创 2021-09-06 10:13:52 · 58 阅读 · 0 评论 -
javaSE进阶-集合(回顾)
正在整理中…原创 2021-09-06 10:12:09 · 110 阅读 · 0 评论 -
javaSE进阶-常用类(回顾)
正在学习中…原创 2021-09-06 10:11:02 · 74 阅读 · 0 评论 -
javaSE进阶-异常(回顾)
异常软件程序在运行过程中,经常可能遇到异常问题,异常英文(Exception),意思是例外,这些例外情况需要我们写程序做出合理的处理,而不至于让程序崩溃。异常指程序运行中出现的不期而至的各种状况:文件找不到,网络连接错误,非法参数等。异常发生在程序运行期间,它影响了正常的执行流程。什么是异常实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等。我们的程序再原创 2021-09-06 00:50:50 · 97 阅读 · 0 评论 -
java基础-面向对象(回顾)
1、初识面向对象1.1、面向过程、面向对象1.1.1、面向过程步骤清晰简单,第一步做什么,第二部做什么…面向过程适合处理一些较为简单的问题1.1.2、面向对象思想物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。面向对象适合处理复杂的问题,适合处理需要多人协作的问题!对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象来分析整个系统。但是,具体到微观操作,仍然需要面向过程原创 2021-09-06 00:09:01 · 703 阅读 · 3 评论 -
java基础-数组(回顾)
Java数组1、数组的定义数组是相同类型数据的有序集合数组描述的是相同类型的若干数据,按照一定先后次序排序组合而成其中,每一个数据称作一个数组元素,每个数组元素可以通过下标访问它们1.1、数组的声明创建首先必须声明数组变量,才能在程序中使用数组。dataType[] arrayRefVar; //首选dataType arrayRefVar[]; //效果相同,但不是首选Java语言使用new操作符来创建数组,语法如下dataType[] arrayRefVar = new原创 2021-09-05 00:40:17 · 1670 阅读 · 4 评论 -
java基础-java入门(回顾)
java入门1、Java的诞生2、Java特性与优势1、简单性:java即C++的纯净版,没有头文件,没有指针运算,也不用分配内存,语法基于C2、面向对象:程序设计技术,万物皆对象3、可移植性:write once,run anywhere。跨平台性是它的独特优势4、高性能:及时编译,使某些代码的效率接近C++的效率5、分布式:java就是为网络分布式协议所设计的,它能处理很多TCP/IP协议上的东西,可通过URL打开网络上的资源,如同在本地打开我的电脑一样方便;java还支持远程方法调原创 2021-09-04 23:51:28 · 227 阅读 · 0 评论 -
java基础-方法(回顾)
Java方法1、何谓方法定义方法是语句的集合,它们在一起执行一个功能方法是解决一类问题的步骤的有序结合方法包含于类或对象中方法在程序中被创建,在其他地方被引用设计方法的原则方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法知完成1个功能,这样利于我们后期的扩展。2、方法的定义和调用方法的定义/*方法包含一个方法头和一个方法体。 修饰符:可选,定义了方法的访问类型,告诉编译器如何调用该方法。 返回值类型:方法可能原创 2021-09-04 18:02:33 · 58 阅读 · 0 评论 -
java基础-流程控制(回顾)
Java流程控制1、Scanner之前我们学的基本语法并没有实现程序和人的交互,Java给我们提供了一个工具类,可以获取用户的输入java.util.Scanner是Java5的新特征,我们通过Scanner类来获取用户的输入。基本语法Scanner s = new Scanner(System.in);通过Scanner类的 next()与 nextLine()方法获取用户的字符串,读取前一般用hasNext()与hasNextLine()判断是否还有输入的数据。//创建一个扫描原创 2021-09-04 17:04:44 · 54 阅读 · 0 评论 -
java基础-基础语法(回顾)
java基础语法1.注释、标识符、关键字2.数据类型3.类型转换4.变量、常量1、注释:平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己写的,但是当项目结构一旦复杂起来,我们就需要用到注释了。注释并不会被执行,是给我们写代码的人看的书写注释是一个非常好的习惯平时写代码一定要注意规范。单行注释 //多行注释 /* */文档注释 /** * */public class hello { public static void main(String[] args原创 2021-09-04 16:52:54 · 86 阅读 · 0 评论 -
java基础-初识计算机(回顾)
1、什么是计算机 1. 名称:Computer,全称电子计算机,俗称电脑。 2. 定义:能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。 3. 组成:由硬件和软件组成。 4. 形式:常见显示有台式计算机、笔记本计算机、大型计算机等。 5. 应用:科学计算、数据处理、自动控制、计算机辅助设计、人工智能、网络等领域。2、硬件及冯诺依曼结构2.1、计算机硬件组成:cpu,主板,内存,电源,主机箱,硬盘,显卡,键盘、鼠标,显示器。2.1、冯诺依曼结构3、软件及软件开发3.1原创 2021-09-04 14:36:37 · 72 阅读 · 0 评论 -
final,static,this,super 关键字总结
final 关键字final关键字,意思是最终的、不可修改的,最见不得变化 ,用来修饰类、方法和变量,具有以下特点:final修饰的类不能被继承,final类中的所有成员方法都会被隐式的指定为final方法;final修饰的方法不能被重写;final修饰的变量是常量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能让其指向另一个对象。说明:使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因原创 2021-05-22 16:46:03 · 80 阅读 · 0 评论 -
枚举类的基本使用
我们可以通过在枚举类型中定义属性,方法和构造函数让它变得更加强大。当我们调用短信验证码的时候可能有几种不同的用途,我们在下面这样定义:package com.test.enums;public enum SmsType { REGISTER(100000, "注册使用"), FORGET_PASSWORD(100001, "忘记密码使用"), UPDATE_PHONE_NUMBER(100002, "更新手机号码使用"); private final int .原创 2021-05-22 16:12:06 · 74 阅读 · 0 评论 -
如何正确的将数组转换为ArrayList?
1.直接使用Arrays.asList()Integer [] myArray = { 1, 2, 3 };List<Integer> myList= Arrays.asList(myArray);myList.add(4);//运行时报错:UnsupportedOperationExceptionmyList.remove(1);//运行时报错:UnsupportedOperationExceptionmyList.clear();//运行时报错:UnsupportedOperati原创 2021-05-22 15:57:28 · 4681 阅读 · 2 评论 -
@RequiredArgsConstructor注解,丢掉@Autowired,@Resource 让代码更简洁。
使用@RequiredArgsConstructor注解,丢掉@Autowired,@resource 让代码更简洁。使用注解之前要去下载lombok插件哦~import lombok.RequiredArgsConstructor;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import com.f原创 2021-05-22 14:58:50 · 1593 阅读 · 0 评论 -
解析xlsx,xls,csv文件
预览添加的报表@ApiOperation("预览添加的报表")@PostMapping("/preview")public List<UserExport> preview(MultipartFile file, Integer type) throws IOException, ParseException { BaseExport export = null; switch (type) { case 1: export = .原创 2021-04-27 16:56:04 · 345 阅读 · 0 评论 -
快排排序算法
快排排序算法冒泡排序算法的原理如下:先从数列中取出一个数作为基准数。分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复第二步,直到各区间只有一个数。public class QuickSort { /** * 根据下标交换数组的两个元素 * @param arr 数组 * @param index1 下标1 * @param index2 下标2 */ public static void swap(int[] arr原创 2020-09-09 13:12:16 · 110 阅读 · 0 评论 -
两层for循环,在内层循环中执行业务逻辑,跳出内层循环执行外层循环的下一个数据
两层for循环,在内层循环中执行业务逻辑,跳出内层循环执行外层循环的下一个数据List<String> strings = Arrays.asList("a","b","c");List<String> nums = Arrays.asList("1","2","3","4"); A:for(String str:strings){ for(String num:nums){ if("3".equals(num) && "c".equals(str))原创 2020-09-01 11:44:13 · 1616 阅读 · 1 评论 -
springboot项目,使用Hutool工具包导出excel文件
后端使用Hutool 导出excel文件@ApiOperation("导出报表")@GetMapping(value = "/excel", produces = {"application/xlsx"})public byte[] exportExcel(AdminExportQuery query) { PageResults rows = userExportService.adminList(query); List<UserExport> data原创 2020-09-01 11:55:14 · 2026 阅读 · 2 评论 -
冒泡排序算法(基础)
冒泡排序冒泡排序算法bai的原理如下:比较相bai邻的元素。如果第一个比第二个大,就du交换他们两个。对每bai一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 //冒泡排序算法 int[] arr = {6,2,4,5,2,1,3}; int i,j; for(int i = 0;i<arr.length-1;i++)原创 2020-09-09 11:37:03 · 154 阅读 · 0 评论