Mybatis入门
MyBatis常见面试题总结#{} 和 ${} 的区别是什么?
${} 是 Properties 文件中的变量占位符,它可以用于标签属性值和 SQL 内部,属于原样文本替换,可以替换任意内容,比如 ${driver} 会被原样替换为 com.mysql.jdbc.Driver。
#{} 是 SQL 的参数占位符,MyBatis 会将 SQL 中的 #{} 替换为 ? 号,在 SQL 执行前会使用 PreparedStatement 的参数设置方法,按序给 SQL 的 ? 号占位符设置参数值,比如 ps.setInt(0, parameterValue),#{item.name} 的取值方式为使用反射从参数对象中获取 item 对象的 name 属性值,相当于 param.getItem().getName()。
xml 映射文件中,除了常见的 select、insert、update、delete 标签之外,还有哪些标签?
还有很多其他的标签,<resultMap>、 &l ...
Spring入门
SpringBoot 常见面试题总结简单介绍一下 Spring?有啥缺点?
Spring 是一个重量级企业开发框架,是 Enterprise JavaBean(EJB)的替代品。Spring 为企业级 Java 开发提供了一种相对简单的方法,通过 依赖注入 和 面向切面编程(AOP),用简单的 Java 对象(Plain Old Java Object,POJO)实现了 EJB 的功能。
缺点:虽然 Spring 的组件代码是轻量级的,但它的配置(特别是 XML 配置)可能会显得比较繁琐和复杂。
为什么要有 SpringBoot?
Spring 旨在简化 J2EE 企业应用程序开发,而 Spring Boot 进一步简化了 Spring 开发,减少了配置文件,提供了开箱即用的开发体验。
使用 Spring Boot 的主要优点
开发基于 Spring 的应用程序更加简便。
Spring Boot 项目的开发或工程时间显著减少,提高了整体生产力。
不需要编写大量样板代码、XML 配置和注解。
Spring Boot 遵循“固执己见的默认配置”,减少开发工作量。
Spring Boot ...
Java 集合
集合框架概览
Java集合,也叫做容器,主要由两大接口派生而来:
Collection:主要用于存放单一元素
List:存储的元素有序、可重复
ArrayList:基于 Object[] 数组
Vector:基于 Object[] 数组
LinkedList:
JDK 1.6 之前为循环链表
JDK 1.7 之后为双向链表
Set:存储的元素不可重复
HashSet:基于 HashMap
LinkedHashSet:基于 LinkedHashMap
TreeSet:红黑树实现
Queue:按照特定的排队规则确定先后顺序,存储的元素是有序的、可重复的
PriorityQueue:基于 Object[] 数组,默认为小根堆
DelayQueue:基于 PriorityQueue
ArrayDeque:可扩容的动态双向数组
Map:主要用于存放键值对
key 是无序的、不可重复的
value 是无序的、可重复的
HashMap:
JDK 1.8 之前:由数组+链表构成,数组是 HashMap 的主体,链表用于解决哈希冲突(使用”拉链法”解决冲突)。
JDK 1.8 及其 ...
Redis入门
Redis 数据类型和数据结构常见的数据类型
String类型
底层数据结构:SDS
List类型
底层数据结构:双向链表或者压缩列表
当列表元素小于512个,列表的每个元素的值都小于64字节,Redis会使用压缩列表
否则Redis会使用双向链表
在Redis 3.2之后,List的底层数据结构由quickList实现
Hash类型
底层数据结构:压缩列表或者哈希表实现
如果哈希类型元素小于512个且所有值小于64字节,Redis会使用压缩列表作为Hash类型的底层数据结构
否则使用哈希表
在Redis 7.0之后,由listpack数据结构实现
Set类型
底层数据结构:哈希表或者整数集合
如果集合中的元素都是整数且个数小于512,Redis会使用整数集合作为Set类型的底层数据结构
否则,使用哈希表作为Set类型的底层数据结构
ZSet类型
底层数据结构:压缩列表或者跳表
如果有序集合的元素个数小于128个,并且每个元素的值小于64字节,Redis会使用压缩列表作为ZSet类型的底层数据结构
否则使用跳表
在Redis 7.0中,压缩列表的数 ...
区块链学习记录
矿工是区块链节点中的一个角色,矿工与区块链是包含与被包含的关系。
账本的内容是所有节点所维护的那条公链中的区块以及该区块的相关信息。
区块可能由一些功能模块生成,在众多相同节点且相同的时间流逝中,A节点有可能诞生一个区块1,B节点也有可能诞生一个区块1,在同一条链中,相同区块号的区块最终只能挑选一个串接到链中。使用共识算法来解决选取那个区块上链
常见的共识算法:
PoW,BTC, 区块链1.0
PoS,ETH 区块链2.0
DPos,代表者是柚子EOS,区块链3.0
PBFT,联盟链常用
PoW(Proof of Work,工作量证明)的字面意思是谁干的活多,谁的话语权就大,在一定层面上类似于现实生活中“多劳多得”的概念。
比特币挖矿就是通过计算符合某一个比特币区块头的哈希散列值争夺记账权
Solidity学习Solidity语言是一种编写智能合约的区块链语言
基本框架// SPDX-License-Identifier: MITpragma solidity ^0.8.4; // 声明语言版本,^表示,编译的版本小于等于0.9.0,0.8.4表示编译的版本大于0.8.4contr ...
GoLang
标准库 : https://go-zh.org/pkg/
函数package mainimport "fmt"函数// 函数声明func add(x int, y int) int { return x + y}// 变量声明, var用于声明一个变量列表var c, python, java boolfunc main(){ fmt.Println(add(42, 13)) fmt.Println(add2(42, 13)) a, b := swap("Hello", "World") fmt.Println(a, b) // 变量声明 var i int // 变量的初始化, 省略了类型声明,变量自动从初始值中获取类型 var c, python, java = true, false, "no!" // 短变量声明,可以在类型明确的地方代替var声明 k := 3}// 省略声明相同的类型func add2(x, y int) int { retur ...
MiME Type
Two Important Default MiME types
text/plain : the default value for textual files. A textual file should be human-readable and must not contain binary data.
application/octet-stream : the default value for all other cases. An unknown file type should use this type. Browsers are particularly careful when manipulating these files to protect users from software vulnerabilities and possible dangerous behavior.
Media Types (iana.org) IANA official registry of MIME Media Type
Some Importa ...
fileUploadAndDownload
Spring完成文件的存储和下载文件的存储
使用数据库存储文件本体
使用数据库存储文件的位置,文件存储在文件系统上
使用数据库直接存储文件,使用LONGBLOB类型保存文件的Byte数据
文件的接收前端使用form上传数据
ContentType : multipart/form-data 使用 @RequestPart 注解接收文件
@PostMapping("/upload")public ResponseEntity<Object> uploadFile(@RequestPart MultipartFile file) throws IOException { String fileName = file.getOriginalFilename(); String suffix = fileName.substring(fileName.lastIndexOf(".") + 1); fileName = fileName.substring(0, fileName.lastIndexOf( ...
Data Type Request Process
表单数据
application/x-www-form-urlencoded : enctype未指定属性时的默认值
multipart/form-data:当表单包含 type=file 的 input元素时使用此值
text/plain:出现于 HTML5,用于调试。这个值可被 button、input type=”submit” 或 input type = “image”元素上的 formenctype 属性覆盖
纯文本内容传输
自定义数据传输格式
跨域请求时的预检请求(CORS preflight)
处理方式application/x-www-form-urlencoded :
在 JavaEE 中,可以使用 HttpServletRequest.getParameter() 方法来获取 application/x-www-form-urlencoded 类型的数据
Spring 中,可以使用 @RequestParam 注解来接收 application/x-www-form-urlencoded 类型的数据。
multip ...
JSON_RPC
JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。
它允许运行在基于socket,http等诸多不同消息传输环境的同一进程中。其使用JSON(RFC 4627)作为数据格式。
JSON可以表示四个基本类型(String、Numbers、Booleans和Null)和两个结构化类型(Objects和Arrays)。
任何时候文档涉及JSON数据类型,第一个字母都必须大写:Object,Array,String,Number,Boolean,Null。包括True和False也要大写。
在客户端与任何被匹配到的服务端之间交换的所有成员名字应是区分大小写的。 函数、方法、过程都可以认为是可以互换的
请求对象发送一个请求对象至服务端代表一个rpc调用, 一个请求对象包含下列成员:
jsonrpc
指定JSON-RPC协议版本的字符串,必须准确写为“2.0”
method
包含所要调用方法名称的字符串,以rpc开头的方法名,用英文句号(U+002E or ASCII 46)连接的为预留给rpc内部的方法名及扩展名,且不能在其他地方使用。
params
调用方法所需要的 ...