当前位置: 首页 > news >正文

毕业设计:基于java的在线问卷调查系统的设计与实现(源码)

第4章 系统设计

系统的设计一切都是为了用户的使用,虽然用户使用过程中可能只是面对着浏览器进行各种操作,但是不代表着系统对于用户在浏览器上的操作不进行处理,所以说,设计一个系统需要考虑到方方面面。

4.1 功能结构设计

图4.1即为设计的管理员功能结构,管理员权限操作的功能包括对注册用户信息的管理,对问卷,题目,问卷调查,新闻资讯等信息的管理。

添加图片注释,不超过 140 字(可选)

图4.1 管理员功能结构 图4.2即为设计的用户功能结构,用户权限操作的功能包括参与问卷调查,查看新闻,查看问卷调查记录。

添加图片注释,不超过 140 字(可选)

图4.2 用户功能结构

4.2 数据库设计

在线问卷调查系统运行中产生的数据需要按照提前设置的存储规则进行保存,而这个存储规则则是在数据库的设计中进行设置的。通常情况下,为了更好的配合系统运行,也要给用户带来良好的使用体验,设计一个很好的数据库是必须的,因为它能减少用户的等待时间,还可以对系统的请求在最短时间内进行响应。所以,对数据库设计时,需要花费一定的时间来分析系统对于数据存储的要求以及存储的具体数据,然后设计具体的存储规则,保证数据库能够对系统的各种数据请求进行及时回应,缩短数据处理时间,并在一定程度上降低数据冗余,节省存储空间。

4.2.1 数据库概念设计

实体-联系图还有一个名称即E-R图,是Entity Relationship Diagram各英文单词首字母的缩写,它这种概念模型通常用于对现实世界进行描述。同时它还是一种能够直观表达数据中实体,联系,属性的有效手段。绘制E-R图能够选择的工具也有很多,但是Office Visio 这款软件在E-R图的绘制上一般都是作为首选工具,因为它是基于可视化处理,使用它创建E-R图非常简单。使用基本的E-R图构成元素,比如椭圆,菱形,矩形,还有实线段来表达对应的信息,椭圆代表属性,即实体的特征,矩形代表实体,即数据库中的一个具体数据表,菱形代表实体中相互关系,实线段主要是完成椭圆,矩形,菱形的连接,基于这样的方式即可完成对本系统的E-R图进行完整绘制。

(1)图4.4即为题目这个实体所拥有的属性值。

添加图片注释,不超过 140 字(可选)

图4.4 题目实体属性图 (2)

图4.5即为用户这个实体所拥有的属性值。

添加图片注释,不超过 140 字(可选)

图4.5 用户实体属性图

(3)图4.6即为问卷这个实体所拥有的属性值。

添加图片注释,不超过 140 字(可选)

图4.6 问卷实体属性图

  1. 图4.7即为问卷调查记录这个实体所拥有的属性值。

添加图片注释,不超过 140 字(可选)

图4.7 问卷调查记录实体属性图

  1. 图4.8即为上面介绍的实体中存在的联系。

添加图片注释,不超过 140 字(可选)

图4.8 实体间关系E-R图

4.2.2 数据库物理设计

本小节主要任务即是根据上述内容进行数据存储结构的设计,也就是在数据库中设计存放本系统的数据的数据表,设计数据表时,需要对各个字段进行确定,通常来说,一个实体与一张数据表相对应,实体的属性就用来表示字段名称,不同的字段表示的数据类型以及取值都不相同,这里需要根据系统实际数据的情况进行设置,同时也需要在具体表中确定该表的主键,以及该表各个字段是否能够保持空等进行说明,设计完成一张数据表的结构之后,在保存时同样要命名,尽量选择英文名称进行命名并保存,方便今后系统对数据表进行数据存储访问时,在提高数据存储效率的同时,还不容易导致系统出错。接下来就对设计的数据表进行展示。

表4.1 问卷表

字段

注释

类型

id (主键)

主键

int(20)

