自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(143)
  • 收藏
  • 关注

原创 Asset private data

其使用的java链码是基于gradle7.0的。(1)逗号后面必须有空格,花括号前面必须有空格,运算符前后必须有空格。(2)类里面的set方法参数不能和类里面的成员变量名字一样。(3)import不能有*

2023-10-31 10:42:46 163

原创 Prometheus-Grafana

prometheus-grafana提供了一个可运行的环境用于对测试网络进行实时监控。prometheus-grafana下有一个docker-compose.yaml文件用于控制prometheus和grafana的启动,和监控网络的指标。3,登录http://localhost:3000,Grafana默认运行在3000端口。./prometheus --config.file=prometheus.yaml文件的路径。4,在通道中部署链码,可以明显看到每个docker容器的内存和CPU使用率升高。

2023-10-17 16:50:59 752

原创 事务管理

map.set(this)就是将ThreadLocal作为key,因为我们的组件中需要传输的对象可能有多个。Servlet规范中定义的一种特殊类,它用于监听Web应用程序中的ServletContext,HttpSession 和HttpServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。那么如果有的DAO成功提交,有的需要回滚。所以事务管理应该以业务层的方法为单位,而不能以DAO层的单精度方法为单位。然后在Filter的doFilter方法中进行事务的管理。

2022-10-29 19:37:10 689 1

原创 过滤器(filter)

实际开发中,不同过滤器的应用不相同。如果使用注解,三个过滤器都写了相同的WebFilter注解,那么会根据它们的类名的排列顺序依次执行。如果是xml文件配置,那么执行顺序按照配置顺序。需要新建类实现javax.servlet.Filter,然后实现其中的init、doFilter、destroy三种方法。过滤器位置在servlet之前,对客户端发送的请求进行处理,然后再发给servlet。在拦截请求时,filter和servlet一样,可以使用通配符。在核心控制器前面的过滤器的典型功能:设置编码方式、

2022-10-29 16:28:29 336

原创 mvc-servlet

而在实际中,会有很多servlet类,而每个之中会有很多方法。可以将对某个请求的所有操作写在一个Controller里面,然后使用一个中央控制器将请求转发给处理它的Controller。可以只写一个servlet对请求作响应,但是servlet内部可以有很多方法,对不同请求作响应。然后建立一个中央控制器,获得该文件中的bean标签的对应关系,用一个map存储,这个map称为容器。Notations;在Controller的每个函数中都有获取请求中函数的操作,那么可以将此直接在中央控制器处理。

2022-10-28 19:37:04 303

原创 Servlet的一些操作

其中,onclick后面的语句表示有一个js的函数page,传入参数为会话作用域中保存的当前页数pageNo。而disabled则表示该按钮何时禁用,如在第一页的时候禁用上一页按钮,在尾页禁用下一页按钮。要在显示数据库库存信息的页面上,通过点击页面进行跳转,跳转到修改数据库信息的页面上,然后修改后提交,再跳回到原来的页面。该页面中获得了要修改的数据的信息,并且修改后提交一个名为update的请求。同样,新建一个servlet对其响应,使用JDBC增添数据库中的信息,最后使用客户端重定向重新访问库存页面。

2022-10-25 21:51:10 1269

原创 Servlet(1)

2,在xml文件中的servlet-mapping中对应的映射关系里,找到add,其对应的servlet-name是addConnection 3,然后找到addConnection对应的类com.myWeb.serverlet.AddServerlet 4,因为发送的是post请求(method=post),tomcat会执行类中的doPost方法;在tomcat8之前的get请求自身没有设置编码方式的方法,需要把获得的字符串转成byte[]数组,再转UTF-8,最后重新拼接成字符串。

2022-10-23 16:38:31 423

原创 CSS

CSS从位置上分类可以分为嵌入式样式表、内部样式表 、外部样式表。其中外部样式表专门用一个.css文件管理CSS代码。Notations:在IE浏览器里面,实际尺寸就是width和height,而在谷歌浏览器中则是width,height加上它们的边框再加padding(填充)的。所有有关修饰的标签都已经淘汰,可以在部分用CSS表示格式。CSS的分类:1,标签样式表;Notations:在HTML5中height是失效的,一般根据内容的多少来决定高度。CSS盒子模型三要素:1,border;

