暂时未有相关云产品技术能力~
暂无个人介绍
2.3.3.2 密码加密存储 实际项目中我们不会把密码明文存储在数据库中。 默认使用的PasswordEncoder要求数据库中的密码格式为:{id}password 。它会根据id去判断密码的加密方式。但是我们一般不会采用这种方式。 所以就需要替换 PasswordEncoder。
0. 简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更加的简单。
EasyExcel是一款开源的Java处理Excel文件的工具库,它提供了简单易用的API,可以方便地读取、写入和操作Excel文件。下面是一些常见的EasyExcel应用场景: 读取Excel文件:使用EasyExcel可以轻松地读取Excel文件中的数据,并将其转换为Java对象或集合。你可以指定读取的起始行、列,还可以处理不同Sheet的数据。
1. EasyExcel 介绍 EasyExcel 官网介绍 传统操作Excel大多都是利用 Apach POI 进行操作的,但是 POI 框架并不完善,使用过程非常繁琐且有较多的缺陷: 动态操作Excel非常繁琐,对于新手来说,很难在短时间内上手; 读写时需要占用较大的内存,当数据量大时容易发生内存溢出问题(OOM); 基于上述原因,阿里开源出一款易上手,且比较节省内存的Excel操作框架:EasyExcel 注意:easyExcel底层使用POI实现的;
上一节讲述了 SpringBoot 实现 elasticsearch 索引操作,这一章节讲述 SpringBoot 实现 elasticsearch 查询操作。 1. 环境准备 案例用到的索引库结构
Git提供了一系列命令来进行远程仓库的操作。 下面是一些常用的Git远程仓库操作: 克隆远程仓库到本地:
Git是一个分布式版本控制系统,它允许多个开发者协同工作并管理代码的版本。远程仓库是存放在网络上的Git仓库,可以用于团队成员之间的代码共享和协作。 常见的远程仓库托管服务提供商有GitHub、GitLab和Bitbucket等。其中,码云(Gitee)是中国领先的代码托管平台,类似于GitHub,提供了在线的Git仓库托管服务。
在Git中,你可以使用以下命令来创建、切换、合并和删除分支: 分支创建与切换: 创建新分支:使用以下命令创建一个新的分支:
内容 我们现在使用Git可以简单理解为阶段性的使用Git保存一下自己写的代码,每次提交形成一个版本信息。但是你能想象出当一个团队所有人提交的版本信息汇集到一起后是什么样子吗?那版本的数量是数以千计的。尽管Git提供了一系列的操作帮助我们完成版本的操作,但是最终架不住版本太多看着乱啊。
在Git中,可以使用差异比较命令和版本回退命令来查看文件之间的差异并回退到早期的版本。 以下是对这些操作的简要解释:
在Git中,初始化工作区并使用add和commit命令是进行版本控制的基本操作。 下面是对这些操作的简要解释: 初始化工作区:在使用Git之前,需要先将项目目录初始化为Git仓库。在项目所在的目录下打开终端或命令行窗口,执行以下命令:
上一篇我们讲到:Git是一个分布式版本控制系统,常用于协同开发和版本管理的工具。它可以跟踪文件的修改、记录历史版本,并支持多人协同工作。通过Git,你可以轻松地创建和切换分支、合并代码、回滚修改等操作。 以下是Git一些常用的命令和功能:
01.GIT概述 Git是一个分布式版本控制系统,常用于协同开发和版本管理的工具。它可以跟踪文件的修改、记录历史版本,并支持多人协同工作。通过Git,你可以轻松地创建和切换分支、合并代码、回滚修改等操作。 以下是Git一些常用的命令和功能:
1、需求 需求:自定义dao层jdbc框架 为了方便程序员操作数据库,让程序员更关注于sql代码层面和业务层面
3 使用xpath技术结合DOM4J技术读取xml文件(了解) 1.概念介绍 问题:通过上面的案例我们发现有个小问题.就是获取标签的过程太过繁琐。我们需要一层一层的去获取。假设xml嵌套了50层的话,对于我们开发者来说是非常繁琐的。所以我们希望应该有这样的技术,一下子直接就能获取我们所需要的标签对象。这就是我们接下来需要学习的xpath技术。
1 XML解析 1.1 解析概述 当将数据存储在XML后,我们就希望通过程序获取XML的内容。我们使用Java基础所学的IO知识是可以完成的,不过需要非常繁琐的操作才可以完成,且开发中会遇到不同问题(只读、读写)。 人们为不同问题提供不同的解析方式,使用不同的解析器进行解析,方便开发人员操作XML。
7 Schema约束(能够看懂即可) 与dtd约束一样,schema它也是用来约束xml文件的。schema约束书写的时候,它遵守xml的语法规则。在书写schema的时候,就和书写xml文件的文档结构一样。 注意:书写schema文件的时候,它的文件扩展名是xsd。 1 书写schema约束
5 XML的组成:字符区(了解) 当大量的转义字符出现在xml文档中时,会使XML文档的可读性大幅度降低。这时如果使用CDATA段就会好一些。 CDATA (Character Data)字符数据区,格式如下:
1 XML概述 什么是XML 英文:Xtensible Markup Language 可扩展的标记语言,由各种标记(标签,元素)组成。 可扩展:所有的标签都是自定义的,可以随意扩展的。如:<abc/>,<姓名> 标记语言:整个文档由各种标签组成。清晰,数据结构化!
1)为什么需要线程池? 重复利用线程资源,减少创建线程和销毁线程系统所花费的开销,也可以限制请求过多带来的系统压力。在一些场景也可以增加处理的速度。 2)线程池内部怎么保证线程安全? 也就是说一个任务怎么保证不被两个线程都执行? 线程池内部有两部分组成一部分是task任务列表 一部分是线程数组,在处理任务是都要去上锁,这个锁其实就是一个变量。等这个任务拿到后再释放锁。
RestHighLevelClient 是 Elasticsearch 官方提供的Java高级客户端,用于与Elasticsearch集群进行交互和执行各种操作。 主要特点和功能如下: 强类型:RestHighLevelClient 提供了强类型的 API,可以在编码过程中获得更好的类型安全性和 IDE 支持。 兼容性:RestHighLevelClient 是 Elasticsearch 官方推荐的 Java 客户端,在 Elasticsearch 版本升级时会保证与 Elasticsearch 的兼容性。 高级功能:RestHighLevelClient 支持 Elasticsea
2.5 信道的极限容量 2.5.1 奈氏准则 理想低通信道的最高码元传输速率 = 2W Baud = 2W 码元 / 秒 理想带通信道的最高码元传输速率 = W Baud = W 码元 / 秒 W : 信道带宽(单位为Hz) Baud:波特,既码元 / 秒
2.1 物理层的基本概念 物理层考虑的是怎样在连接各种计算机的传输媒体上传输数据比特流。 物理层为数据链路层屏蔽了各种传输媒体的差异,使数据链路层只需要考虑如何完成本层的协议和服务,而不必考虑网络具体的传输媒体是什么。
1. volatile 如何保证变量的可⻅性? 在Java中,使用volatile关键字可以确保变量的可见性。 当一个线程修改了一个被volatile修饰的变量时,它会立即将该变量的最新值刷新到主内存。而其他线程在读取该变量时,会从主内存中重新获取最新值,而不是使用缓存中的旧值。 这样做的原因是,普通的变量在多线程环境下存在线程间不可见的问题。每个线程都有自己的工作内存,由于运行速度快和编译优化等原因,线程可能会直接读取工作内存中的旧值,而不去主内存中获取最新的值,导致线程之间的数据不一致。
1. BIO NIO AIO 在Java中,BIO、NIO和AIO是针对网络编程的不同I/O模型: BIO(Blocking I/O):传统的阻塞式I/O模型,它以阻塞的方式进行数据读写操作。当一个线程执行I/O操作时,会被阻塞,直到数据准备好或者操作完成。这种模型相对简单,但对并发处理能力较弱。 NIO(Non-blocking I/O):非阻塞式I/O模型,引入了选择器(Selector)和通道(Channel)的概念。使用NIO,可以通过一个线程处理多个通道的I/O操作,提升了并发处理能力。但需要手动检查是否有数据可用,必要时才进行读写操作。
1. 为什么重写 equals() 时候必须重写 hashCode() 因为两个相等的对象的 hashCode 值必须是相等。也就是说如果 equals 方法判断两个对象是相等的,那这两个对象的 hashCode 值也要相等。 如果重写 equals() 时没有重写 hashCode() 方法的话就可能会导致 equals 方法判断是相等的两个对象,hashCode 值却不相等。
2. Eureka 2.1 Eureka 概述 Eureka 是 Netflix 提供的基于 REST 的服务发现组件,用于帮助开发者管理微服务架构中的服务实例。它提供了一个可伸缩的注册中心,可以让每个微服务都能够找到其他微服务的位置和元数据信息,并对其进行负载均衡、自动故障转移等操作。
1. 前置工作 先准备两个能独立跑起来的微服务(user-server 和 order-server) 将 所需 SQL 导入
1. 浮点数运运算会有精度损失 这个和计算机保存浮点数的机制有很大关系。我们知道计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。这也就是解释了为什么浮点数没有办法用二进制精确表示。
1. 成员变量 和 局部变量 的区别 ● 语法形式 :从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。 ● 存储方式 :从变量在内存中的存储方式来看,如果成员变量是使用 static 修饰的,那么这个成员变量是属于类的,如果没有使用 static 修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。
1. Comparable 和 Comparator区别比较 Comparable 是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”。Comparator 是比较器,我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。 Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。
第一章 概述 1.5 计算机网络的性能指标 常用的 计算机网络 的性能指标有以下 8 个: 速率、带宽、吞吐量、时延、时延带宽积、往返时间、利用率、丢包率 1.5.1 速率
第一章 概述 1.2 因特网概述 1.2.1 网络、互连网(互联网)和因特网 网络:网络由若干结点和连接这些结点的链路组成。
yml参数配置
1. 视图概述 1.1 为什么使用视图? 视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。比如,针对一个公司的销售人员,我们只想给他看部分数据,而某些特殊的数据,比如采购的价格,则不会提供给他。再比如,人员薪酬是个敏感的字段,那么只给某个级别以上的人员开放,其他人的查询视图中则不提供这个字段。
0. 前提概要 谈事务,一般就是说数据库事务。本篇文章以 MySQL 为例谈一谈事务。 MySQL 的 Indndb 引擎和 bdb 引擎支持事务。MySQL 的myisam ,memory 等存储引擎是不支持事务的。
🍉1. 索引底层采用什么数据结构?为什么不用hash 索引底层数据结构是B+树 不使用hash:因为其底层是哈希表实现,等值查询,可以快速定位,一般情况效率很高,不稳定,当出现大量键重复哈希冲突,效率下降,不支持范围查询,无法用于排序分组,无法模糊查询,多列索引的最左前缀匹配原则,总要回表操作等。
1. TCP 和 UDP的异同 TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常见的传输层协议,用于在网络中进行数据传输。它们之间主要有以下异同: 可靠性:TCP 是一种面向连接的可靠协议,它可以保证数据传输的可靠性,并通过重传机制和流量控制来保证数据的正确到达。而 UDP 则是一种无连接的不可靠协议,不提供确认、重传和流量控制等可靠性保证。 速度:由于 TCP 的可靠机制和复杂的协议头部,它的传输速度相对较慢;而 UDP 虽然不具有可靠性,但协议头部比 TCP 简单,传输速度较快。
1. JSP 和 Servlet 有什么区别 JSP(Java Server Pages)和Servlet 是 Java Web 开发中常用的两种技术。 Servlet 是一种基于 Java编写的服务器端程序,其主要作用是处理HTTP请求、响应、业务逻辑等操作。通过 Servlet,可以在服务器端生成动态内容,并将其传输到客户端浏览器。
1. 线程中的线程是怎么创建的,是一开始就随着线程池的启动创建好的吗? 线程中的线程通常是通过在父线程中创建新的Thread对象并将其加入线程池中实现的。当然,这个过程也可以通过一些其他的方式来实现,比如使用ExecutorService.submit()方法提交一个Callable或Runnable任务。
1. 乐观锁一定就是好的吗 乐观锁并不一定好,它有自己的适用场景和局限性。 乐观锁的优点在于在低并发环境下表现良好,操作基本上都能够成功,不会阻塞其他线程的执行。此外,乐观锁没有锁带来的资源竞争和多线程间的上下文切换开销,对于高并发的场景下可以提供更好的性能表现。 但是,在高并发场景下乐观锁的表现往往受到影响,因为多个线程同时执行操作和检查比较,会出现重试次数增加的情况,进而增加了延迟和开销,降低了系统的吞吐量和性能。此时,悲观锁可能比乐观锁更适合解决问题,因为它能够阻塞其他线程,等待当前线程释放锁后再执行。
1. 线程的run()和start()有什么区别,为什么不直接调用run() Java中通过继承 Thread 或实现 Runnable 接口来创建线程,线程是通过 start() 方法启动的,而不是直接调用 run() 方法。下面是它们之间的区别: start() 和 run() 的区别 调用 start() 方法会启动一个新线程并执行其中的 run() 方法,而直接调用 run() 方法将在当前线程中执行 run() 方法,并不会创建新的线程。
1. java中 怎么确保一个集合不能被修改 Java 中可以使用 Collections 类的 unmodifiableXXX() 方法来确保一个集合不能被修改。其中,XXX 表示需要被转换的集合类型,如 List、Set、Map 等。这些方法都返回指定集合的不可修改视图
1. HashMap 的实现原理 HashMap 是一种基于哈希表的数据结构,它的实现原理简单来说就是将键值对存储在一个数组中,并通过哈希算法计算出每个键对应的下标。下面是 HashMap 实现原理的具体步骤: 初始化:创建一个长度为 n 的数组(初始默认长度为 16),该数组每个位置可存放一个链表;以及一个负载因子(load factor),用来表示哈希表允许填充的程度。
1. byte 类型 127 + 1等于多少 当byte类型的值超出它的范围时,它会发生溢出并且变为负数。在Java中,byte类型是一个8位有符号整数,取值范围为-128到127。 因此,在进行 byte 类型 127 + 1 的操作时,由于它已经超出范围了,所以结果会发生溢出,并变成 -128 (即计算结果是 (byte) (127 + 1) = -128)
1. 为什么不允许静态方法访问非静态变量 在Java中,静态方法属于类级别的方法,它不依赖于任何实例对象,只能访问类变量(即static修饰的变量)和其他静态方法。而非静态变量是实例级别的变量,需要通过实例对象才能访问。
1. try-catch-finally中 如果 catch 中 return 了,finally 还会执行吗? 会执行的。 当try块中发生异常时,控制流会立即转到相关的catch块,执行其中的代码。如果在catch块中出现了return语句,那么该方法或函数的执行就会结束,并且不会再返回到try块或finally块中。 但是,无论是否出现异常,finally块中的代码都会在try块之后或者catch块之后执行。这意味着即使在catch块的return语句中完成了对返回值的处理,finally块中的代码仍然会被执行。
1. 简要说下什么是反射 Java反射是指在运行时获取类信息,包括类的各个成员变量、方法和构造函数等信息,并可以通过这些信息调用对象的方法或创建对象。通俗点说,反射就是程序在运行时检查一个类、获取该类的属性和方法信息,然后利用这些信息操作该类。
1. java中普通类和抽象类有哪些区别 Java中普通类(也就是非抽象类)和抽象类有以下几个区别: 实例化:普通类可以直接被实例化为对象,而抽象类不能直接被实例化。抽象类需要被继承后,由其子类来实现其中定义的抽象方法。 抽象方法:普通类不能包含抽象方法,而抽象类必须至少包含一个抽象方法。抽象方法是一种没有具体实现的方法,它只有声明而没有方法体。抽象方法必须在抽象类的子类中被实现。
1. JDK 和 JRE 有什么区别 JDK(Java Development Kit)和 JRE(Java Runtime Environment)是两个不同的软件包。它们共同提供了 Java 开发和运行时环境,但在功能和用途上存在一些区别。 JRE 包含 Java 运行时环境,它只用于执行 Java 应用程序,而没有提供任何开发工具。JRE 包括 JVM(Java 虚拟机)、Java 标准类库、Java 插件等组件,用户可以利用 JRE 去运行已经编写好的 Java 应用程序。 JDK 则是 Java 开发工具包,它除了包括 JRE 中的组件外,还提供了一系列的开发工具,例如编译器 j