exampaper_name

问卷名称

varchar(200)

exampaper_date

时长(分钟)

int(11)

exampaper_jieshuyu

结束语

varchar(255)

exampaper_types

问卷状态

int(11)

create_time

创建时间

timestamp

表4.2 题目表

字段

注释

类型

id (主键)

主键

int(20)

exampaper_id

所属问卷id(外键)

int(20)

examquestion_name

试题名称

varchar(200)

examquestion_options

选项

longtext

examquestion_types

试题类型

int(20)

examquestion_sequence

试题排序,值越大排越前面

int(20)

create_time

创建时间

timestamp

表4.3 问卷调查记录表

字段

注释

类型

id (主键)

主键

int(20)

examrecord_uuid_number

问卷调查编号

varchar(200)

yonghu_id

问卷调查用户

int(20)

exampaper_id

所属问卷id(外键)

int(20)

insert_time

问卷调查时间

timestamp

create_time

创建时间

timestamp

表4.4 管理员表

字段

注释

类型

id (主键)

主键

bigint(20)

username

用户名

varchar(100)

password

密码

varchar(100)

role

角色

varchar(100)

addtime

新增时间

timestamp

表4.5 新闻资讯表

字段

注释

类型

id (主键)

主键

int(11)

news_name

新闻资讯名称

varchar(200)

news_types

新闻类型

int(11)

news_photo

新闻资讯图片

varchar(200)

insert_time

新闻资讯时间

timestamp

news_content

新闻资讯详情

text

create_time

创建时间

timestamp

表4.6 答题详情表

字段

注释

类型

id (主键)

主键

int(20)

examredetails_uuid_number

问卷编号

varchar(200)

yonghu_id

用户id

int(20)

examquestion_id

试题id(外键)

int(20)

examredetails_myanswer

用户选项

varchar(200)

create_time

创建时间

timestamp

表4.7 用户表

字段

注释

类型

id (主键)

主键

int(11)

username

账户

varchar(200)

password

密码

varchar(200)

yonghu_name

用户姓名

varchar(200)

sex_types

性别

int(11)

yonghu_id_number

身份证号

varchar(200)

yonghu_phone

手机号

varchar(200)

yonghu_photo

照片

varchar(200)

create_time

创建时间

timestamp

第5章 系统实现

编程人员在搭建的开发环境中,运用编程技术实现本系统设计的各个操作权限的功能。在本节中,就展示部分操作权限的功能与界面。

5.1 管理员功能实现

5.1.1 问卷管理

图5.1 即为编码实现的问卷管理界面,管理员在该界面中可以对已有问卷进行启用或禁用,可以新增问卷,编辑更改已有问卷的资料,包括问卷名称,结束语等信息,可以删除需要删除的问卷,可以根据问卷名称,问卷的状态来获取需要的问卷信息。

添加图片注释,不超过 140 字(可选)

图5.1 问卷管理界面

核心代码:

/**

* 后端修改

*/

@RequestMapping("/update")

public R update(@RequestBody ExampaperEntity exampaper, HttpServletRequest request){

logger.debug("update方法:,,Controller:{},,exampaper:{}",this.getClass().getName(),exampaper.toString());

String role = String.valueOf(request.getSession().getAttribute("role"));

if(StringUtil.isEmpty(role))

return R.error(511,"权限为空");

//根据字段查询是否有相同数据

Wrapper<ExampaperEntity> queryWrapper = new EntityWrapper<ExampaperEntity>()

.notIn("id",exampaper.getId())

.andNew()

.eq("exampaper_name", exampaper.getExampaperName())

.eq("exampaper_date", exampaper.getExampaperDate())

.eq("exampaper_types", exampaper.getExampaperTypes())

;

logger.info("sql语句:"+queryWrapper.getSqlSegment());

ExampaperEntity exampaperEntity = exampaperService.selectOne(queryWrapper);

if(exampaperEntity==null){

// String role = String.valueOf(request.getSession().getAttribute("role"));

// if("".equals(role)){

// exampaper.set

// }

exampaperService.updateById(exampaper);//根据id更新

return R.ok();

}else {

return R.error(511,"表中有相同数据");

}

}