2022-10-17 21:31:52 135

原创 HTML

如果一个页面有很多子网页,可以使用代替,这个标签表示页面框架,现在已经基本不用。网页中需要使用表格展示,用到Table标签。现在中表示表格属性的基本不再使用。浏览器与服务器间的关系示意,server给浏览器的响应是HTML语言。HTML(超文本标记语言):决定页面显示的内容。比如网页中的登录页面能够承载发给服务器的数据,就是个表单。html语言是解释型语言,写错了不会报错,只是不会解释。CSS:决定页面上内容的美观程度。iframe在一个页面嵌入一个子页面。

2022-10-17 17:10:52 348

原创 JDBC事务+工具类+行级锁for update

因为JDBC的事务是自动提交的,所以上述事务中A执行了而B没有执行,从而发生错误。因此在实际开发中需要关闭JDBC的自动提交机制,改成手动提交。在获得数据库连接后就要关闭自动提交。模拟一个JDBC事务,实现A账户向B账户转账一万。A账户减去一万和B账户加上一万,必须同时成功或者失败。在正常执行结束后,在上述程序try语句块最后设置手动提交。出现异常,在try语句块进行回滚。

2022-10-14 21:17:08 490

原创 用户登录业务

在mysql中,完全一样的SQL语句不会重复编译,如果用Statement执行需要拼接字符串,所以字符串一直会改变,需要重复编译。业务要求:1,程序提供一个输入的入口,可以输入用户名和密码;2,输入后,用户输入信息,java程序收集信息;3,java程序连接数据库验证用户名及密码是否合法,判断登录是否成功。核心原因是输入被当作SQL的一部分进行编译了,导致SQL语句原义被扭曲,这种现象叫SQL注入。因为在程序里SQL查询语句的where后面是:"语句=' "+fdsa' or '1'='1 +" ' "

2022-10-14 20:09:24 684

原创 JDBC简述

java Database connectivity(JDBC),即在java中写sql语句,对mysql数据库中数据进行CRUD操作。其相关类库在java.sql.*下面。JDBC质是sum制定好的一套接口。mysql数据库厂家对JBDC接口进行实现。mysql数据库实现的类在mysql-connector-java-版本-bin.jar(mysql的驱动)。开发JDBC之前,需要把jar包配置到classpath之中。使用者不需要关心底层是什么数据库,只用关心JDBC接口。

2022-10-13 19:35:11 208

原创 锁机制

(2)排他锁 (X):允许获取排他锁的事务更新数据,防止其他事务获得相同数据集的共享锁和排他锁。2,比如有age=19和age=25的记录,查询大于19的记录加上share in mode,会给19的记录加上行锁,并且给25直到正无穷的记录加上临建锁。1,比如只有id=3和8的记录,查询5,就会给3和8之间的记录加上间隙锁,再在另一个事务中修改id=7的数据就会阻塞。3,间隙锁唯一目的是防止其他事务插入间隙,间隙锁可以共存,一个事务的间隙锁不会防止另一个事务在同一间隙加上间隙锁。意向锁之间不会互相排斥。

2022-10-11 21:18:34 307

原创 触发器

创建语法:create trigger 触发器名 before/after update/insert/delete on 表名。触发器是与表有关的数据库对象,可以协助应用在数据库端保持数据的完整性。删除: drop trigger 数据库名(默认当前)触发器名。查看:show triggers;

2022-10-04 16:51:56 366

原创 存储过程

存储过程是事先经过编译并存储在数据库中的SQL语句的集合。赋值可以使用类似自定义变量的方法,只是局部变量前不用加@。(3)READS SQL DATA:包含读数据的语句,不含写数据的。当使用变量接收查询结果时,只能存储单个的数据,而不能接收表。游标就是用来存储查询结果集的数据类型,在存储过程或函数中可以使用游标对结果集进行循环处理。Notations:重启服务器后所有的变量都会恢复原值,要永久改变需要修改mysql的配置文件。repeat和while的执行顺序有区别,一个先条件后语句,一个先语句后条件。

2022-10-04 16:33:56 414

原创 索引+视图+数据库设计

