随手记
日常问题随手记
SpringBoot核心能力:Spring容器、日志、自动配置AutoConfiguration、Strartes,Web应用能力:MVC 、嵌入式容器。。。
模块化:最大限度的重复用代码.
[外链图片转存失败(img-ppqmgFK3-1568276512402)(C:\Users\soul\AppData\Roaming\Typora\typora-user-images\1567696437569.png)]
接口安全问题:
- session认证:
接口必须登录之后才能调用接口(即在服务器端的session中存储登录的信息)
- token(令牌,代币,通证)认证
服务端给调用者一个令牌。比如说用户注册的时候就分配一个token给他,用的时候查询后台是否存在
或者另外一张表中存在token,然后根据分配才能拥有相应的权限
StringBuffer与StringBuild的区别:
StringBuffer是一个线程安全的可变序列
StringBuild是可变序列
String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了(详看笔记部分解析)。
如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & StringBuilder 类。
JavaSE复习随手记
- 源码地址:https://gitee.com/soul_man/pratice
集合
-
集合和数组的区别:
数组的长度是一定的,不可变化
集合的长度是可变的
-
Collecttion下的集合List和Set:
区别:list可重复,Set不可重复
-
List下ArrayList和LinkedList:
-
Set下的HashSet和TreeSet(哈希表)
-
Java的正则表达式
字符 说明 \ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n"匹配字符"n”。"\n"匹配换行符。序列"\\“匹配”\","\(“匹配”("。 ^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与"\n"或"\r"之后的位置匹配。 $ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与"\n"或"\r"之前的位置匹配。 * 零次或多次匹配前面的字符或子表达式。例如,zo* 匹配"z"和"zoo"。* 等效于 {0,}。 + 一次或多次匹配前面的字符或子表达式。例如,"zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 等效于 {1,}。 ? 零次或一次匹配前面的字符或子表达式。例如,"do(es)?“匹配"do"或"does"中的"do”。? 等效于 {0,1}。 {n} n 是非负整数。正好匹配 n 次。例如,"o{2}"与"Bob"中的"o"不匹配,但与"food"中的两个"o"匹配。 {n,} n 是非负整数。至少匹配 n 次。例如,"o{2,}“不匹配"Bob"中的"o”,而匹配"foooood"中的所有 o。"o{1,}“等效于"o+”。"o{0,}“等效于"o*”。 {n,m} m 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,"o{1,3}"匹配"fooooood"中的头三个 o。‘o{0,1}’ 等效于 ‘o?’。注意:您不能将空格插入逗号和数字之间。 ? 当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是"非贪心的"。"非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。例如,在字符串"oooo"中,"o+?“只匹配单个"o”,而"o+“匹配所有"o”。 . 匹配除"\r\n"之外的任何单个字符。若要匹配包括"\r\n"在内的任意字符,请使用诸如"[\s\S]"之类的模式。 (pattern) 匹配 pattern 并捕获该匹配的子表达式。可以使用 $0…$9 属性从结果"匹配"集合中检索捕获的匹配。若要匹配括号字符 ( ),请使用"(“或者”)"。 (?:pattern) 匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用"or"字符 (|) 组合模式部件的情况很有用。例如,'industr(?:y|ies) 是比 ‘industry|industries’ 更经济的表达式。 (?=pattern) 执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,‘Windows (?=95|98|NT|2000)’ 匹配"Windows 2000"中的"Windows",但不匹配"Windows 3.1"中的"Windows"。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。 (?!pattern) 执行反向预测先行搜索的子表达式,该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,‘Windows (?!95|98|NT|2000)’ 匹配"Windows 3.1"中的 “Windows”,但不匹配"Windows 2000"中的"Windows"。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。 x|y 匹配 x 或 y。例如,‘z|food’ 匹配"z"或"food"。’(z|f)ood’ 匹配"zood"或"food"。 [xyz] 字符集。匹配包含的任一字符。例如,"[abc]“匹配"plain"中的"a”。 [^xyz] 反向字符集。匹配未包含的任何字符。例如,"[^abc]“匹配"plain"中"p”,“l”,“i”,“n”。 [a-z] 字符范围。匹配指定范围内的任何字符。例如,"[a-z]"匹配"a"到"z"范围内的任何小写字母。 [^a-z] 反向范围字符。匹配不在指定的范围内的任何字符。例如,"[^a-z]"匹配任何不在"a"到"z"范围内的任何字符。 \b 匹配一个字边界,即字与空格间的位置。例如,“er\b"匹配"never"中的"er”,但不匹配"verb"中的"er"。 \B 非字边界匹配。“er\B"匹配"verb"中的"er”,但不匹配"never"中的"er"。 \cx 匹配 x 指示的控制字符。例如,\cM 匹配 Control-M 或回车符。x 的值必须在 A-Z 或 a-z 之间。如果不是这样,则假定 c 就是"c"字符本身。 \d 数字字符匹配。等效于 [0-9]。 \D 非数字字符匹配。等效于 [^0-9]。 \f 换页符匹配。等效于 \x0c 和 \cL。 \n 换行符匹配。等效于 \x0a 和 \cJ。 \r 匹配一个回车符。等效于 \x0d 和 \cM。 \s 匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。 \S 匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效。 \t 制表符匹配。与 \x09 和 \cI 等效。 \v 垂直制表符匹配。与 \x0b 和 \cK 等效。 \w 匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。 \W 与任何非单词字符匹配。与"[^A-Za-z0-9_]"等效。 \xn 匹配 n,此处的 n 是一个十六进制转义码。十六进制转义码必须正好是两位数长。例如,"\x41"匹配"A"。"\x041"与"\x04"&"1"等效。允许在正则表达式中使用 ASCII 代码。 *num* 匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用。例如,"(.)\1"匹配两个连续的相同字符。 *n* 标识一个八进制转义码或反向引用。如果 *n* 前面至少有 n 个捕获子表达式,那么 n 是反向引用。否则,如果 n 是八进制数 (0-7),那么 n 是八进制转义码。 *nm* 标识一个八进制转义码或反向引用。如果 *nm* 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。如果 *nm* 前面至少有 n 个捕获,则 n 是反向引用,后面跟有字符 m。如果两种前面的情况都不存在,则 *nm* 匹配八进制值 nm,其中 n 和 m 是八进制数字 (0-7)。 \nml 当 n 是八进制数 (0-3),m 和 l 是八进制数 (0-7) 时,匹配八进制转义码 nml。 \un 匹配 n,其中 n 是以四位十六进制数表示的 Unicode 字符。例如,\u00A9 匹配版权符号 (©)。 - IO流
- Exception
异常 描述 ArithmeticException 当出现异常的运算条件时,抛出此异常。例如,一个整数"除以零"时,抛出此类的一个实例。 ArrayIndexOutOfBoundsException 用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。 ArrayStoreException 试图将错误类型的对象存储到一个对象数组时抛出的异常。 ClassCastException 当试图将对象强制转换为不是实例的子类时,抛出该异常。 IllegalArgumentException 抛出的异常表明向方法传递了一个不合法或不正确的参数。 IllegalMonitorStateException 抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。 IllegalStateException 在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。 IllegalThreadStateException 线程没有处于请求操作所要求的适当状态时抛出的异常。 IndexOutOfBoundsException 指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。 NegativeArraySizeException 如果应用程序试图创建大小为负的数组,则抛出该异常。 NullPointerException 当应用程序试图在需要对象的地方使用 null
时,抛出该异常NumberFormatException 当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。 SecurityException 由安全管理器抛出的异常,指示存在安全侵犯。 StringIndexOutOfBoundsException 此异常由 String
方法抛出,指示索引或者为负,或者超出字符串的大小。UnsupportedOperationException 当不支持请求的操作时,抛出该异常。 -
常见的5个RuntimeException
-
java.lang.NullPointerException:空指针异常;
出现原因:调用了未经初始化的对象或者不存在的对象
-
java.lang.ClassNotFoundException:指定的类找不到
出现原因:类的名称和路径加载不对,通常都是程序试图通过读取字符串来加载某个类时可能引发的异常
-
java.lang.NumberFormatException:字符串转换数字异常
出现原因:字符串中包含不是数字类型的字符
-
java.lang.IndexOutOfBoundException:数组角标越界异常
出现原因:数组长度…一般出现在操作数组的时候
-
java.lang.lllegalArgumentException,方法传递参数错误
-
java.lang.ClassCastException:数据类型转换异常
-
java.lang.NoClassDefFoundException:未找到类定义错误
-
SQLException:SQL异常,常见于操作数据库时的SQL语句错误
-
java.lang.InstantitationException:实例化异常
-
java.lang.NoSuchMethodExceptio :方法不存在异常
-
-
final,finally,finalize的区别
- final用于修饰属性,方法,类分别表示属性不可变,方法不可覆盖,被其修饰的类不可继承
- finall:try…catch的一部分,表示总是执行
- finalize:Object的一个类,垃圾回收器执行的时候会调用被回收对象的这个方法,可以覆盖此方法提供垃圾收集时其他资源的回收。这个方法是一个被动的方法,不需要我们去调用。
-
Java数据结构
- 枚举【Enumeration】
- 位集合【BitSit】
- 向量【Vector】
- 栈【Stack】
- 字典【Dictionary】
- 哈希表(Hashtable)
- 属性(Properties)
- 集合框架(Collection)
-
Java集合框架【Collection(集合)Map(图)】
public static void ArrlistIterator(){
List<String> list = new ArrayList<>();
list.add("里斯");
list.add("里斯");
list.add("里斯");
list.add("里斯");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
public static void MapIterator(){
Map<String, String> map = new HashMap<String, String>();
map.put("1", "value1");
map.put("2", "value2");
map.put("3", "value3");
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String,String> entry:entries) {
System.out.println("key的值:"+entry.getKey() +"-value的值:"+entry.getValue());
}
}
-
网络编程
两台计算机之间使用套接字建立TCP连接时会出现:
- 服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口通信。
- 服务器调用 ServerSocket 类的 accept() 方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。
- 服务器正在等待时,一个客户端实例化一个 Socket 对象,指定服务器名称和端口号来请求连接。
- Socket 类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个 Socket 对象能够与服务器进行通信。
- 在服务器端,accept() 方法返回服务器上一个新的 socket 引用,该 socket 连接到客户端的 socket。
-
多线程:
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
前端知识随手记
- 源码地址:https://github.com/monster9906/spring_boot
- zepto.js 定制的步骤
1、安装Nodejs环境
2、下载zepto.js
3、解压缩
4、cmd命令行进入解压缩后的目录
5、执行npm install 命令
6、编辑make文件,没有后缀,添加自定义模块并保存,如下图 41行
7、然后执行命令 npm run-script dist
8、查看目录dist即构建好的zepto.js
iscoll的使用
iScroll是一个高性能,资源占用少,无依赖,多平台的javascript滚动插件
瀑布流的使用
-
瀑布流:
瀑布流又称瀑布流式布局,是比较流行的一种网站页面布局方式。视觉表现为参差不齐的多栏布局,最早采用此布局的是网站是 Pinterest,后逐渐在国内流行。
主要关键在于用绝对定位,直接给他算死了(left,top的值)!
间距 = (总长度-子元素长度*列数)/ (列数-1) // 列数就是每个网页显示多少条
$.fn.waterFall= function () {
// 计算每个item的值(left,top)
var $this = $(this);
// 页面总长度
var zongWidth = $this.width();
// 拿到每一个元素的集合
var $children = $this.children(".item");
// 假如网页展示5列数据
var colunm = 5;
// 每个子元素展示的宽度
var childWidth = $children.width();
// 每一个子元素之间的间距
var jianju = (zongWidth - childWidth*colunm) / (colunm-1);
var arr = [];
// 拿到每个子元素进行操作
$children.each(function (index,dom) {
var item = $(dom);
if (index < colunm){
item.css({
top:0,
left:index*(childWidth+jianju)
});
arr.push(item.height());
}else {
var minIndex = 0;
var minHeight = arr[minIndex];
for (var i = 0; i <arr.length ; i++) {
if(minHeight > arr[i]){
minIndex = i ;
minHeight = arr[i];
}
}
item.css({
left:minIndex*(jianju+childWidth),
top:minHeight + jianju
});
// 再次重新计算最小那一列的高度
arr[minIndex] = minHeight +jianju + item.height();
}
}
);
}
SVG简介:
SVG 是使用 XML 来描述二维图形和绘图程序的语言。SVG 意为可缩放矢量图形(Scalable Vector Graphics)。
D3:
D3.js 是用于操作和管理基于数据的文档的 JavaScript 函数库。D3 帮助你使用 HTML,SVG 和 CSS 技术把您的数据活灵活现的展示出来。D3 注重于 Web 规范,从而让您使用现代浏览器的全部功能而不用使用商业框架,将强大的数据呈现组件与基于数据驱动的模式组合进 DOM 操作之中。
矩形 <rect>
圆形 <circle>
椭圆 <ellipse>
线 <line>
折线 <polyline>
多边形 <polygon>
路径 <path>