/**

* 删除

*/

@RequestMapping("/delete")

public R delete(@RequestBody Integer[] ids){

logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());

exampaperService.deleteBatchIds(Arrays.asList(ids));

return R.ok();

}

5.1.2 问卷调查管理

图5.2 即为编码实现的问卷调查管理界面,管理员在该界面中对用户提交的问卷调查信息进行查看,管理员可以直接查看每条问卷调查的调查详情信息,同时可以删除问卷调查信息。

添加图片注释,不超过 140 字(可选)

图5.2 问卷调查管理界面

核心代码:

/**

* 批量上传

*/

@RequestMapping("/batchInsert")

public R save( String fileName){

logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);

try {

List<ExampaperEntity> exampaperList = new ArrayList<>();//上传的东西

Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段

Date date = new Date();

int lastIndexOf = fileName.lastIndexOf(".");

if(lastIndexOf == -1){

return R.error(511,"该文件没有后缀");

}else{

String suffix = fileName.substring(lastIndexOf);

if(!".xls".equals(suffix)){

return R.error(511,"只支持后缀为xls的excel文件");

}else{

URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径

File file = new File(resource.getFile());

if(!file.exists()){

return R.error(511,"找不到上传文件,请联系管理员");

}else{

List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件

dataList.remove(0);//删除第一行,因为第一行是提示

for(List<String> data:dataList){

//循环

ExampaperEntity exampaperEntity = new ExampaperEntity();

// exampaperEntity.setExampaperName(data.get(0)); //问卷名称 要改的

// exampaperEntity.setExampaperDate(Integer.valueOf(data.get(0))); //时长(分钟) 要改的

// exampaperEntity.setExampaperTypes(Integer.valueOf(data.get(0))); //问卷状态 要改的

// exampaperEntity.setCreateTime(date);//时间

exampaperList.add(exampaperEntity);

//把要查询是否重复的字段放入map中

}

//查询是否重复

exampaperService.insertBatch(exampaperList);

return R.ok();

}

}

}

}catch (Exception e){

return R.error(511,"批量插入数据异常,请联系管理员");

}

}

/**

* 前端列表

*/

@IgnoreAuth

@RequestMapping("/list")

public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){

logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

// 没有指定排序字段就默认id倒序

if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){

params.put("orderBy","id");

}

PageUtils page = exampaperService.queryPage(params);

//字典表数据转换

List<ExampaperView> list =(List<ExampaperView>)page.getList();

for(ExampaperView c:list)

dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段

return R.ok().put("data", page);

}

/**

* 前端详情

*/

@RequestMapping("/detail/{id}")

public R detail(@PathVariable("id") Long id, HttpServletRequest request){

logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);

ExampaperEntity exampaper = exampaperService.selectById(id);

if(exampaper !=null){

//entity转view

ExampaperView view = new ExampaperView();

BeanUtils.copyProperties( exampaper , view );//把实体数据重构到view中

//修改对应字典表字段

dictionaryService.dictionaryConvert(view, request);

return R.ok().put("data", view);

}else {

return R.error(511,"查不到数据");

}

}

5.1.3 题目管理

图5.3 即为编码实现的题目管理界面,管理员在该界面中可以导出题目,可以新增题目,可以对指定的题目信息进行修改,删除,同时可以查看用户对各个题目选项的统计信息,该统计信息是以饼图进行展示。

添加图片注释,不超过 140 字(可选)

图5.3 题目管理界面

核心代码:

/**

* 后端详情

*/

@RequestMapping("/info/{id}")

public R info(@PathVariable("id") Long id, HttpServletRequest request){

logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);

ExamquestionEntity examquestion = examquestionService.selectById(id);