对数据库进行优化时优先考虑的就是索引,其分类有:单一索引(一个字段上加索引)、复合索引(两个或更多添加索引)、主键索引(主键上加索引)、唯一性索引(unique修饰的字段上添加索引)等。mysql注意到id字段有索引对象,然后通过索引idIndex定位到101(索引对象是以B-Tree存储的,可以缩小查找范围)。(1)如带有like的模糊查询语句,如果查询内容是%开头的匹配语句,索引会失效。Notations:如果一张表两个字段有一对多的关系,为了满足第三范式,分成两张表,多出来的表添加外键。

2022-10-03 18:43:13 471

原创 事务 (transaction)

而在read committed的隔离级别下,只有事务B执行了commit,之前的所有操作上传到数据库中的表,事务A才能读取到这些操作。//事务A只能读取到事务B已提交的数据。在repeatable read的隔离级别下,事务A中读到的结果总是跟它第一次读到的结果一样,不管事务B怎么进行提交。在serializable级别下,事务A如果对表进行了操作,事务B对同一张表进行操作就会卡住不动,除非事务A提交或回滚结束事务。//事务A开启之后,读取到B的数据都是一样的,即使B事务提交新的。这种隔离级别是理论的。

2022-10-03 09:24:02 312

原创 存储引擎

mysql中默认的存储引擎。(2)表空间tablespace用于存储表的内容;该引擎管理的表的主要特征是使用三个文件管理一个表:(1)格式文件(mytable.frm),存储表结构的定义;(2)数据文件(mytable.MYD),存储表行的数据;(3)索引文件(mytable.MYI),存储表上的索引。使用MEMORY的表,数据存储在内存中,每行的长度固定,因此该引擎很快。(2)表数据和索引存储在内存中;存储引擎是mysql中的一个专用术语,实质为表存储数据的方式。存储引擎不同,表存储数据的方式不同。

2022-09-29 09:38:44 330

原创 约束(constraint)

可以把classno,classname存入一张班级表,把no,name存入另一张学生表,节省了空间,但是两张表没有关系。常见的约束有:非空约束(not null)、唯一性约束(unique)、主键约束(primary key,简称PK)、外键约束(foreign key,简称FK)、检查约束(oracle中才可用)。添加了外键约束后,student中的class只能为class表中的class_no的值,不能是其他值。主键约束中有:1,主键字段:该字段上有主键约束;2,主键值:主键字段的字面值。

2022-09-28 20:40:11 3235

原创 表的操作及数据类型

2,date和datetime:date是短日期,只有年月日。datetime是长日期,有时分秒(长日期默认格式:%Y-%m-%d %h:%i:%s)。insert into 表名(字段1,字段2,字段3,...)values (值1,值2,值3,...)Notations:如果插入字符串的格式刚好是'%Y-%m-%d',mysql会自动做类型转换,不用写str_to_date。1,如果不用date_format函数,查找出来的date类型也会转换成varchar类型,默认是'%Y-%m-%d'。

2022-09-26 20:15:52 376

原创 子查询+UNION+LIMIT

这里的t表的是sal的平均值的搜索结果,因为搜索生成的这张表中avg(sal)这行在后面的where比较中要用到,不能用本来的字段名avg(sal),所以要用别名。表连接由于符合笛卡尔积的规律,每连接一个新表,查询数量翻倍,但是union可以减少查询次数。Notations:uinion在合并结果的时候要求两个结果列数相同,在mysql中可以列的数据类型不一致,但oracle中要求数据类型相同。后面的子查询语句相当于先把平均值找出来,然后再找到大于平均值的信息。limit执行顺序在order by的后面。

2022-09-25 21:24:34 912

原创 连接查询

如果两张表连接时没有任何条件限制,最后结果就是两张表的乘积,这叫笛卡儿积现象。比如一张表有三列:员工,员工编号,员工的领导编号,那么员工的领导编号就会等于领导的员工编号,需要使用内连接找到每个员工对应的领导。这就是把满足匹配的数据输出,同时把r中不满足的也一起输出,在u中对应null。因为第一个join加了左外连接,所以addressDesc会全部显示出来,导致后面roleName部分是NULL。select...from a join b on a和b的连接条件 join c on a和c的连接条件;

2022-09-25 20:16:55 276

原创 数据(单行)处理函数和分组函数

