六、企业级开发技术
6.1 存储过程
关于存储过程我只能说请看下图,这是阿里巴巴发布的《阿里巴巴Java开发手册(终极版)v1.3版本》
在 MySQL 第七条中强制 指出禁止使用存储过程
所以对于存储过程不必深究,做到会写能看懂即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hUsQx6Tf-1680617792594)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230329084802.png)]
6.1.1 什么是存储过程
Stored Procedure
是一组为了完成特定功能的 SQL 语句集合
经编译后保存在数据库中
通过指定存储过程的名字并给出参数的值
MySQL5.0 版本开始支持存储过程,使数据库引擎更加灵活和强大
6.1.2 存储过程可以包含
可带参数,也可返回结果
可包含数据操纵语句、变量、逻辑控制语句等
6.1.3 存储过程的优缺点
优点
减少网络流量
提升执行速度
减少数据库连接次数
安全性高
复用性高
缺点
SQL 最大的缺点还是 SQL 语言本身的局限性 SQL 本身是一种结构化查询语言,我们不应该用存储过程处理复杂的业务逻辑让 SQL 回归它结构化查询语言
的功用。复杂的业务逻辑,还是交给代码去处理吧
6.1.4 创建存储过程
CREATE
[DEFINER = { user | CURRENT_USER }]
# 定义DEFINER默认为当前用户
PROCEDURE 存储过程名
[SQL SECURITY { DEFINER | INVOKER } | …]
# 指定DEFINER或INVOKER权限
BEGIN
…
END
特性
说明
LANGUAGE SQL
表示存储过程语言,默认SQL
{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}
表示存储过程要做的工作类别默认值为CONTAINS SQL
SQL SECURITY { DEFINER | INVOKER }
指定存储过程的执行权限默认值是DEFINERDEFINDER:使用创建者的权限INVOKER:用执行者的权限
COMMENT ‘string’
存储过程的注释信息
如果省略 SQL SECURITY 特性,则使用 DEFINER 属性指定调用者,且调用者必须具有 EXECUTE 权限,必须在 mysql.user 表中如果将 SQL SECURITY 特性指定为 INVOKER,则 DEFINER 属性无效
6.1.5 定义存储过程的参数
IN:指输入参数
该参数的值必须在调用存储过程时指定
存储过程中可以使用该参数,但它不能被返回
OUT:指输出参数
INOUT:指输入输出参数
该参数的值在调用存储过程时指定
在存储过程中可以被改变和返回
如果需要定义多个参数,需要使用,
进行分隔
6.1.6 调用存储过程
CALL 存储过程名([参数1,参数2, …]);
# 根据存储过程的定义包含相应的参数
存储过程调用类似于Java中的方法调用
6.1.7 查看存储过程状态
SHOW PROCEDURE STATUS
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xI3lnwUE-1680617792596)(./assets/image-20230403133422488.png)]
6.1.8 查看存储创建代码
SHOW CREATE PROCEDURE 存储过程名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bCB1Meir-1680617792597)(./assets/image-20230403133612810.png)]
6.1.9 修改存储过程
ALTER PROCEDURE 存储过程名[特性………]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HpV3zvNd-1680617792597)(./assets/image-20230403133809483.png)]
6.1.10 删除存储过程
DROP PROCEDURE 存储过程名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kefN8vXn-1680617792597)(./assets/image-20230403133956314.png)]
6.1.11 存储过程中的变量
与Java语言类似,定义存储过程时可以使用变量
DECLARE 变量名[,变量名...] 数据类型 [DEFAULT 值];
给变量进行赋值
SET 变量名 = 表达式值[,变量名=表达式...] ;
定义存储过程时,所有局部变量的声明一定要放在存储过程体的开始;否则,会提示语法错误
系统变量
指 MySQL 全局变量,以@@
开头,形式为@@变量名
用户自定义变量
局部变量
一般用于SQL的语句块中,如:存储过程中的BEGIN和END语句块
作用域仅限于定义该变量的语句块内
生命周期也仅限于该存储过程的调用期间
在存储过程执行到END时,局部变量就会被释放
会话变量
是服务器为每个客户端连接维护的变量,与MySQL客户端是绑定的
也称作用户变量
可以暂存值,并传递给同一连接中其他SQL语句进行使用
当MySQL客户端连接退出时,用户变量就会被释放
用户变量创建时,一般以@
开头,形式为@变量名
演示案例
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_exam_GetLastExamDateByPatientNameAndDepID`(IN patient_name VARCHAR(50), IN dep_id INT,OUT last_exam_date DATETIME)
BEGIN
#Routine body goes here...
DECLARE patient_id INT; #声明局部变量
SELECT patientID INTO patient_id FROM patient WHERE patientName= patient_name;
SELECT patient_id; #输出病人的ID
SELECT MAX(examDate) INTO last_exam_date FROM prescription WHERE patientID = patient_id AND depID = dep_id;
END
SET @patient_name='夏颖';
SET @dep_id =1;
CALL proc_exam_GetLastExamDateByPatientNameAndDepID(@patient_name, @dep_id, @last);
SELECT @last;
6.1.12 存储过程控制语句
与Java语言的流程控制语句类似,MySQL提供的控制语句
条件语句
IF-ELSEIF-ELSE 条件语句
CASE 条件语句
循环语句
WHILE 循环
LOOP 循环
REPEAT循环
迭代语句
6.1.13 IF-ELSEIF-ELSE 条件语句
IF 条件 THEN 语句列表
[ELSEIF 条件 THEN 语句列表]
[ELSE 语句列表]
END IF;
根据病人的家庭收入,返还补贴不同比例的医疗费用
家庭年收入在5000元以下的返还当年总医疗费用的20%
家庭年收入在10000以下的返还当年总医疗费用的15%
家庭年收入在30000以下的返还总医疗费用的5%
30000元以上或未登记的不享受医疗费用返还
输入病人编号和年份,计算该患者当年的应返还的医疗费用
CREATE DEFINER=`root`@`localhost` PROCEDURE `Proc_CH05_4`(IN patient_ID INT ,IN in_year VARCHAR(50),OUT ou_subsidy FLOAT )
BEGIN
DECLARE tital_Cost FLOAT;
DECLARE totial_income FLOAT;
SELECT incomeMoney INTO totial_income FROM income WHERE patientID =patient_ID;
SELECT sum(checkItemCost) INTO tital_Cost FROM prescription
INNER JOIN checkitem ON prescription.checkItemID=checkitem.checkItemID
WHERE patientID=patient_ID AND examDate >= CONCAT(in_year,'-01-01')
AND examDate <= CONCAT(in_year,'-12-31');
IF totial_income>=0 AND totial_income<5000 THEN
SET ou_subsidy =tital_Cost*0.2;
ELSEIF totial_income>=5000 AND totial_income<10000 THEN
SET ou_subsidy =tital_Cost*0.15;
ELSEIF totial_income>=10000 AND totial_income<30000 THEN
SET ou_subsidy =tital_Cost*0.05;
ELSE
SET ou_subsidy =0;
END IF;
END
6.1.14 CASE 条件语句
CASE
WHEN 条件 THEN 语句列表
[WHEN 条件 THEN 语句列表]
[ELSE 语句列表]
END CASE;
CASE 列名
WHEN 条件值 THEN 语句列表
[WHEN 条件值 THEN 语句列表]
[ELSE 语句列表]
END CASE;
使用CASE语句实现返还补贴不同比例的医疗费用
CREATE DEFINER=`root`@`localhost` PROCEDURE `Proc_CH05_5`(IN patient_ID INT ,IN in_year VARCHAR(50),OUT ou_subsidy FLOAT )
BEGIN
DECLARE tital_Cost FLOAT;
DECLARE totial_income FLOAT;
SELECT incomeMoney INTO totial_income FROM income WHERE patientID =patient_ID;
SELECT sum(checkItemCost) INTO tital_Cost FROM prescription
INNER JOIN checkitem ON prescription.checkItemID=checkitem.checkItemID
WHERE patientID=patient_ID AND examDate >= CONCAT(in_year,'-01-01')
AND examDate <= CONCAT(in_year,'-12-31');
CASE
WHEN totial_income>=0 AND totial_income<5000 THEN
SET ou_subsidy =tital_Cost*0.2;
WHEN totial_income>=5000 AND totial_income<10000 THEN
SET ou_subsidy =tital_Cost*0.15;
WHEN totial_income>=10000 AND totial_income<30000 THEN
SET ou_subsidy =tital_Cost*0.05;
WHEN totial_income>=30000 AND totial_income<0 THEN
SET ou_subsidy =0;
END CASE;
END
在某种情况下(例如,做等值判断),使用第二种写法更加简洁但是,因为CASE后面有列名,功能上会有一些限制
6.1.15 WHILE 循环语句
[label:] WHILE 条件 DO
语句列表
END WHILE [label]
首先判断条件是否成立。如果成立,则执行循环体
label为标号,用于区分不同的循环,可省略
用在begin、repeat、while 或者loop 语句前
假设有测试表test,有Id字段、Val字段
DECLARE rand_val FLOAT;
WHILE rows > 0 DO
SELECT RAND() INTO rand_val;
INSERT INTO test VALUES(NULL, rand_val);
SET rows = rows - 1;
END WHILE;
6.1.16 LOOP 循环语句
[label:] LOOP
语句列表
END LOOP [label] ;
不需判断初始条件,直接执行循环体
LEAVE label ;
遇到 LEAVE 语句,退出循环
批量插3个新的检查项目,检查项目名称为胃镜、肠镜和支气管纤维镜,各项检查的价格均为70元
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_checkitem_insert`( IN checkitems VARCHAR(100))
BEGIN
DECLARE comma_pos INT;
DECLARE current_checkitem VARCHAR(20);
loop_label: LOOP
SET comma_pos = LOCATE(',', checkitems);
SET current_checkitem = SUBSTR(checkitems, 1, comma_pos-1);
IF current_checkitem <> '' THEN
SET checkitems = SUBSTR(checkitems, comma_pos+1);
ELSE
SET current_checkitem = checkitems;
END IF;
INSERT INTO checkitem(checkItemName,checkItemCost) VALUES(current_checkitem,70);
IF comma_pos=0 OR current_checkitem='' THEN
LEAVE loop_label;
# 退出loop_label标识的程序块
END IF;
END LOOP loop_label;
# LOOP循环结束
END
6.1.17 REPEAT 循环语句
[label:] REPEAT
语句列表
UNTIL 条件
END REPEAT [label]
先执行循环操作再判断循环条件
与 LOOP 循环语句相比较相同点
不需要初始条件直接进入循环体
不同点:REPEAT 语句可以设置退出条件
使用REPEAT循环语句编码实现,根据输入的行数要求,向测试表test中批量插入测试数据
CREATE DEFINER=`root`@`localhost` PROCEDURE `Proc_CH05_7`(IN rows INT )
BEGIN
DECLARE rand FLOAT;
REPEAT
SELECT RAND() INTO rand;
INSERT INTO test (val)VALUES(rand);
SET rows = rows -1 ;
UNTIL rows <= 0 END REPEAT;
END
6.1.18 迭代语句
ITERATE label;
从当前代码处返回到程序块开始位置,重新执行
ITERATE关键字可以嵌入到LOOP、WHILE和REPEAT程序块中
输入需增加数据行数,随机产生的测试数据必须大于0.5
CREATE DEFINER=`root`@`localhost` PROCEDURE `Proc_CH05_8`(IN rows INT)
BEGIN
DECLARE rand FLOAT;
random_lbl : REPEAT
SELECT RAND() INTO rand;
IF rand< 0.5 THEN
ITERATE random_lbl;
END IF;
INSERT INTO test (val) VALUES (rand);
SET rows=rows-1;
UNTIL rows<=0 END REPEAT;
END
6.2 事务
6.2.1 什么是事务
TRANSACTION
是将一系列数据操作捆绑成为一个整体进行统一管理机制
多个操作作为一个整体向系统提交,要么都执行、要么都不执行
是一个不可分割的工作逻辑单元
6.2.2 事务的特性
事务必须具备的属性,简称 ACID 属性
ACID
属性描述
原子性:Atomicity
事务是一个完整的操作,事务的各步操作是不可分的(原子的),要么都执行,要么都不执行
一致性:Consistency
当事务完成时,数据必须处于一致状态
隔离性:Isolation
并发事务之间彼此隔离、独立,不应以任何方式依赖于或影响其他事务
持久性:Durability
事务完成后,它对数据库的修改被永久保持
6.2.3 如何创建事务
MySQL中支持事务的存储引擎
InnoDB支持事务操作
MyISAM不支持事务操作
实现事务的方式
在执行命令SET autocommit=0,禁止当前会话的自动提交后,后面的SQL语句将作为事务中的语句一同提交
6.2.4 事务处理
开始事务
BEGIN ;
或
START TRANSACTION;
提交事务
COMMIT ;
回滚(撤销)事务
ROLLBACK ;
使用事务实现小王和小张之间的转账操作
USE paycorp;
BEGIN;
UPDATE account SET balance=balance-2000 WHERE accountName='小王';
UPDATE account SET balance=balance+2000 WHERE accountName='小张';
COMMIT;
小王和小张的总账户余额和转账前保持一致,数据库中数据从一个一致性状态更新到另一个一致性状态
6.2.5 自动关闭和开启事务
默认情况下,每条单独的SQL语句视为一个事务
关闭默认提交状态后,可手动开启、关闭事务
关闭/开启自动提交
SET autocommit = 0|1;
关闭自动提交后,从下一条SQL语句开始将会开启新事务,需使用COMMIT或ROLLBACK语句结束该事务
6.2.6 遵循原则
事务尽可能简短
事务启动至结束后在数据库管理系统中保留大量资源,以保证事务的原子性、一致性、隔离性和持久性
如果在多用户系统中,较大的事务将会占用系统的大量资源,使得系统不堪重负,会影响软件的运行性能,甚至导致系统崩溃
事务中访问的数据量尽量最少
当并发执行事务处理时,事务操作的数据量越少,事务之间对操作数据的争夺就越少
查询数据时尽量不要使用事务
对数据进行浏览查询操作并不会更新数据库的数据时,尽量不使用事务查询数据,避免占用过量的系统资源
在事务处理过程中尽量不要出现等待用户输入的操作
处理事务的过程中,如果需要等待用户输入数据,那么事务会长时间占用资源,有可能造成系统阻塞
6.3 视图
6.3.1 为什么需要视图
不同的人员关注不同的数据
保证信息的安全性
6.3.2 什么是视图
视图是一张虚拟表
表示一张表的部分数据或多张表的综合数据
其结构和数据是建立在对表的查询基础上
视图中不存放数据
一个原始表,根据不同用户的不同需求,可以创建不同的视图
筛选表中的行
防止未经许可的用户访问敏感数据
降低数据库的复杂程度
将多个物理数据表抽象为一个逻辑数据表
6.3.3 视图的好处
开发人员
最终用户
6.3.4 创建 / 查看视图
使用SQL语句创建视图
CREATE VIEW view_name
AS
;
-- 一般以view_xxx或v_xxx格式命名
使用SQL语句删除视图
DROP VIEW [IF EXISTS] view_name;
-- 删除前先判断 视图是否存在
使用SQL语句查看视图
SELECT 字段1, 字段2, …… FROM view_name;
6.3.5 使用视图注意事项
视图中可以使用多个表
一个视图可以嵌套另一个视图,但最好不要超过3层
对视图数据进行添加、更新和删除操作会直接影响所引用表中的数据
当视图数据来自多个表时,不允许添加和删除数据
查看所有视图
USE information_schema;
SELECT * FROM views;
使用视图修改数据会有许多限制,一般在实际开发中视图仅用作查询
6.3.6 演示案例
CREATE VIEW VIEW_1
AS
SELECT prescription.*,patient.patientName FROM prescription INNER JOIN patient ON prescription.patientID=patient.patientID;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RJVIdn1h-1680617792598)(./assets/image-20230403144209697.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mwSY2G3n-1680617792598)(./assets/image-20230403144259240.png)]
6.4 索引
6.4.1 什么是索引
是对数据库表中一列或多列值进行排列的一种结构
作用
大大提高数据库的检索速度
改善数据库性能
MySQL索引按存储类型分类
B-树索引(BTREE)
InnoDB、MyISAM均支持
哈希索引(HASH)
数据存储在数据表中,而索引是创建在数据库表对象上
由表中的一个字段或多个字段生成的键组成
通过索引,可以极大的提升数据查询效率,改善数据库的性能
Indexes Use Key Values to Locate Data
(根据索引键查找定位数据行)
6.4.2 常用索引类型
普通索引
基本索引类型
允许在定义索引的列中插入重复值和空值
唯一索引
索引列数据不重复
允许有空值
主键索引
主键列中的每个值是非空、唯一的
一个主键将自动创建主键索引
复合索引
将多个列组合作为索引
全文索引
支持值的全文查找
允许重复值和空值
6.4.3 创建/删除索引
创建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON table_name (column_name [length] …);
-- 唯一索引、全文索引或空间索引,可选
如果创建索引是未指定创建索引的类型,则创建的索引为普通索引通过CREATE INDEX语句无法创建主键索引,主键索引的创建语句
删除索引
ALTER TABLE tablename ADD PRIMARY KEY(column)
删除表时,该表的所有索引同时会被删除
6.4.4 创建索引的指导原则
按照下列标准选择建立索引的列
频繁搜索的列
经常用作查询选择的列
经常排序、分组的列经常用作连接的列(主键/外键)
不要使用下面的列创建索引
仅包含几个不同值的列
表中仅包含几行
6.4.5 使用索引时注意事项
查询时减少使用*返回表的全部列,不要返回不需要的列
索引应该尽量小,在字节数小的列上建立索引
WHERE 子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前
避免在 ORDER BY 子句中使用表达式
根据业务数据发生频率,定期重新生成或重新组织索引,进行碎片整理
6.4.6 查看索引 / 删除索引
查看已创建的索引信息
SHOW INDEX FROM table_name;
删除索引
DROP INDEX index_name ON table_name;
删除表时,该表的所有索引将同时被删
除删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除
如果组成索引的所有列都被删除,则整个索引将被删除
6.5 数据库的备份与恢复
6.5.1 为什么进行数据库备份
可能导致数据丢失的意外状况
数据库故障
突然断电
病毒入侵
人为误操作
程序错误
运算错误
磁盘故障
灾难(如火灾、地震)和盗窃
6.5.2 数据的备份与恢复
数据备份
是容灾的基础
指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其他的存储介质的过程
MySQL数据备份的常用方法
mysqldump 备份数据库
Navicat 备份数据库
数据恢复
是指通过技术手段,将保存在硬盘等存储介质上的丢失的数据进行抢救和恢复的技术
6.5.3 mysqldump 备份数据库
mysqldump 命令——MySQL的客户端常用逻辑备份工具
将 CREATE 和 INSERT INTO 语句保存到文本文件
属于 DOS 命令
mysqldump [options] database [table1,[table2]…] > [path]/filename.sql
[options] 的选项参数
–u username: 表示用户名
–h host: 表示登录的主机名称,如本机为主机可省略
–p password: 表示登录密码
database
需备份的数据库名
[table1,[table2]…]
需备份的表名若省略,备份所有表
[path]/filename.sql
备份文件名称
mysqldump是DOS系统下的命令
在使用时,无须进入mysql命令行;否则,将无法执行
示例
以root账户登录到MySQL服务器,使用mysqldump命令备份hospital数据库,将SQL脚本保存到e:\hospital.sql中
mysqldump -uroot -proot hospital > e:\hospital.sql
导出的SQL脚本中两种注释
以--开头:关于SQL语句的注释信息
以/*!开头, */结尾:是关于MySQL服务器相关的注释
为保证账户密码安全,命令中可不写密码
但是,参数-p必须有,回车后根据提示写密码
常用参数选项
参数
描述
-add-drop-table
在每个CREATE TABLE语句前添加DROP TABLE语句,默认是打开的,可以用-skip-add-drop-table取消
–add-locks
该选项会在INSERT 语句中捆绑一个LOCK TABLE 和UNLOCK TABLE 语句
好处:防止记录被再次导入时,其他用户对表进行的操作
-t或-no-create-info
只导出数据,而不添加CREATE TABLE语句
-c或–complete-insert
在每个INSERT语句的列上加上列名,在数据导入另一个数据库时有用
-d或–no-data
不写表的任何行信息,只转储表的结构
备份文件包含的主要信息
备份后文件包含信息MySQL服务器及mysqldump工具的版本号
备份账户的名称
主机信息
备份的数据库名称
SQL语句注释和服务器相关注释
CREATE和INSERT语句
6.5.4 Navicat 备份数据库
Navicat也可以用于导出数据库的备份脚本
右键点选数据库->转储SQL文件->结构和数据…
选择导出文件的保存路径和文件名后,便可导出数据库脚本
6.5.5 恢复数据库
在需要恢复数据库数据时,对导出的SQL备份脚本执行导入操作
使用mysql命令
使用source命令
使用Navicat导入数据
6.5.6 mysql 恢复数据库
mysql为DOS命令
mysql –u username –p [dbname] < filename.sql
-- –u 用户名
-- –p 数据库名
-- filename.sql 备份文件名
在执行该语句之前,必须在MySQL服务器中创建新数据库
因为导出的备份文件中只包含表的备份,而不包含创建的库的语句
因此执行导入操作时必须指定数据库名,且该数据库必须存在
6.5.7 source 恢复数据库
除了在命令行中导入数据以外,还可以在数据库已连接状态下导入数据
source filename;
登录MySQL服务后使用
执行该命令前,先创建并选择恢复后的目标数据库
CREATE DATABASE hospitalDB; #创建数据库
USE hospitalDB; #选择要导入数据库的数据库
source e:\hospital.sql #导入数据
# SQL脚本文件后面不要加字符 ;
6.5.8 Navicat 恢复数据库
Navicat中导入数据的操作步骤
右键单击要导入数据的数据库
右键单击运行SQL文件…快捷菜单项
在导入窗口,选择要运行的SQL文件
点击开始按钮开始导入数据
你可能感兴趣的:(一篇文章入门编程系列,MySQL,数据库,java,mysql)
软件测试之通用功能测试点
头疼的程序员
软件测试功能测试
文章目录前言分页搜索框对搜索框操作的测试点搜索结果页测试点输入框测试点输入方式测试点输入框操作类测试点图片相关的测试点PC端上传图片测试点PC端图片浏览测试点移动端上传图片测试点移动端浏览图片测试点视频播放器测试点视频播放测试点视频操作测试点登录新增删除修改密码查询查询结果测试点单选按钮复选框滚动条控件权限测试导入导出测试后退/返回按钮系统易用性界面测试窗体控件菜单安全测试参考目录前言阅读本文前请
Java 循环结构进阶
m0_74824483
面试学习路线阿里巴巴java
二重循环1.一个循环体内又包含另一个完整的循环结构2.外城循环变量变化一次,内层循环变量要变化一遍。二重循环-冒泡排序
Java--IO流详解 (上)--字符流
不修×蝙蝠
IO流JavaSE输入流输出流字节流字符流
目录IO流的概念字符流输入流Reader核心方法1.close()2.mark(intreadAheadLimit)3.markSupported()4.read()5.read(char[]cbuf)6.read(char[]cbuf,intoff,intlen)7.read(CharBuffertarget)8.ready()9.reset()10.skip(longn)Reader的常用子类
JavaScript 中内存泄漏的几种情况是什么,如何避免?
程序员黄同学
前端开发JavaScriptJava面试题javascript前端开发语言
一、全局变量泄漏(高频考点)问题场景:未使用var/let/const声明变量,或意外挂载到window对象//错误示例(创建全局变量)functioninitData(){cache=newArray(1000000)//隐式全局变量}//正确方案(严格模式+局部变量)'usestrict'functionsafeInit(){constlocalCache=[]//局部变量自动回收}防御建议:
自定义公式校验规则、常用的JavaScript正则公式合法校验、自定义公式合集、前端校验规则、字符串校验
a_dream(前端)
前端javascript正则表达式
vue开发中,会使用到自定义公式校验合法性,判断公式是否符合逻辑,整理个人使用过的自定义公式页面保存时对输入的字符串进行校验的一套规则(文章最后有完整代码)目录1.正则判断2.校验数字(输入数字不超过十位数,不超过两位小数)3.校验括号(嵌套括号是否符合要求)4.(完整代码文件)1.正则判断constre=/[^0-9\(\)\+\-\×\÷\.\#\{\}]{1,}///判断输入字符合法性的正则
高阶C语言|动态内存管理
我想吃余
C语言篇c语言javajvm
欢迎讨论:在阅读过程中有任何疑问,欢迎在评论区留言,我们一起交流学习!点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏,并分享给更多对C语言感兴趣的朋友文章目录@[toc]动态内存管理在C/C++编程中的重要性为什么需要动态内存管理?动态内存函数malloc和freecallocrealloc调整内存空间存在两种情况情况1情况2常见的动态内存错误对NULL指针的解引用操作对动态开辟空
【AI系列】从零开始学习大模型GPT (2)- Build a Large Language Model (From Scratch)
Tasfa
AI人工智能教程人工智能学习gpt
前序文章【AI系列】从零开始学习大模型GPT(1)-BuildaLargeLanguageModel(FromScratch)BuildaLargeLanguageModel背景第1章:理解大型语言模型第2章:处理文本数据第3章:编码Attention机制什么是Attention机制?Attention机制的基本原理数学表示应用总结为什么要使用注意力机制如何实现?简单注意力机制带训练权重的注意力机
Dify基础:windows下如何学习Linux系统?wsl相关基本概念的介绍
几道之旅
Dify:智能体(Agent)工作流知识库全搞定linuxwindowsdocker
文章目录前言首先,WSL到底是个什么东西?在WSL之前,有个hyperV,又是个啥?WSL和HyperV的关系是什么?我来总结一下吧,有了wsl,就相当于在你的windows上有了一个可以运行linux的虚拟机。这和Dify有啥关系?前言为了实现本文效果,我直接下血本把自己的wsl给卸载了。就说这个牺牲精神,希望大伙儿多多关注、多多点赞、多多评论。首先,WSL到底是个什么东西?在很久以前,有一个叫
Vue3笔记_<入门基础篇>
我的白银时代
Vue2进阶Vue3笔记Vue3零到一实战笔记vue.js前端
目录Setup语法糖ref:定义一个数据的响应式reactive:定义一个对象类型的响应式数据toRef()toRefs()计算属性watchEffect函数生命周期Vue3获取DomPropsVue3自定义事件Setup语法糖setup是一个专门用于组合式API的特殊钩子函数,只在初始化时执行一次。setup有两种返回值:对象。对象中的属性,方法在模板中都可以直接使用函数。自定义渲染内容,覆盖模
告别繁琐的路径配置:带你写一个让 Monorepo 项目模块导入更优雅的 Webpack 插件
真的很上进
Web前端进阶合集webpack前端javascriptjavareact.jsvuenode.js
目录手把手带你写一个Webpack提效插件前言为什么要写这个插件?Webpack插件是什么?开发MonorepoAliasPlugin1.基础结构搭建2.理解Webpack模块解析3.路径别名的解析和转换4.添加所有包的支持5.测试插件6.使用方法总结手把手带你写一个Webpack提效插件前言大家好,今天我想和大家分享如何从零开始写一个实用的Webpack提效插件(完整源码在文章最后).作为前端开
IDEA配置JSTL
阿俊仔(摸鱼版)
intellij-ideajavatomcat
IDEA配置JSTL下载JSTL官网下载地址:https://tomcat.apache.org翻到下面找到:点击,download下载下面内容:(就Impl和Spec)配置JSTL将两个下好的jar包放在lib文件夹下ctrl+shift+alt+s打开ProjectStructure左侧找到Modules->右侧选择Dependences->点击➕号Library->点击java->选中WEB
javax.imageio.IIOException: Can‘t read input file
阿俊仔(摸鱼版)
眼盲心不瞎的憨憨bug日记intellij-idea
问题描述根据路径地址读取图片存入数据库时,提示我没法读取图片。原因分析:大致就是各种情况导致路径不对或者文件不对路径格式写错了(windows路径分隔符是\,Linux是/)文件格式写错(文件名写错或者文件后缀写错)该路径下此文件不存在(复制路径去本地找找核对一下)解决方案:先看报错信息检查出错的语句(那边没什么问题),然后我又检查了所有写了文件路径的语句,发现我写入数据库的那个文件的路径没把文件
You have an error in your SQL syntax导致建表失败的原因以及解决方案bug记录
阿俊仔(摸鱼版)
眼盲心不瞎的憨憨bug日记sqlbug数据库
问题描述我在使用sql语句创建表提示我无法添加约束,导致建表失败。编译器给了以下提示信息:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear’原因分析:显然是sql语句的语法可能存在不正确,可以先检查一下near后提示的出错位置,也
MVC和react
吃蛋糕的居居
javascriptcssnode.jshtml
MVC1.MVC是一种使用MVC(ModelViewController模型-视图-控制器)设计创建Web应用程序的模式.(1)Model(模型)表示应用程序核心(比如数据库记录列表).(2)View(视图)显示数据(数据库记录).(3)Controller(控制器)处理输入(写入数据库记录).2.MVC模式同时提供了对HTML、CSS和JavaScript的完全控制.(1)Model(模式)是应
海南大学--学习资料--网络应用开发java web(胡祝华)-第3次作业解析(学长整理)
创创大帝(水印很浅-下载的文档)
海南大学--学习资料--PHPHTMLjavaweb前端javahtml
海南大学–学习资料–网络应用开发javaweb(胡祝华)-第3次作业解析(学长整理)海南大学–学习资料–网络应用开发javaweb(胡祝华)-第3次作业解析(学长整理)海南大学–学习资料–网络应用开发javaweb(胡祝华)-第3次作业解析(学长整理)表单验证:1.在表单的源码中head部分用script导入了script/regcheckdata.js文件2.当点击提交按钮时,onSubmit=
手把手教你给 windows装个vmware虚拟机
python算法小白
附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全:书单导航页(点击右侧极客侠栈即可打开个人博客):极客侠栈①【Java】学习之路吐血整理技术书从入门到进阶最全50+本(珍藏版)②【算法数据结构+acm】从入门到进阶吐血整理书单50+本(珍藏版)③【数据库】从入门到进阶必读18本技术书籍网盘吐血整理网盘(珍藏版)④【Web前端】从HTML到JS到AJ
RESTful API 和 WebSocket 的区别
戎梓漩
计算机restfulwebsocket后端
文章目录1.RESTfulAPI特点使用场景示例2.WebSocket特点使用场景示例3.RESTfulAPI和WebSocket对比总结4.哪种方式适合大模型服务?RESTfulAPIWebSocket5.什么时候用REST?什么时候用WebSocket?6.结论RESTfulAPI和WebSocket是两种不同的通信方式,主要区别在于数据交互方式、连接管理、性能和适用场景。1.RESTfulA
appium环境搭建
weixin_43516809
appiumappuim
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言记录手机自动化环境搭建学习过程一、jdk安装配置(省略)二、AndroidSDK安装配置三、python环境安装配置四、pycharm开发工具安装五、安装node.js六、appium安装1.安装2.检查appium环境是否搭建成功七、appium工作原理总结前言记录手机自动化环境搭建学习过程一、jdk安装配置(省略)cm
web&安卓逆向之必学CSS基础知识
安替-AnTi
前端csswebandroid逆向
文章目录CSS基础知识一、CSS的介绍1.CSS的定义2.CSS的作用3.CSS的基本语法4.小结二、css的引入方式1.行内式语法格式:特点:适用场景:2.内嵌式(内部样式)语法格式:特点:适用场景:3.外链式语法格式:特点:适用场景:4.CSS引入方式选择选择建议:5.小结三、css选择器1.CSS选择器的定义2.CSS选择器的种类标签选择器类选择器层级选择器(后代选择器)ID选择器组选择器伪
【语义分割专题文章】
BoostingIsm
Segmentationpython
本栏聚焦在语义分割的相关算法,专栏内文章的代码均已实现。一、数据篇【遥感】【道路】篇:【语义分割】【专题系列】一、MassachusettsRoadsDataset马萨诸塞州道路数据集获取二、CNN篇Unet(2015):【语义分割】【专题系列】二、Unet语义分割代码实战PSPNet(2017):【语义分割】【专题系列】三、PSPNet语义分割代码实战Linknet(2017)FPN(Featu
在Podman中配置Dify Sandbox服务与外部PostgreSQL服务的网络连接
松哥_ai自动化
经验分享
在Podman中配置DifySandbox服务与外部PostgreSQL服务的网络连接引言在容器化环境中,确保不同服务之间的可靠通信是至关重要的。本文将指导你如何使用Podman来配置DifySandbox服务与外部通过docker-compose管理的PostgreSQL数据库服务之间的网络连接。我们将逐步介绍每一步骤,并适时融入相关概念,帮助读者更好地理解配置过程。网络基础:理解容器间的通信在
Flutter 简化线程Isolate的使用
CodeOfCC
flutterflutter开发语言dart多线程
文章目录前言一、完整代码二、使用示例1、通过lambda启动线程2、获取线程返回值3、线程通信4、结束isolate总结前言flutter的线程是数据独立的,每个线程一般通过sendport来传输数据,这样使得线程调用没那么方便,本文将提供一种支持lambda启动isolate的方法,且支持捕获值类型变量,以及支持返回值。一、完整代码由于代码量较少,原理就不介绍了,直接给出完整实现。isolate
github提示 Filename too long
JavaGameServer
#gitrocketmq
gitconfig--globalcore.longpathstrueerror:open("chapter13/rocketmq-externals-master/rocketmq-externals-master/rocketmq-connect/rocketmq-connect-runtime/src/test/java/org/apache/rocketmq/connect/runtime
分布式数据库面试整理
Necther
数据库面试分布式
5.3.1redis面试专题1、redis和memcached什么区别?为什么高并发下有时单线程的redis比多线程的memcached效率要高?区别:mc可缓存图片和视频。rd支持除k/v更多的数据结构;rd可以使用虚拟内存,rd可持久化和aof灾难恢复,rd通过主从支持数据备份;3.rd可以做消息队列。原因:mc多线程模型引入了缓存一致性和锁,加锁带来了性能损耗。2、redis主从复制如何实现
Stable Diffusion AI软件绘画速成从入门到精通
课兴兴
stablediffusion人工智能
课兴兴资源圈创始人,更多课程干货,欢迎关注(课兴兴)KMastery-StableDiffusionAI软件绘画速成从入门到精通-中英字幕KMasteryStableDiffusionFromNovicetoArtist英文+中英字幕|1080P|14.5GBAI绘画软件速成课程:从初学者到专业人士欢迎来到人工智能绘画软件初学者速成班!无论您是刚刚开始探索绘画世界,还是希望使用人工智能技术增强您的
定了,2025年数据库运维就这样干
我科绝伦(Huanhuan Zhou)
mysqloracle数据库运维oracle
在数字化浪潮中,数据库作为企业数据资产的核心载体,其稳定运行与高效管理至关重要。新的一年,为应对日益增长的数据量和业务复杂度,我们为数据库运维制定了一系列全面且细致的计划,旨在提升数据库性能、保障数据安全,为企业业务发展筑牢坚实基础。一、强化巡检,防患未然数据库的稳定运行离不开日常的精心呵护。2025年,我们将进一步加强巡检工作,利用专业工具和自主研发的系统,对数据库进行全面“体检”。不仅关注数据
利用IDEA将Java.class文件反编译为Java文件:原理、实践与深度解析
.猫的树
Java反编译IDEA技巧逆向工程
文章目录引言:当.class文件遇到源代码缺失第一章:反编译技术基础认知1.1Java编译执行原理1.2反编译的本质1.3法律与道德边界第二章:IDEA内置反编译工具详解2.1环境准备2.2三步完成基础反编译2.3高级反编译技巧2.3.1调试模式反编译2.3.2Lambda表达式处理2.3.3泛型类型恢复第三章:Fernflower反编译引擎深度配置3.1引擎参数调优3.2多文件批量反编译3.3结
不要直接返回DTO给前端
Coder LM Wang
Javajava
Entity(实体类):对应数据库表结构包含所有的数据库字段可能包含敏感信息,如密码哈希、状态标记等DTO(数据传输对象):专门设计用于数据传输只包含前端需要的字段可以自定义字段名和数据格式
新手必看:TikTok卖家中心实用指南,附2025最新TikTok入驻教程
菠萝派爱跨境
人工智能网络大数据
对于跨境电商来说,TikTok卖家中心是一个强大的工具,它能够帮助卖家轻松管理产品、订单、数据和广告。然而,对于初次接触这个平台的卖家来说,如何入驻并高效使用,成为了一大难题。本篇文章将为您详细讲解TikTok卖家中心的使用方法及最新的入驻教程。一、入驻教程1.入驻前准备(1)TikTok的商业账号。(2)入驻材料:营业执照(或身份证明)、国际收款账户(如Payoneer)、物流和退货地址、产品清
《Stable Diffusion绘画完全指南:从入门到精通的Prompt设计艺术》 第一章
Allen-Steven
python相关应用SD创作实践stablediffusionprompt人工智能
第一章:认识StableDiffusion与Prompt设计基础1.1什么是StableDiffusion:生成原理与核心优势一、颠覆性生成逻辑:从噪声到艺术的魔法逆向降噪原理传统AI绘画:直接生成完整像素StableDiffusion:通过潜扩散模型(LDM),在低维潜空间(LatentSpace)逐步去除噪声,最终解码为高清图像类比解释:如同雕塑家从混沌的大理石中凿出形体,AI在噪声中「雕刻」
scala的option和some
矮蛋蛋
编程scala
原文地址:
http://blog.sina.com.cn/s/blog_68af3f090100qkt8.html
对于学习 Scala 的 Java™ 开发人员来说,对象是一个比较自然、简单的入口点。在 本系列 前几期文章中,我介绍了 Scala 中一些面向对象的编程方法,这些方法实际上与 Java 编程的区别不是很大。我还向您展示了 Scala 如何重新应用传统的面向对象概念,找到其缺点
NullPointerException
Cb123456
androidBaseAdapter
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference
出现以上异常.然后就在baidu上
PHP使用文件和目录
天子之骄
php文件和目录读取和写入php验证文件php锁定文件
PHP使用文件和目录
1.使用include()包含文件
(1):使用include()从一个被包含文档返回一个值
(2):在控制结构中使用include()
include_once()函数需要一个包含文件的路径,此外,第一次调用它的情况和include()一样,如果在脚本执行中再次对同一个文件调用,那么这个文件不会再次包含。
在php.ini文件中设置
SQL SELECT DISTINCT 语句
何必如此
sql
SELECT DISTINCT 语句用于返回唯一不同的值。
SQL SELECT DISTINCT 语句
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。
SQL SELECT DISTINCT 语法
SELECT DISTINCT column_name,column_name
F
java冒泡排序
3213213333332132
java冒泡排序
package com.algorithm;
/**
* @Description 冒泡
* @author FuJianyong
* 2015-1-22上午09:58:39
*/
public class MaoPao {
public static void main(String[] args) {
int[] mao = {17,50,26,18,9,10
struts2.18 +json,struts2-json-plugin-2.1.8.1.jar配置及问题!
7454103
DAOspringAjaxjsonqq
struts2.18 出来有段时间了! (貌似是 稳定版)
闲时研究下下! 貌似 sruts2 搭配 json 做 ajax 很吃香!
实践了下下! 不当之处请绕过! 呵呵
网上一大堆 struts2+json 不过大多的json 插件 都是 jsonplugin.34.jar
strut
struts2 数据标签说明
darkranger
jspbeanstrutsservletScheme
数据标签主要用于提供各种数据访问相关的功能,包括显示一个Action里的属性,以及生成国际化输出等功能
数据标签主要包括:
action :该标签用于在JSP页面中直接调用一个Action,通过指定executeResult参数,还可将该Action的处理结果包含到本页面来。
bean :该标签用于创建一个javabean实例。如果指定了id属性,则可以将创建的javabean实例放入Sta
链表.简单的链表节点构建
aijuans
编程技巧
/*编程环境WIN-TC*/ #include "stdio.h" #include "conio.h"
#define NODE(name, key_word, help) \ Node name[1]={{NULL, NULL, NULL, key_word, help}}
typedef struct node { &nbs
tomcat下jndi的三种配置方式
avords
tomcat
jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称
访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
tomcat配置
关于敏捷的一些想法
houxinyou
敏捷
从网上看到这样一句话:“敏捷开发的最重要目标就是:满足用户多变的需求,说白了就是最大程度的让客户满意。”
感觉表达的不太清楚。
感觉容易被人误解的地方主要在“用户多变的需求”上。
第一种多变,实际上就是没有从根本上了解了用户的需求。用户的需求实际是稳定的,只是比较多,也比较混乱,用户一般只能了解自己的那一小部分,所以没有用户能清楚的表达出整体需求。而由于各种条件的,用户表达自己那一部分时也有
富养还是穷养,决定孩子的一生
bijian1013
教育人生
是什么决定孩子未来物质能否丰盛?为什么说寒门很难出贵子,三代才能出贵族?真的是父母必须有钱,才能大概率保证孩子未来富有吗?-----作者:@李雪爱与自由
事实并非由物质决定,而是由心灵决定。一朋友富有而且修养气质很好,兄弟姐妹也都如此。她的童年时代,物质上大家都很贫乏,但妈妈总是保持生活中的美感,时不时给孩子们带回一些美好小玩意,从来不对孩子传递生活艰辛、金钱来之不易、要懂得珍惜
oracle 日期时间格式转化
征客丶
oracle
oracle 系统时间有 SYSDATE 与 SYSTIMESTAMP;
SYSDATE:不支持毫秒,取的是系统时间;
SYSTIMESTAMP:支持毫秒,日期,时间是给时区转换的,秒和毫秒是取的系统的。
日期转字符窜:
一、不取毫秒:
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
简要说明,
YYYY 年
MM 月
【Scala六】分析Spark源代码总结的Scala语法四
bit1129
scala
1. apply语法
FileShuffleBlockManager中定义的类ShuffleFileGroup,定义:
private class ShuffleFileGroup(val shuffleId: Int, val fileId: Int, val files: Array[File]) {
...
def apply(bucketId
Erlang中有意思的bug
bookjovi
erlang
代码中常有一些很搞笑的bug,如下面的一行代码被调用两次(Erlang beam)
commit f667e4a47b07b07ed035073b94d699ff5fe0ba9b
Author: Jovi Zhang <[email protected]>
Date: Fri Dec 2 16:19:22 2011 +0100
erts:
移位打印10进制数转16进制-2008-08-18
ljy325
java基础
/**
* Description 移位打印10进制的16进制形式
* Creation Date 15-08-2008 9:00
* @author 卢俊宇
* @version 1.0
*
*/
public class PrintHex {
// 备选字符
static final char di
读《研磨设计模式》-代码笔记-组合模式
bylijinnan
java设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.ArrayList;
import java.util.List;
abstract class Component {
public abstract void printStruct(Str
利用cmd命令将.class文件打包成jar
chenyu19891124
cmdjar
cmd命令打jar是如下实现:
在运行里输入cmd,利用cmd命令进入到本地的工作盘符。(如我的是D盘下的文件有此路径 D:\workspace\prpall\WEB-INF\classes)
现在是想把D:\workspace\prpall\WEB-INF\classes路径下所有的文件打包成prpall.jar。然后继续如下操作:
cd D: 回车
cd workspace/prpal
[原创]JWFD v0.96 工作流系统二次开发包 for Eclipse 简要说明
comsci
eclipse设计模式算法工作swing
JWFD v0.96 工作流系统二次开发包 for Eclipse 简要说明
&nb
SecureCRT右键粘贴的设置
daizj
secureCRT右键粘贴
一般都习惯鼠标右键自动粘贴的功能,对于SecureCRT6.7.5 ,这个功能也已经是默认配置了。
老版本的SecureCRT其实也有这个功能,只是不是默认设置,很多人不知道罢了。
菜单:
Options->Global Options ...->Terminal
右边有个Mouse的选项块。
Copy on Select
Paste on Right/Middle
Linux 软链接和硬链接
dongwei_6688
linux
1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连
DIV底部自适应
dcj3sjt126com
JavaScript
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml&q
Centos6.5使用yum安装mysql——快速上手必备
dcj3sjt126com
mysql
第1步、yum安装mysql
[root@stonex ~]# yum -y install mysql-server
安装结果:
Installed:
mysql-server.x86_64 0:5.1.73-3.el6_5 &nb
如何调试JDK源码
frank1234
jdk
相信各位小伙伴们跟我一样,想通过JDK源码来学习Java,比如collections包,java.util.concurrent包。
可惜的是sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar。
下面是编译jdk的具体步骤:
1.把C:\java\jdk1.6.0_26\sr
Maximal Rectangle
hcx2013
max
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
public class Solution {
public int maximalRectangle(char[][] matrix)
Spring MVC测试框架详解——服务端测试
jinnianshilongnian
spring mvc test
随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的。从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用spring-test-mvc项目(合并到spring3.2中了)。
Spring MVC测试框架提供了对服务器端和客户端(基于RestTemplate的客户端)提供了支持。
&nbs
Linux64位操作系统(CentOS6.6)上如何编译hadoop2.4.0
liyong0802
hadoop
一、准备编译软件
1.在官网下载jdk1.7、maven3.2.1、ant1.9.4,解压设置好环境变量就可以用。
环境变量设置如下:
(1)执行vim /etc/profile
(2)在文件尾部加入:
export JAVA_HOME=/home/spark/jdk1.7
export MAVEN_HOME=/ho
StatusBar 字体白色
pangyulei
status
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
/*you'll also need to set UIViewControllerBasedStatusBarAppearance to NO in the plist file if you use this method
如何分析Java虚拟机死锁
sesame
javathreadoracle虚拟机jdbc
英文资料:
Thread Dump and Concurrency Locks
Thread dumps are very useful for diagnosing synchronization related problems such as deadlocks on object monitors. Ctrl-\ on Solaris/Linux or Ctrl-B
位运算简介及实用技巧(一):基础篇
tw_wangzhengquan
位运算
http://www.matrix67.com/blog/archives/263
去年年底写的关于位运算的日志是这个Blog里少数大受欢迎的文章之一,很多人都希望我能不断完善那篇文章。后来我看到了不少其它的资料,学习到了更多关于位运算的知识,有了重新整理位运算技巧的想法。从今天起我就开始写这一系列位运算讲解文章,与其说是原来那篇文章的follow-up,不如说是一个r
jsearch的索引文件结构
yangshangchuan
搜索引擎jsearch全文检索信息检索word分词
jsearch是一个高性能的全文检索工具包,基于倒排索引,基于java8,类似于lucene,但更轻量级。
jsearch的索引文件结构定义如下:
1、一个词的索引由=分割的三部分组成: 第一部分是词 第二部分是这个词在多少
按字母分类:
ABCDEFGHIJKLMNOPQRSTUVWXYZ其他
首页 -
关于我们 -
站内搜索 -
Sitemap -
侵权投诉
版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.