if(examquestion !=null){

//entity转view

ExamquestionView view = new ExamquestionView();

BeanUtils.copyProperties( examquestion , view );//把实体数据重构到view中

//级联表

ExampaperEntity exampaper = exampaperService.selectById(examquestion.getExampaperId());

if(exampaper != null){

BeanUtils.copyProperties( exampaper , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段

view.setExampaperId(exampaper.getId());

}

//修改对应字典表字段

dictionaryService.dictionaryConvert(view, request);

return R.ok().put("data", view);

}else {

return R.error(511,"查不到数据");

}

}

/**

* 后端保存

*/

@RequestMapping("/save")

public R save(@RequestBody ExamquestionEntity examquestion, HttpServletRequest request){

logger.debug("save方法:,,Controller:{},,examquestion:{}",this.getClass().getName(),examquestion.toString());

String role = String.valueOf(request.getSession().getAttribute("role"));

if(StringUtil.isEmpty(role))

return R.error(511,"权限为空");

Wrapper<ExamquestionEntity> queryWrapper = new EntityWrapper<ExamquestionEntity>()

.eq("exampaper_id", examquestion.getExampaperId())

.eq("examquestion_name", examquestion.getExamquestionName())

.eq("examquestion_options", examquestion.getExamquestionOptions())

.eq("examquestion_types", examquestion.getExamquestionTypes())

.eq("examquestion_sequence", examquestion.getExamquestionSequence())

;

logger.info("sql语句:"+queryWrapper.getSqlSegment());

ExamquestionEntity examquestionEntity = examquestionService.selectOne(queryWrapper);

if(examquestionEntity==null){

examquestion.setCreateTime(new Date());

examquestionService.insert(examquestion);

return R.ok();

}else {

return R.error(511,"表中有相同数据");

}

}

5.1.4 用户管理

图5.4 即为编码实现的用户管理界面,管理员在该界面中为用户重置密码,修改用户基本信息,新增用户,删除需要删除的用户信息。

添加图片注释,不超过 140 字(可选)

图5.4 用户管理界面

核心代码:

/**

* 后端修改

*/

@RequestMapping("/update")

public R update(@RequestBody YonghuEntity yonghu, HttpServletRequest request){

logger.debug("update方法:,,Controller:{},,yonghu:{}",this.getClass().getName(),yonghu.toString());

String role = String.valueOf(request.getSession().getAttribute("role"));

if(StringUtil.isEmpty(role))

return R.error(511,"权限为空");

//根据字段查询是否有相同数据

Wrapper<YonghuEntity> queryWrapper = new EntityWrapper<YonghuEntity>()

.notIn("id",yonghu.getId())

.andNew()

.eq("username", yonghu.getUsername())

.or()

.eq("yonghu_id_number", yonghu.getYonghuIdNumber())

.or()

.eq("yonghu_phone", yonghu.getYonghuPhone())

;

logger.info("sql语句:"+queryWrapper.getSqlSegment());

YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);

if("".equals(yonghu.getYonghuPhoto()) || "null".equals(yonghu.getYonghuPhoto())){

yonghu.setYonghuPhoto(null);

}

if(yonghuEntity==null){

// String role = String.valueOf(request.getSession().getAttribute("role"));

// if("".equals(role)){

// yonghu.set

// }

yonghuService.updateById(yonghu);//根据id更新

return R.ok();

}else {

return R.error(511,"账户或者手机号或者身份证号已经被使用");

}

}

5.1.5 新闻资讯管理

图5.5 即为编码实现的新闻资讯管理界面,管理员在该界面中负责发布新闻资讯,更改新闻资讯的部分信息,删除需要删除的新闻资讯信息。

添加图片注释,不超过 140 字(可选)

图5.5 新闻资讯管理界面

核心代码:

/**

* 后端列表

*/

@RequestMapping("/page")

