- 博客(48)
- 收藏
- 关注
原创 Linux下安装Apache IoTDB
官方给出三种安装方式,这里只演示使用二进制文件安装。 ①临时修改,重启服务器后失效 ②永久修改,重启服务器后不失效在 /etc/profile 中增加一行 , 然后运行 命令让修改立即生效。注意:/etc/profile 文件是所有系统用户的配置文件, 修改后会影响当前系统的所有注册用户如果只需要当前用户生效:在 /etc/security/limits.conf 最后增加如下两行记录:修改完成后保存, 退出当前用户并重新登录(不用重启服务器), 当前修改就会生效。使用查看当前系统的限制值:
2022-06-05 15:13:29 1543 1
原创 Java8 Stream API,纵享丝滑
引言Java8中有两大最为重要的改变。第一个是 Lambda 表达式;另外一个则是 Stream API。Stream API ( java.util.stream) 把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充,因为Stream API可以极大提供Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。 使用Stream API
2022-05-16 23:23:27 514
原创 Java8如何使用Lambda表达式简化匿名内部类
函数式接口(FunctionalInterface)函数式接口简介只包含一个抽象方法的接口,称为函数式接口。我们可以通过Lambda表达式来创建该接口的对象。如果Lambda表达式抛出一个非运行时异常,那么该异常需要在目标接口的抽象方法上进行声明。Java8中用@FunctionalInterface来检查函数式接口,当然我们也可以在自己写的接口上使用这个注解来检查接口是否是函数式接口。在java.util.function包下定义了许多函数式接口。Java内置的四大核心函数式接口
2022-05-07 22:38:16 1255
原创 Java中常用日期API的前世今生
介绍API之前,先了解下几个基本知识。计算世界时间的主要标准有:UTC(Coordinated Universal Time)协调世界时:是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。GMT(Greenwich Mean Time)世界时:也称为格林威治标准时间,格林威治位于本初子午线上。CST(Central Standard Time)中央标准时间:CST可视为美国、澳大利亚、古巴或中国的标准时间。Java中的时间是从 1970 年 1 月 1 日 00:00:00
2022-05-04 11:35:01 841
原创 记Java如何获取MAC地址
MAC地址简单认识MAC地址也叫物理地址、硬件地址,由网络设备制造商生产时烧录在网卡(Network lnterface Card)的EPROM(一种闪存芯片,通常可以通过程序擦写)。IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32位的,而MAC地址则是48位的 ,通常表示为12个16进制数,如:00-16-EA-AE-3C-40就是一个MAC地址,其中前3个字节,16进制数00-16-EA代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3个字节,16进制数AE-
2022-04-17 22:20:20 12929 10
原创 细品ArrayList扩容机制
之前学习Java基础知识的时候了解到ArrayList底层是数组实现的,默认的初始化容量为10,且有自动扩容的机制。现在通过代码来研究下实现的细节。ArrayList扩容现象演示首先通过简单的测试代码看看初始化及扩容现象,测试代码如下:@Testpublic void test3() { List<Integer> list = new ArrayList<>(); list.add(0); System.out.println("********
2022-04-10 22:07:41 4954
原创 ConcurrentModificationException学习记录
ConcurrentModificationException位于java.util包下,中文意思就是并发修改异常。当一个线程在遍历集合时,另一个线程对集合进行修改(添加或删除元素),此时遍历过程可能会出现问题。为了避免这类问题,某些迭代器在检测到这种情况时会抛出ConcurrentModificationException,这些迭代器就叫做fail-fast(快速失败)迭代器。注意:此异常并不总是表示对象被不同的线程同时修改。 如果单个线程使用违反对象合同的方法调用集合,也可能会抛出此异常。例如,
2022-04-01 22:35:20 584
原创 Nginx实战学习之负载均衡
引言一个简单的请求响应过程:客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,尤其现在处于大数据时代,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?最直观的解决办.
2021-12-13 21:34:05 2501
原创 Nginx实战学习之反向代理
反向代理基本概念反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,也就是使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。简单地说,当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。对外来说反向代理服务器就是一个Web服务器,但是它并
2021-12-02 21:49:07 3699 2
原创 Java网络编程的一些简单实现
Socket概述Socket,套接字,就是两台主机之间逻辑连接的端点。Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议、本地主机的IP地址、本地进程的协议端口、远程主机的IP地址、远程进程的协议端口。Socket实际上是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。要通过互联网进行通信,至少需要一对套接字,其中一个
2021-11-23 21:13:44 1628
原创 Object类中方法的基本介绍
Object类是所有Java类的根父类。如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类先来看看帮助文档的介绍:clone()方法protected native Object clone() throws CloneNotSupportedException;clone方法的作用就是创建并返回对象的一个副本,也就是copy。创建同一个类的一个新对象,并将原有对象的属性值赋给新的对象(浅拷贝)。一个类的对象想要调用clone方法,
2021-10-12 00:23:20 171
原创 快速在Linux中安装Nginx
1.下载所需的依赖yum install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel2.下载nginx压缩包wget http://nginx.org/download/nginx-1.16.1.tar.gz3.解压缩,一般解压到/usr/local目录下tar zxvf nginx-1.16.1.tar.gz4.编译安装进入到解压缩的目录(路径很关键)cd /usr/loc
2021-09-12 22:09:33 292
原创 解读Java中的流程控制
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。流程控制方式采用结构化程序设计中规定的三种基本流程结构:顺序结构选择结构循环结构顺序结构顺序结构:程序从上到下逐行地执行,中间没有任何判断和跳转。一个简单应用:Java中定义成员变量时采用合法的前向引用,即变量先定义再使用选择结构选择结构:根据条件,选择性地执行某段代码。有if…else和switch-case两种分支语句。if-else结构if语句有三种形式:结构一:if(
2021-08-29 16:51:56 179
原创 Java实现二分查找算法
什么是二分查找算法?二分查找也称为折半查找,顾名思义,也就是将查找范围缩小一半的查找算法。那么具体是怎么实现呢?首先我们要明确一点,二分查找针对的是有序序列的查找。可以是从小到大排序也可以是从大到小排序,本文就以从小到大排序的数组为例子。我们先确定几个关键的量:首尾元素的下标,既然要将范围缩小,那么首尾下标肯定要知道啊,这样才能求出中间元素的下标。需要查找的变量,当然这和定义的数组必须是相同类型。数组,自定义一个有序数组或者无序数组然后手动将其排序,在其中进行查找。二分查找的过程是这.
2021-08-19 23:23:25 354
原创 Linux之如何使用Vim编辑器
什么是Vim编辑器Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。Linux中必须要会使用Vim(查看内容,编辑内容,保存内容)简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim 则可以说是程序开发者的一项很好用的工具。所有的 Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在。vim通过一些插件可以实现和IDE一样的功能。vim键盘图:三种.
2021-08-15 21:09:13 2478
原创 走近Redis持久化:RDB和AOF
Redis持久化Redis是一个内存数据库,如果服务器进程出现异常状态导致退出之后,服务器中的数据库状态也会消失,必须将内存中的数据状态持久化到硬盘中。因此,redis提供了数据持久化的功能。RDB(Redis DataBase)什么是RDB?RDB就是在一段时间内达到一定的数据修改次数,就把内存中的数据集快照写入磁盘。Redis默认是开启RDB的,且会将快照保存到一个名为dump.rdb的文件中,该文件默认是与redis启动命令(redis-server)在同一目录下的。RDB持久化的原理
2021-08-05 19:01:28 129
原创 Java基础语法——变量的使用
概述变量是什么?变量是程序中最基本的存储单元。包含变量类型、变量名和变量的值。变量是用于在内存中保存数据。使用变量应该注意些什么?Java中每个变量必须先声明后使用使用变量名来访问这块区域的数据变量的作用域:其定义所在的一对{}内变量只有在其作用域内才有效同一个作用域内不能定义重名的变量声明变量语法:<数据类型> <变量名称>例如:int var;变量的赋值语法:<变量名称> = <值>例如:var = 10
2021-07-30 09:07:01 595
原创 Java基础语法——关键字和标识符的使用
关键字和保留字关键字关键字(keyword)的定义和特点定义:被Java 语言赋予了特殊含义,用做专门用途的字符串(单词)特点:关键字中所有字母都为小写Java中关键字及其用途如下:作用关键字用于定义数据类型的关键字class,interface,enum,byte,short,int,long,float,double,char,boolean.void用于定义流程控制的关键字if,else,switch,case,default,while,do,for,b
2021-07-25 21:46:50 158
原创 简单认识一下Java多线程
几个基本概念程序、进程、线程程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程(process)是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。如:运行中的QQ,运行中的MP3播放器。进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域。打开任务管理器就可以查看我们电脑上的进程。线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。若一个进程同一时
2021-07-14 22:30:35 506
原创 Java中的三种注释类型
注释:用于说明解释程序的文字就是注释。Java中的注释有三种:单行注释多行注释文档注释(Java特有)注释的作用有什么?主要就是提高了代码的阅读性,是调试程序的重要方法。当然,写注释也是一种良好编程习惯。可以将自己的思想通过注释先整理出来,再用代码去体现。来看看具体的使用吧!单行注释格式: //注释文字多行注释格式: /* 注释文字 */下面给出单行注释和多行注释的示例://单行注释public class HelloWorld{ /* 程序入口
2021-03-31 15:01:02 7581
原创 第一个Java程序—HelloWorld
工欲善其事必先利其器,在写第一个Java程序之前,需要安装JDK以及配置环境变量,具体步骤见 Windows中配置Java环境变量。环境变量搭建完成了,是不是已经迫不及待想敲几行代码跑跑看?走起!1.在英文路径下创建一个记事本文件,命名为HelloWorld.java。这个文件是存放java代码的文件,称为源文件。这里是将文件类型改为java类型,并不单单是名字。这里的.java是文件类型,有的电脑上可能文件后缀名给隐藏了,虽然文件名里有.java但不是个java文件。可以点击查看,将文件扩展
2021-03-23 10:16:53 3702
原创 Windows中配置Java环境变量
JDK下载直接去Oracle官网找到对应自己电脑的版本下载即可,傻瓜式安装。嫌官网下载慢可以去网盘下载:https://pan.baidu.com/s/1fWoP-xmTPSCnHhbdB9smQg提取码:ozwr现在尝试java命令是否能够执行:在dos命令行中敲入javac,出现错误提示:错误原因:当前执行的程序在当前目录下如果不存在,windows系统会在系统中已有的一个名为Path的环境变量指定的目录中查找。如果仍未找到,会出现以上的错误提示。所以进入到 jdk安装路径\bin目录下
2021-03-21 12:44:43 504
原创 初识Java语言
简介Java是SUN(Stanford University Network,斯坦福大学网络公司 ) 1995年推出的一门高级编程语言。是基于C++开发的。Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java一开始富有吸引力是因为Java程序可以在Web浏览器中运行。这些Java程序被称为Java小程序(applet)。applet使用现代的图形用户界面与Web用户进行交互。 applet
2021-03-07 21:18:55 177
原创 浅析SpringBoot静态资源访问
Springboot中SpringMVC的web配置都在WebMvcAutoConfiguration这个配置类中。WebMvcAutoConfigurationAdapter类中有一个addResourceHandlers方法用来添加资源。@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) { //如果我们自定义了资源导入的位置,则默认的配置都将会失效 //自定义spring.resour
2021-03-03 16:30:46 104 2
原创 SpringBoot之多环境切换与配置文件位置
profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境,使用不同的配置。我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本;例如:application-test.properties 代表测试环境application-dev.properties 代表开发环境application-pro.properties 代表生产环境但是Springboot不会去加载这些配置文件,默
2021-03-02 11:25:58 398
原创 详解SpringBoot中如何扩展SpringMVC
SpringMVC的自动配置参见官方文档https://docs.spring.io/spring-boot/docs/2.1.18.RELEASE/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-auto-configurationSpring Boot为Spring MVC提供了自动配置,可与大多数应用程序完美配合。自动配置在Spring的默认值之上添加了以下功能:包含C
2021-03-01 10:52:13 252 1
原创 SpringBoot配置页面国际化功能
若要让网站以不同语言呈现,可使用国际化(internationalization)功能。基本使用准备工作首先得在IDEA中设置统一编码,settings->Editor->file Encoding当然还要导入坐标,可以根据自己需求进行更改<dependencies> <dependency> <groupId>org.springframework.boot</groupId>
2021-02-28 11:35:02 460
原创 超详细——SpringBoot整合Spring Security
简介Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的实际标准。Spring Security是一个框架,致力于为Java应用程序提供身份验证和授权。与所有Spring项目一样,Spring Security的真正强大之处在于可以轻松扩展以满足自定义要求。SpringBoot底层默认的安全框架技术选型就是Spring Security,我们只需要简单的配置即可实现安全管理。特征全面和可扩展的身份验证和授权支持防御会话固定,
2021-02-26 16:44:29 1010
原创 SpringBoot中如何使用JDBC
测试数据源1、新建SpringBoot项目,引入web模块,JDBC模块以及MySQL驱动。2、编写配置文件连接数据库 spring: datasource: username: root //密码需要加上引号,否则报错 password: '1111' url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezo
2021-02-25 18:42:26 1272
原创 SpringBoot如何整合Druid
简介Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。Druid 可以很好的监控数据库池连接和 SQL 的执行情况,天生就是针对监控而生的 数据库连接池。Github地址:https://github.com/alibaba/druid/com.alibaba.druid.pool.DruidDataSource基本配置参数为:
2021-02-24 10:08:14 228
原创 如何在SpringBoot中集成Swagger
简介Swagger是一个功能强大且易于使用的API开发人员工具套件。主要是为了解决前后端分离所带来的问题:前后端接口文档更新不及时,前端和后端无法及时协商解决问题。Swagger:号称世界上最流行的API框架RestFul API文档在线生成工具—>>>API文档与API同步更新可以直接运行,可以在线测试API接口支持多种语言:(Java,PHP…)Swagger的简单使用1、创建SprinBoot-Web项目,导入相关依赖在项目中使用Swagger需要spri
2020-11-17 16:34:05 318
原创 快速上手SpringBoot整合Mybatis
本文基于SpringBoot2.2.11整合Mybatis1、创建一个新的SprinBoot工程,导入相应的模块查看下依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependenc
2020-11-06 15:10:48 223
原创 IDEA构建第一个SpringBoot程序
创建基础项目说明Spring官方提供了非常方便的工具供我们快速构建应用。Spring Initializr : https://start.spring.io/项目创建方式一:使用Spring Initializr的Web页面创建1、打开 https://start.spring.io/2、填写项目信息3、点击”Generate Project“按钮生成项目;下载此项目4、解压项目包,并用IDEA以Maven项目导入,一路下一步即可,直到项目导入完毕。5、如果是第一次使用,可能速度会比
2020-11-03 09:40:12 108
原创 聊聊Java线程池
池化技术程序运行的本质:占用系统的资源。池化技术能够减少资源对象的创建次数,提高程序的性能,特别是在高并发下这种提高更加明显。使用池化技术缓存的资源对象有如下共同特点:1,对象创建时间长;2,对象创建需要大量资源;3,对象创建后可被重复使用。使用线程池的优势(1)降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;(2)提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;(3)方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存
2020-10-23 23:08:21 107
原创 关于JUC三大常用辅助类
1.CountDownLatch首先我们来看帮助文档从帮助文档中我们可以看出CountDownLatch实际上就是一个减法计数器,通过await方法阻塞,直到计数值减到0之后,其他线程才得以执行。通过一个小demo试试public class CountDownLatchDemo { public static void main(String[] args) throws Exception { //总数是6,必须要执行任务的时候再使用 CountDo
2020-10-21 16:38:57 175
原创 排序算法之插入排序
插入排序的基本思想插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它依次与有序表的元素进行比较,将它插入到有序表中适当的位置,是指成为新的有序表,即不断扩张有序表。插入排序的过程图代码演示public class InsertSort { public static void main(String[] args) {
2020-10-02 11:06:44 158
原创 Java实现二叉树的三种遍历方式
二叉树遍历的说明前序遍历:先输出父节点,然后遍历左子树,再遍历右子树中序遍历:先遍历左子树,然后输出父节点,再遍历右子树后序遍历:先遍历左子树,然后遍历右子树,再输出父节点二叉树遍历的具体实现步骤首先创建一棵二叉树1.前序遍历:1.1先输出当前节点(初始为根节点)1.2如果左子节点不为空,则递归继续前序遍历1.3如果右子节点不为空,则递归继续前序遍历2.中序遍历:2.1如果当前节点的左子节点不为空,则递归中序遍历2.2输出当前节点2.3如果当前节点的右子节点不为空,则递归中序
2020-09-08 15:22:46 783
原创 排序算法之选择排序
基本介绍首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它和数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法就叫做选择排序,简单来说就是不断寻找剩余元素的最小值放到前面。过程分析(图解)原始数据为:3, 1, 6, 2, 5代码实现public class SelectSort { public static void main(String[] args)
2020-08-01 14:27:16 165
原创 排序算法之冒泡排序
基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对排序序列从前往后(从下标较小的元素开始)依次比较相邻元素的值,如果发现逆序则交换,使值较大的元素逐渐从前往后移动,就像水底的气泡逐渐往上冒。简单来说就是:重复寻找序列中最大值放在序列最后的操作。实现思路假设有n个元素需要排序,实际只需要进行n-1次寻找最大值并移动到右侧的操作,最后剩余的1个元素位置自然是确定的,可以使用一层循环控制这n-1次的操作。然后就是具体的实现相邻元素的比较和交换的操作了,这也需要一层循环。分析过程: 原数
2020-07-30 14:12:52 268
原创 Java单链表模拟栈(尾插)
思路分析:1.首先需要定义一个结点类,用来作为栈存储数据的空间。由结点id(用于标识结点,根据容量从0递增),下个结点,数据三个部分构成。2.初始化栈时,定义一个size变量,来指定栈的容量。定义一个辅助的结点变量flag来指向链表最后一个结点的下一个结点,即初始化栈顶,当然flag也始终指向栈顶。(初始化的flag并不算在栈的空间之中,只是作为一个约定而已)3.由于选择的是尾插法进行入栈操作,每次入栈和出栈时需要遍历整个栈空间即链表去按照id寻找对应的结点来移动栈顶,所以定义一个辅助结点变量top
2020-07-24 19:38:40 334
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人