(一)单行处理函数指一个输入对应于一个输出,而多行处理函数是多个输入,一个输出。、常见的单行处理函数:在调用单行处理函数时直接传入字段名。如:select * from user where substr(userName,1,1)='李';找到姓李的人的信息。补充:concat函数用于字符串拼接:concat(字段1,字段2)round(数字,保留位数);保留位数可以是负数,-1表示保留到十位。randn()会生成0到1的随机小数,如果生成100以内的随机数可以用round

2022-09-25 16:22:29 317

原创 反射机制(Reflection)

java有一定动态性,使用反射可以在程序运行时借助Reflection API获得任何类的信息,并直接改变其中的属性和方法。类的完整结构包括:Field,Method,Constructor,SuperClass,Interface,Annotation。一个类有唯一的Class对象,类的整个结构被封装在这个对象中。除了上面获得Class对象的三种方法,每种内置包装类型都有Type属性。加载完类之后,在方法区就会生成一个class对象,这个对象包含了类的完整信息。

2022-09-21 19:06:15 221

原创 注解机制 (Annotation)

在java中前面有@符号的就是注解,如:@Override。一些特殊的有参数,如:@SuppressWarnings (value="unchecked")。如果没有@SuppressWarnings("all"),在IDEA中Account和bankMoney会是灰色,相当于警告,而加了之后就没有了。Source表示源码,RUNTIME表示运行时候,CLASS表示编译生成的.class文件。@Override @Deprecated @SuppressWarnings()是最常见的。

2022-09-21 14:07:30 180

原创 拷贝目录

拷贝目录的思路:对要拷贝的文件夹进行遍历,如果遍历到文件夹就在目标文件夹生成该文件夹。如果遍历到文件就使用IO流拷贝该文件,到此返回上一层的迭代。

2022-09-19 17:22:42 194

原创 简单公式

使用equation环境(自动编号,使用equation*环境不编号*)\begin{equation}....\end{equation}使用bmatrix环境加中括号,Bmatrix加大括号,vmatrix加竖线,Vmatrix加‖,pmatrix加小括号。分式可以直接使用/,也可以使用\frac{}{},前面括号内是分子,后面是分母key1。使用gather环境,使用\\换行,可以自动编号。(1)上标使用^,两位以上数字使用{}括起来,如x的20次方,x^{20}可以使用两个$表示行间公式。...

2022-07-21 09:17:29 120

原创 特殊字符及图表

要产生#、$等特殊字符,使用\,但是\\表示换行,因此\textbackslash表示输入\。插图需要使用graphicx宏包。

2022-07-19 16:47:52 102

原创 文件和文档的基本结构

tableofcontents生成新目录。latex种字体属性为如下四种加字体大小。\subsubsection;\subsection构建子小节。\section构建小节。3,其他一些结构命令。\par空出新段落。

2022-07-19 16:19:48 287

原创 查询语句 (DQL)

(1)简单的查询查询一个字段:select 字段名 from 表名;查询多个字段:用逗号隔开查询所有字段:使用*(这种方式效率低,开发不建议)或者写上所有字段使用as给字段起别名:select 字段名 as 其他名字 from 表名;(1,但是只是显示结果改变,原表字段不变,因为select不改变字段只是查询;2,as可以省略为空格;3,如果改的名字中有空格或者是中文,可以用单\双引号括起来,但是双引号在oracle里面不能用,单引号可以通用)(2)列参与计算字段可以添加+-*\,最

2022-04-08 16:15:56 529

原创 sql基础

sql是一套标准的编程语言,数据库管理系统(DBMS)负责执行,完成对数据库的增删改查。

2022-04-07 15:11:31 74

原创 正则表达式(Regular Expression)

概念:常用于替换、修改符合某种模式的文本。特点:1,灵活性强;2,极简方式控制复杂字符串java中的正则表达式:其为String类型,被验证内容也是String类型,被验证字符使用match方法与正则表达式匹配,返回一个boolean变量。语法:(1)一般形式【内容限定】{长度限定}//长度限定可以不给,默认为1【a-z0-9】表示内容为a-z或0-9的数字,不分先后【^abc】表示内容不能为a或b或c{最小长度,最大长度}表明长度必须在这两个数之间,如{0,}表明最小为0,

2022-03-28 14:36:59 451

原创 KMP算法