public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){

logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

String role = String.valueOf(request.getSession().getAttribute("role"));

if(StringUtil.isEmpty(role))

return R.error(511,"权限为空");

else if("用户".equals(role))

params.put("yonghuId",request.getSession().getAttribute("userId"));

if(params.get("orderBy")==null || params.get("orderBy")==""){

params.put("orderBy","id");

}

PageUtils page = newsService.queryPage(params);

//字典表数据转换

List<NewsView> list =(List<NewsView>)page.getList();

for(NewsView c:list){

//修改对应字典表字段

dictionaryService.dictionaryConvert(c, request);

}

return R.ok().put("data", page);

}

5.2 用户功能实现

5.2.1 问卷列表

图5.6 即为编码实现的问卷列表界面,用户在该界面中选择问卷并参与问卷调查。

添加图片注释,不超过 140 字(可选)

图5.6 问卷列表界面

核心代码:

/**

* 前端列表

*/

@IgnoreAuth

@RequestMapping("/list")

public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){

logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

// 没有指定排序字段就默认id倒序

if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){

params.put("orderBy","id");

}

PageUtils page = examrecordService.queryPage(params);

//字典表数据转换

List<ExamrecordView> list =(List<ExamrecordView>)page.getList();

for(ExamrecordView c:list)

dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段

return R.ok().put("data", page);

}

/**

* 前端详情

*/

@RequestMapping("/detail/{id}")

public R detail(@PathVariable("id") Long id, HttpServletRequest request){

logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);

ExamrecordEntity examrecord = examrecordService.selectById(id);

if(examrecord !=null){

//entity转view

ExamrecordView view = new ExamrecordView();

BeanUtils.copyProperties( examrecord , view );//把实体数据重构到view中

//级联表

ExampaperEntity exampaper = exampaperService.selectById(examrecord.getExampaperId());

if(exampaper != null){

BeanUtils.copyProperties( exampaper , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段

view.setExampaperId(exampaper.getId());

}

//级联表

YonghuEntity yonghu = yonghuService.selectById(examrecord.getYonghuId());

if(yonghu != null){

BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段

view.setYonghuId(yonghu.getId());

}

//修改对应字典表字段

dictionaryService.dictionaryConvert(view, request);

return R.ok().put("data", view);

}else {

return R.error(511,"查不到数据");

}

}

5.2.2 问卷调查

图5.7 即为编码实现的问卷调查界面,用户在该界面中主要根据问卷调查题目信息进行选项答题,答题结束可以选择界面顶端的结束问卷调查按钮离开问卷调查界面。

添加图片注释,不超过 140 字(可选)

图5.7 问卷调查界面

核心代码:

/**

* 前端详情

*/

@RequestMapping("/detail/{id}")

public R detail(@PathVariable("id") Long id, HttpServletRequest request){

logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);

ExamredetailsEntity examredetails = examredetailsService.selectById(id);

if(examredetails !=null){

//entity转view

ExamredetailsView view = new ExamredetailsView();

BeanUtils.copyProperties( examredetails , view );//把实体数据重构到view中

//级联表

ExamquestionEntity examquestion = examquestionService.selectById(examredetails.getExamquestionId());

if(examquestion != null){

BeanUtils.copyProperties( examquestion , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段

view.setExamquestionId(examquestion.getId());

}

//级联表

YonghuEntity yonghu = yonghuService.selectById(examredetails.getYonghuId());

if(yonghu != null){

BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段

view.setYonghuId(yonghu.getId());

}

//修改对应字典表字段

dictionaryService.dictionaryConvert(view, request);

return R.ok().put("data", view);

}else {

return R.error(511,"查不到数据");

}

}

5.2.3 新闻资讯

图5.8 即为编码实现的新闻资讯界面,用户在该界面中浏览新闻资讯,在界面右上角的搜索框中编辑新闻标题可以获取匹配的新闻资讯信息。

添加图片注释,不超过 140 字(可选)

图5.8 新闻资讯界面

核心代码:

/**

* 前端详情

*/

@RequestMapping("/detail/{id}")

public R detail(@PathVariable("id") Long id, HttpServletRequest request){

logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);

NewsEntity news = newsService.selectById(id);

