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
调用方法所需要的 ...
CORS(跨域资源共享)
CORS:一种基于HTTP头的机制,该机制允许服务标示除了它自己以外的其他源(域、协议、端口),使得浏览器允许这些源访问加载自己的资源
对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨源请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(例如 Cookie 和 HTTP 认证相关数据)。
若请求满足所有下述条件,则该请求可视为简单请求:
使用下列方法之一:
GET
HEAD
POST
除了被用户代理自动设置的标头字段(例如
Connection、User-Agent或其他在 Fetch 规范中定义为禁用标头名称的标头),允许人为设置的字段为 Fetch 规范定义的对 CORS 安全的标头字段集合
。该集合为:
Accept
Accept-Language
Content-Language
...
Git command
在本地创建仓库,并覆盖旧的仓库rm -rf .gitgit initgit add .git commit -m .git branch -M maingit remote add origin git@github.com:MisakeMikoto/blog.git(地址)git push -u origin main -f
Git 常用命令git initgit clone git addgit config # 配置信息git status # 查看文件状态git diff # 查看更新的详细信息命令git commit # 提交命令git reset HEAD # 取消缓存命令git rm # 删除git mv # 移动或者重命名
git configgit config --global user.name '你的用户名'git config --global user.email '你的邮箱'
git statusgit add <文件名> # 暂存文件git checkout <文件名> # 放弃未暂存 ...
树的算法
从零开始的算法学习(三)二叉树 class Node<V>{ V value; Node left; Node right;}
问题一
用递归和非递归两种方式实现二叉树的先序、中序、后序遍历
如何直观的打印一颗二叉树 ?
如何完成二叉树的宽度优先遍历 ?
左右节点(孩子)都为空的节点就叫做叶子节点
递归序
1 2 4 4 4(三次返回)2 5 5 5 2 (三次返回2)1 3 6 6 6 3 7 7 7 3 (三次返回7) 3 (三次返回3)1
在递归序的基础上,有三种遍历方式
先序:对于所有子树来说,都是先打印子树的头节点,在打印子树的左边节点,在打印子树的右边节点
1 2 4 5 3 6 7
第一次来到某个节点,就直接打印该节点,其他时候不打印
中序:对于每一颗子树,都是先打印左边节点,在打印头节点,在打印右边节点
4 2 5 1 6 3 7
第一次来到某个节点什么都不做,第二次来到某个节点打印该节点,第三次来到某个节点,什么都不做
后序:对于每一颗子树,都是先打印左边节点,在打印右边节点,在打印头节点
4 ...
链表的算法
可以认为无论Hash表存储多少数据,增删改查的时间复杂度都是常数级别O(1),但是常数时间比较大
如果Hash表存储是Key是基本类型比如:Interge,Double,String…那么Hash表内部传递的过程是按值传递的,在Hash表中所占的空间就是这个基本数据类型需要的空间(Hash表会拷贝一份值)
如果Key存储的不是基本类型,那么内部的传递过程是按照内存地址(引用)传递的,所占的空间一律是8字节
增删改查的时间复杂度是O(logN)
非基础类型的数在加入顺序表的时候,都需要把对应的比较器也一起传递过去
双指针
快慢指针
class Solution { public boolean isPalindrome(ListNode head) { ListNode slow = head, fast = head; int count = 0; while(slow != null){ count++; slow = slow.next; ...
图的算法
图的存储方式
邻接表
邻接矩阵
如何表达图?生成图?
图的表示方式很多,我们只需要熟练掌握一种,把这些图的代码写熟,以后遇到这种图的题之后,可以把这种图转换为我们熟悉的图结构
重点:用熟悉实现一种图的结构
图的宽度优先遍历
利用队列实现
从源节点开始依次按照宽度进队列,然后弹出
每弹出一个点,把该节点所有没有进过队列的邻接点放入队列
知道队列变空
广度优先遍历
利用栈实现
从源节点开始把节点按照深度放入栈,然后弹出
每弹出一个点,把该节点下一个没有进过栈的邻接点放入栈
直到栈变空
拓扑排序
先看哪个点是入度为0的点(入度为0的点一定是排在最前面的)
把A和A的边去掉,然后寻找下一个入度为0的点B
依次寻找所有入度为0的点,然后输出
最小生成树在保证连通性的前提下,总的权值最小
只要我们可以实现一种机制,实现集合的查询和集合的合并,那么就能很轻易的实现最小生成树的生成(并查集)
kruskal算法适用范围:要求无向图
prim算法适用范围:要求无向图
Dijkstra算法适用范围:没有权值为负的边(可以有权值为负数的边,但是不能有权值和为负数的环)
如果存在负数的边,可能导致 ...
GoLang(Linux/Old)
安装GO
官网下载最新版本的GoLang https://go.dev/learn/
解压到文件夹,设置环境变量
我使用的是ZSH,所以需要修改.zshrc文件,添加export PATH=$PATH:/home/arecuid/soft/go/bin
安装完成
简介Go的表达能力强、简洁、干净、高效。它的并发机制使其能够轻松地编写程序,从而最大限度地利用多核和网络机器,而其新颖的类型系统能够实现灵活和模块化的程序构建。Go可以快速编译成机器代码,但又具有垃圾收集的便利性和运行时反射的力量。它是一种快速、静态类型化的编译语言,感觉就像动态类型化的解释语言。
结构通常会设置一个GOPATH,所有的项目代码都放在GOPATH的src目录下
在GOPATH目录下创建三个文件夹
bin:用于存放编译后生成的可执行文件
pkg:用于存放编译后生成的归档文件
src:用于存放源码文件
在进行Go语言开发的时候,我们的代码总是会保存在GOPATH/src目录下。在工程经过go build、go install或go get等指令后, ...