(一)素朴匹配算法一个模式串(String)在另一个主串中的位置,称为字符串匹配。分别给两个串指定一个指针,模式串的指向0位置,主串的指针则依次向后,若找到了根模式串位置0一样的字符,则模式串和主串依次后移比较,若都相同则匹配,否则模式串指针指向0,主串继续向后。用这种方法如果比较"abcdefg"和"abcdx"时,子串会与主串的第0-2位比较,但是跟1,2比较其实是没必要的。(二)KMP用KMP比较"abcdefg"和"abcdx"比较时,当第一次对比后,子串会直跳过第一次比较过的a

2022-03-09 21:44:16 71

原创 动态规划算法

一个比较经典的动态规划算法:如图找到从左上角到右下角的路径中数字和最小的路径。实现:public static int bestPath(int[][] array) { //先判断array是否为空 if (array==null) { return 0; } /* * 令出一个和array大小相同的二维数组用来保存走到各个点的最小累加值 * 最后返回最右下角的值即为最小累加值 * 先算出第一行各个点的累加值便于后面计算 */ int[][] total=n

2022-03-09 21:03:23 77

原创 分治算法

将一个大问题划分为N个小问题,各问题的答案相互独立,知道所有小问题的答案就知道大问题的答案。举例如汉诺塔问题,每次只能移动一个盘,要把A上的按从大到小往上排列的盘移动到C上,顺序不变:实现:public static void hannuoTower(int num,char a,char b,char c) { if (num==1) { System.out.println("第"+num+"个盘:"+a+"-->"+c); }else { hannuoTower(n

2022-03-09 20:06:22 69

原创

(一)概念当需要接触多对多的概念时,会使用图。图有各种形状和大小,各条边有权重。如下是一个图:图的边可以有方向,可以是单向和双向的如果每个顶点代表一个任务,那么可以运用深度搜索算法来确定任务的最优执行顺序。(二)图的表示形式二维数组或链表都可以表示。用邻接列表表示,可以每个顶点和其边存入一个一维数组,再将所有顶点的合成二维数组。但是这样如果A顶点到B顶点是单向的,查找它们之间的边比较费时。邻接矩阵就是行和列都是顶点,用对应行列的值来表示连接关系,如果两个点有连接,对应值就是权..

2022-03-08 20:36:24 218

原创 二叉排序树

查询的效率高于链表。排序规则举例:如1,2,3,5,7,如果有相同的数可以放在左子节点或右字节点上。二叉排序树如果使用中序遍历肯定是关键码值由小到大递增的。在删除某结点的时候,可以让左子节点替代自己。实现方法,包括查找、删除、添加public class SortNode { private int value; private SortNode left; private SortNode right; public SortNode(int value) { t..

2022-03-07 21:33:31 422

原创 赫夫曼树

(一)树中一些概念路径:从某一结点到其根结点的通路,其中的分支数目称为路径长度权:可以给结点赋值称为它的权,带权路径长度就是权乘以路径长度树的带权路径长度:所有叶子结点的带权路径长度之和(wpl)。wpl最小的树最优,就是赫夫曼树,这样权越大的结点离根越近。(二)赫夫曼树排列所有结点的权重按从小到大放在一个序列中,最小两位相加,结果再放入序列,依次循环。最后根据它们每两个相加的关系组装二叉树。...

2022-03-06 21:15:17 134

原创 线索化二叉树

(1)概念:普通的二叉树遍历的时候左右指针并没有很好地利用,要完全利用每个结点的左右指针,就必须用到线索化二叉树。在遍历过程中使二叉树变成线索化二叉树的过程称为二叉树的线索化。在n个结点的二叉树中,有n+1个空链域,利用这些空链域存储某次遍历中结点的前续和后继结点。因为在特定的遍历方式下结点的遍历顺序是一定的。(2)结点:...

2022-03-06 19:48:48 437

原创 顺序存储二叉树

顺序存储二叉树就是用连续的数据单元,如数组来存储二叉树中的元素,一般按照自上而下、从左往右的顺序存储。这种情况只考虑完整的二叉树,如下所示:如果当前结点编号为n,则左边的结点编号为2*n+1,右边是2*n+2。实现:public class ArrayTree { private Node[] array; public ArrayTree(Node[] array ) { this.array=array; } public void preList(int index) .

2022-03-05 21:18:12 219

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除