if(news !=null){

//entity转view

NewsView view = new NewsView();

BeanUtils.copyProperties( news , view );//把实体数据重构到view中

//修改对应字典表字段

dictionaryService.dictionaryConvert(view, request);

return R.ok().put("data", view);

}else {

return R.error(511,"查不到数据");

}

}

5.2.4 问卷调查记录

图5.9 即为编码实现的问卷调查记录界面,用户在该界面中可以对参与问卷调查的记录信息进行查看。

添加图片注释,不超过 140 字(可选)

图5.9 问卷调查记录界面

核心代码:

@RequestMapping("/saveExamredetails")

public R saveExamredetails(@RequestBody ExamredetailsEntity examredetails,Integer examrecordId, HttpServletRequest request){

logger.debug("save方法:,,Controller:{},,examredetails:{}",this.getClass().getName(),examredetails.toString());

String role = String.valueOf(request.getSession().getAttribute("role"));

if(StringUtil.isEmpty(role)){

return R.error(511,"权限为空");

}else if(role.contains("用户id")){

examredetails.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

}

examredetails.setCreateTime(new Date());

boolean insert = examredetailsService.insert(examredetails);

if(!insert){

return R.error();

}

return R.ok();

}

http://www.rkmt.cn/news/1384923.html

相关文章:

  • 2026年第20周最热门的开源项目(Github)
  • Android 高频面试题汇总,26 道经典考题轻松应对面试
  • Airtest Poco实战:5分钟搞定微信小程序自动化测试环境搭建与元素抓取
  • 关联规则挖掘在Calabi-Yau流形Hodge数分析中的应用与复现
  • 优化器偷偷做了什么:一次子查询消除让我从32秒等到24毫秒
  • 别再乱点屏幕了!用Monkey黑白名单精准测试你的Android App(附完整配置文件)
  • 第三卷第4章:原型模式设计思想
  • Godot4 2D游戏开发避坑指南:TileMap绘制、节点顺序与相机设置的三个常见问题
  • 5分钟精通SPT-AKI存档编辑器:离线塔科夫终极修改指南
  • 基于MAX78000的医疗紧急呼叫系统:边缘AI与低功耗设计实战
  • 从零构建:深入理解Linux启动过程
  • 2026年业务分析报告服务TOP5深度测评:报告生成能力与落地效果全对比 - 科技焦点
  • 电信运营商每月处理海量工单,如何不再出错?基于AI Agent的端到端自动化解决方案
  • UE5 Mac环境搭好了,然后呢?给新手的第一个5分钟:创建、操控并理解你的第一个角色
  • Stylized Clouds Pack技术解析:卡通云朵的Shader架构与URP性能优化
  • 用了ChatGPT写论文初稿,如何降低AI率并同步减少文字重复率?
  • PDF4QT:免费开源的PDF全能工具箱,轻松处理各类文档难题
  • 不止是随机播放:用Unity VideoPlayer做个简易的广告机或展厅视频轮播系统
  • 简单学习 --> KV Cache
  • 简单学习 --> GPT架构
  • 从‘Hello World’到数据迁移:KingbaseES类型转换的5个高频实战场景解析
  • 飞书文档一键批量导出:企业知识库迁移效率提升95%的终极解决方案
  • Win11 IIS搭建局域网网站避坑指南:MIME类型、目录浏览这些设置千万别乱动
  • 保姆级避坑指南:在Ubuntu 22.04上搞定ROS2 Humble、PX4与Gazebo的联合仿真(附Empy版本降级)
  • Burp Suite拦截与替换机制深度解析:从协议层到规则链
  • BurpSuite本地HTTPS流量捕获全链路解析
  • 告别无效改稿:okbiye 毕业论文写作功能,如何让高校论文从 0 到 1 合规落地
  • 一文知数据库
  • 亲测有效!AI率92%暴降至5%!实测10款降AI率工具!学生党狂喜!
  • eBPF与GMM在AI系统监控中的创新应用