创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段
添加查询功能
本文将实现通过Name 查询用户信息。
首先更新GetAll
方法以启用查询:
public async Task> GetAll (string searchString)
{
var users = from u in _context.Users
select u;
if (!string .IsNullOrEmpty(searchString))
{
users = users.Where(u => u.Name.Contains(searchString));
}
return await users.ToListAsync();
}
第一行的LINQ查询仅仅 在这里作了定义,并没有在这里实际操作数据库。
LINQ查询在被定义或者通过调用类似于Where
、Contains
、OrderBy
的方法进行修改的时候不会执行。相反的,查询会延迟执行,比如在ToListAsync
方法被调用之后。
Contains
方法会在数据库中运行,而不是上面的C#代码,在数据库中,Contains
会被映射成不区分大小写的SQLLIKE
。
由于u => u.Name.Contains(searchString)
Lambda表达式在当前我所使用的MySQL Connector/NET版本中运行报错(新版本好像已经修复了该问题,这里懒得更新了),所以这里先改成:
users = users.Where (u => u.Name == searchString)
导航到http://localhost:5000/User
,添加?searchString=Zhu
查询字符串,将过滤出指定的用户信息(http://localhost:5000/User?searchString=Zhu
)。
如果你修改Index
方法的签名使得方法包含一个名为id
的参数,那么id
参数将会匹配Startup.cs 文件中设置的默认路由的可选项{id?}
。
app.UseMvc (routes =>
{
routes.MapRoute (
name: "default" ,
template: "{controller=Home}/{action=Index}/{id?}" )
})
Rename 后的方法:
public async Task Index (string id)
{
var users = from u in _context.Users
select u;
if (!String.IsNullOrEmpty(id))
{
users = users.Where(u => u.Name == id);
}
return View(await users.ToListAsync());
}
现在你可以传递这个Name查询条件作为路由数据(URL Segment)来代替查询字符串(http://localhost:5000/User/Index/Zhu
)。
然而,我们不能指望用户每次都通过修改URL来进行查询,我们通过添加UI来进行查询。如果你想改变Index
方法的签名来测试怎样传递路由绑定ID
参数,将searchString
参数改回来。
接着,打开Views/User/Index.cshtml 文件,添加
标记:
<form asp-controller ="User" asp-action ="Index" >
<p >
姓名: <input type ="text" name ="SearchString" >
<input type ="submit" value ="过滤" />
p >
form >
这里HTML
标签使用了Form Tag Helper ,所以当你提交这个表单时,过滤字符串会被传递到User控制器的Index
方法中。
这里没有使用你所希望的[HttpPost] Index
重载方法,其实根本不需要该方法,因为这个方法并没有改变这个应用的状态,仅仅用来过滤数据。
你可以添加下面的[HttpPost] Index
方法。
[HttpPost]
public string Index (string searchString, bool notUsed)
{
return "From [HttpPost]Index: filter on " + searchString;
}
notUsed
参数用于创建一个重载的Index
方法。如果你添加了该方法,动作方法将会调用匹配的[HttpPost] Index
方法。
这个时候点击过滤按钮时,会显示如下界面:
然而,尽管你添加了[HttpPost]
版本的Index
方法,最终仍然存在局限性。想象你将一个指定的查询作为书签或者将查询结果作为一个链接发送给你的朋友以便他们在打开时能看到同样的过滤结果时,注意HTTP POST请求的URL和GET请求的URL(http://localhost:5000/User
)是一样的-在URL里面没有任何查询信息。查询信息是作为表单数据发送到服务器的。
在请求体中可以看到查询参数和XSRF反伪造标记(通过Form Tag Helper生成),由于查询没有修改数据,所以无需在控制器方法中验证该标记。
为了把查询参数从请求体中移到URL中,必须把请求指定为HTTP GET
。
<form asp-controller ="Movies" asp-action ="Index" method ="get" >
此时当你再提交时,URL将会包含具体的查询条件。查询将会跳转到HttpGet Index
方法,即使存在着HttpPost Index
方法。
添加新的字段
我们将通过Entity Framework Code First Migrations工具来添加一个新的字段到模型中,并将新的改变同步到数据库中。
当你使用EF Code First自动创建一个数据库时,Code First会添加一个表到数据库中帮助跟踪数据库的数据结构是否和模型类保持同步。如果不同步,EF会抛出一个异常。
添加身高属性到模型类
public class User
{
public int ID { get ; set ; }
[Display(Name = "姓名" )]
public string Name { get ; set ; }
[Display(Name = "邮箱" )]
[DataType(DataType.EmailAddress)]
public string Email { get ; set ; }
[Display(Name = "简介" )]
public string Bio { get ; set ; }
[Display(Name = "身高" )]
public decimal Height { get ; set ; }
[Display(Name = "职称" )]
public string Title { get ; set ; }
[Display(Name = "部门" )]
public string Dept { get ; set ; }
}
Build该应用(dotnet build
)。可能由于我所使用的MySQL EF Core provider还不成熟,添加DateTime
类型的字段时会报错(新版本可能会修复该问题,这里懒得去测试了)。
由于你添加了一个新的字段到User
类,所以你需要更新所绑定的白名单,这样新的属性将会包含这内。为Create
和Edit
方法更新[Bind]
特性以包含Height
属性。
[Bind("ID,Name,Email,Bio,Height,Title,Dept" )]
为了显示新的字段还要更新视图模板。
打开Index.cshtml 、Create.cshtml 、Edit.cshtml 等文件,添加新的Height
字段。
然后需要更新数据库以包含新的字段。如果没有更新,此时运行将报错,因为更新后User模型类和已存在的数据库User表的结构不一致。
有以下几种方案来解决该错误:
EF可以基于新的模型类自动删除并重建数据库。开发阶段在测试数据库上做开发还是比较方便的,但是你会丢失数据库中的现有数据。因此该方案不适用于生产环境数据库!
显式修改现有数据库的结构,使得它与模型类相匹配,这个方案可以让你保留数据库的现有数据。你可以通过手动或者数据库脚本来进行变更。
使用Code First Migrations来更新数据库结构。
这里采用第三种方案,运行如下命令:
dotnet ef migrations add Height
dotnet ef database update
migrations add
命令告诉Migration框架去检查当前的User
模型类和当前的User
数据库表结构是否一致。如果不一致,就创建必要的代码来迁移数据库到新的模型类。
基于新添加的“部门”字段进行查询
在Models 目录下添加UserDeptViewModel
类:
using Microsoft.AspNetCore.Mvc.Rendering;
public class UserDeptViewModel
{
public List users;
public SelectList depts;
public string userDept { get ; set ; }
}
这个视图模型(View Model)将包含:
用户列表users
。
包含部门列表(depts)的SelectList
,将用于视图页面中允许用户去从列表中选择一个部门。
userDept
,包含用户所选中的部门(dept)。
修改Index
方法:
public async Task Index (string userDept, string searchString)
{
IQueryable<string > deptQuery = from u in _context.Users
orderby u.Dept
select u.Dept;
var users = from u in _context.Users
select u;
if (!String.IsNullOrEmpty(searchString))
{
users = users.Where(u => u.Name == searchString);
}
if (!String.IsNullOrEmpty(userDept))
{
users = users.Where(u => u.Dept == userDept);
}
var userDeptVM = new UserDeptViewModel();
userDeptVM.depts = new SelectList(await deptQuery.Distinct().ToListAsync());
userDeptVM.users = await users.ToListAsync();
return View(userDeptVM);
}
下面的代码通过LINQ查询从数据库获取所有的部门数据。
IQueryable<string > deptQuery = from u in _context.Users
orderby u.Dept
select u.Dept;
depts的SelectList
是通过投影不重复的部门(Distinct
)创建的。
userDeptVM.depts = new SelectList(await deptQuery.Distinct ().ToListAsync ())
在Index视图中添加“部门”查询字段
首先删除最顶部的@model:
@model IEnumerable
@model UserDeptViewModel
在
标记中添加:
<select asp-for ="userDept" asp-items ="Model.depts" >
<option value ="" > 所有option >
select >
在标记中分别删除:
@Html.DisplayNameFor(model => model.Dept)
@foreach (var item in Model) {
替换成:
@Html.DisplayNameFor(model => model.users[0].Dept)
@foreach (var item in Model.users) {
最终的Index.cshtml 文件如下:
@model UserDeptViewModel
@{
ViewData["Title"] = "Index - User List";
}
<h2 > 首页 - 用户列表h2 >
<p >
<a asp-action ="Create" > 新建a >
p >
<form asp-controller ="User" asp-action ="Index" method ="GET" >
<p >
<select asp-for ="userDept" asp-items ="Model.depts" >
<option value ="" > 所有option >
select >
姓名: <input type ="text" name ="SearchString" >
<input type ="submit" value ="过滤" />
p >
form >
<table class ="table" >
<thead >
<tr >
<th >
@Html.DisplayNameFor(model => model.users[0].Name)
th >
<th >
@Html.DisplayNameFor(model => model.users[0].Email)
th >
<th >
@Html.DisplayNameFor(model => model.users[0].Height)
th >
<th >
@Html.DisplayNameFor(model => model.users[0].Title)
th >
<th >
@Html.DisplayNameFor(model => model.users[0].Dept)
th >
<th >
@Html.DisplayNameFor(model => model.users[0].Bio)
th >
<th > th >
tr >
thead >
<tbody >
@foreach (var item in Model.users) {
<tr >
<td >
@Html.DisplayFor(modelItem => item.Name)
td >
<td >
@Html.DisplayFor(modelItem => item.Email)
td >
<td >
@Html.DisplayFor(modelItem => item.Height)
td >
<td >
@Html.DisplayFor(modelItem => item.Title)
td >
<td >
@Html.DisplayFor(modelItem => item.Dept)
td >
<td >
@Html.DisplayFor(modelItem => item.Bio)
td >
<td >
<a asp-action ="Edit" asp-route-id ="@item.ID" > 编辑a > |
<a asp-action ="Details" asp-route-id ="@item.ID" > 详情a > |
<a asp-action ="Delete" asp-route-id ="@item.ID" > 删除a >
td >
tr >
}
tbody >
table >
最终运行的页面:
个人博客
我的个人博客
你可能感兴趣的:(创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段)
使用 Dify 创建自然语言生成 Word 文档的应用(详细指南)
engchina
LINUX python 人工智能 Agent Dify
使用Dify创建自然语言生成Word文档的应用(详细指南)一、开发核心API1.1API功能规划1.2环境准备安装依赖库项目目录结构1.3核心代码解析(`app.py`)1.3.1初始化配置1.3.2关键功能模块1.4API接口说明1.4.1转换接口`/convert`1.4.2下载接口`/download/`1.5启动服务1.6测试二、创建Dify工具2.1工作流设计步骤步骤1:创建新工作流步骤
spring boot程序启动时读取&覆盖配置文件中的变量
fusugongzi
spring boot java 前端
1.自定义ApplicationContextInitializer,spring启动时会执行自定义的initialize方法newSpringApplicationBuilder(DsgCoreApplication.class).initializers(newMyPropertyInitializer()).run(args);@Slf4jpublicclassMyPropertyIniti
【matlab代码】基于RSSI的wifi定位例程(三维空间,自适应基站的数量)
MATLAB卡尔曼
定位与导航 1024程序员节 matlab 开发语言 定位 导航 蓝牙
文章目录程序概述程序运行运行方法运行结果代码各模块的功能源代码总结程序概述该程序基于RSSI(接收信号强度指示)原理实现Wi-Fi定位,适用于在三维空间中定位未知点。程序通过多个锚点(基站)测量信号强度,并计算目标点的位置。程序使用以下公式进行位置计算:路径损耗模型公式:RSSI=A−10nlog10(d)RSSI=A-10n\log_{10}(d)RSSI=A−10nlog10(d)其中:RS
开博尔支持超高清8K显示HDMI2.1线材评测体验
只你不知
测评文 HDMI2.1 HDMI2.1高清线 8K电视线 4K高清线
前言(网络整理):虽然目前没有真正的HDMI2.1的电视机,但是HDMI协会针对HDMI2.1标准做出了临时参数标准和HDMI2.1连接器认证授权,经开博尔技术咨询后得知,开博尔对于HDMI协会当前对HDMI2.1的研产要求均满足,采用定制HDMI2.1认证连接器。HDMI2.0能够实现60FPS的4K图像或30FPS的8K图像。而新的HDMI2.1则可以显示120FPS的4K图像或60FPS的8
如何使用 Spring Boot 实现分页和排序
大G哥
spring boot 后端 java spring
在SpringBoot中实现分页和排序通常是通过SpringDataJPA或者SpringDataMongoDB提供的分页功能来完成的。以下是一个基于SpringDataJPA的分页和排序实现的基本步骤。1.添加依赖首先,确保你在pom.xml中包含了SpringDataJPA和数据库驱动的依赖。org.springframework.bootspring-boot-starter-data-jp
Elasticsearch大文件检索性能提升20倍实践(干货)_elasticsearch 查询优化
2401_84247505
2024年程序员学习 elasticsearch jenkins 大数据
3、问题排查与定位步骤1:限定返回记录条数。不提供直接访问末页的入口。baidu,360,搜狗等搜索引擎都不提供访问末页的请求方式。都是基于如下的请求方式:通过点击上一下、下一页逐页访问。这个从用户的角度也很好理解,搜索引擎返回的前面都是相关度最高的,也是用户最关心的信息。Elasticsearch的默认支持的数据条数是10000条,可以通过post请求修改。最终,本步骤将支持ES最大返回值100
URL拼接重复参数问题
Cloud_.
服务器 运维 后端 java springboot
在调用第三方API时,手动拼接URL参数容易因编码或重复拼接引发隐藏Bug。例如:Stringname="name=520";//参数值本身包含等号Stringurl=SERVICE_URL+"/add?key="+key+"&sid="+sid+"&name="+name;//错误拼接导致name=name=520最终生成的URL会变成:http://api.com/add?key=123&si
Spring Boot整合RabbitMQ极简教程
Cloud_.
java-rabbitmq spring boot rabbitmq
一、消息队列能解决什么问题?异步处理:解耦耗时操作(如发短信、日志记录)流量削峰:应对突发请求,避免系统过载应用解耦:服务间通过消息通信,降低依赖二、快速整合RabbitMQ1.环境准备安装RabbitMQ(推荐Docker一键部署):dockerrun-d--namerabbitmq-p5672:5672-p15672:15672rabbitmq:management访问管理界面:http://
Manus 一码难求,MetaGPT、OpenManus、Camel AI 会是替代方案吗?
全干程序员demo
技术热文 人工智能
Manus一码难求,MetaGPT、OpenManus、CamelAI会是替代方案吗?一、Manus的现象与问题Manus作为一款号称“全球首个通用AI智能体”的产品,凭借其强大的功能和新颖的营销策略迅速走红。然而,其封闭的邀请码机制和高昂的使用门槛,让普通开发者望而却步。Manus的邀请码被炒至高价,甚至出现账号冻结等现象,这引发了用户对其技术壁垒和实际应用价值的质疑。二、MetaGPT、Ope
css模拟雷达扫描动画
像牛奶却不是牛奶
css 前端
样式:.radar-scan{background-image:linear-gradient(0deg,transparent24%,rgba(32,255,77,0.15)25%,rgba(32,255,77,0.15)26%,transparent27%,transparent74%,rgba(32,255,77,0.15)75%,rgba(32,255,77,0.15)76%,transp
信息学奥赛一本通C++语言-----1119:矩阵交换行
宝祺祺吖
c++ 算法
【题目描述】给定一个5×55×5的矩阵(数学上,一个r×cr×c的矩阵是一个由rr行cc列元素排列成的矩形阵列),将第nn行和第mm行交换,输出交换后的结果。【输入】输入共66行,前55行为矩阵的每一行元素,元素与元素之间以一个空格分开。第66行包含两个整数m、nm、n,以一个空格分开(1≤m,n≤5)(1≤m,n≤5)。【输出】输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。
程序员必看!DeepSeek全栈开发指南:从代码生成到分布式训练的黑科技解析
AI创享派
后端
一、DeepSeek技术新突破:程序员必须掌握的MoE架构实战2025年2月25日,DeepSeek开源了专为MoE模型设计的DeepEP通信库,这项技术革新直接影响了分布式训练和推理效率。该库支持FP8精度与NVLink/RDMA技术,吞吐量提升3倍以上,特别适合处理千亿级参数的分布式任务。对于后端工程师而言,DeepEP的以下特性值得关注:计算-通信重叠机制:通过回调函数实现GPU资源动态分配
MATLAB算法实战应用案例精讲-【深度学习】归一化
林聪木
matlab 算法 深度学习
目录为什么要做特征归一化/标准化?常用featurescaling方法计算方式上对比分析featurescaling需要还是不需要什么时候需要featurescaling?什么时候不需要FeatureScaling?归一化基础知识点1.什么是归一化2.为什么要归一化3.为什么归一化能提高求解最优解的速度4.归一化有哪些类型5.不同归一化的使用条件6.归一化和标准化的联系与区别层归一化综述提出背景概
AtCoder Beginner Contest 275 A-D题解
Gowilli
AtCoder c++ 算法 数据结构
比赛名称:AtCoderBeginnerContest275A-FindTakahashi找出最大的元素并输出下标使用两个变量一个存储当前找到的最大值一个存储找到的最大值对应的下标,若当前数大于最大值更新最大值和下标AC代码//Problem:A-FindTakahashi//Contest:AtCoder-AtCoderBeginnerContest275//URL:https://atcode
【大模型UI\多模型回复UI】
Ai君臣
LLMS 微调 ui 大LLMS UI
文章目录1、开源大模型用户界面(UI)2、同时让多个模型回复UI1、开源大模型用户界面(UI)LobeChatOpenWebUI:这是一款功能丰富且用户友好的开源自托管AI界面,旨在完全离线运行。它支持多种大型语言模型(LLM),包括Ollama和兼容OpenAI的API。OpenWebUI提供直观的界面,支持多模型和多模态交互,具有全面的Markdown和LaTeX支持,以及本地RAG集成等功能
记一次联想ThinkBook 16P G5 IRX ,麦克风无声音问题的解决
花花鱼
Windows windows 音频
1、微信语音麦克风无声音在电脑上微信电话,麦克风的功能没有,或者说你要录个屏给客户,发现讲不了话,也是比较的麻烦。2、联系客服建议升级声卡驱动,然后更新了以后,一个样没什么区别。各种设置,发现还是不行。3、声音设置当然,图片上的是静音麦克风了,按一下键就可以去掉。4、专家给了工具解决旧版驱动残留文件清除工具.zip链接:https://pan.baidu.com/s/1eVjT_QjYk_vz10
使用 certbot 在centos7 搭建ssl证书自动并且续约
TwoSs110
ssl https
第一步,确定服务器适合安装的certbot版本sudoyuminstallpython27如果上述方法不起作用,你可以尝试编译安装。首先,你需要安装编译Python所需的依赖包。sudoyuminstallgccmakeopenssl-develsqlite-develreadline-develzlib-develbzip2-devel接下来,下载Python2.7.5的源代码,并进行编译安装。
【Gee】项目总结:模仿 GIN 实现简单的 Golang Web 框架
YGGP
Golang Project golang
文章目录Gee项目回顾Gee项目总结Golang已经具备基础的web功能,为什么还需要web框架?作为web框架,Gee框架完成了哪些功能?如何用Gee来构建web项目?Gee项目回顾上个月月末我按照Geektutu的教程,实现了Gee这个基于Golang的简单Web框架,但是一直没有进行复盘总结。学习Gee的八篇文章的链接如下:【Gee】7天用Go从零实现Web框架Gee【Gee】Day1:HT
操作符详解
知困勉行的Allen
c语言 学习方法 c++
今天给小伙伴们分享一些关于操作符的知识~文章将会介绍各种操作符以及它们的使用示例。OK,那就让咱们进入正题吧@目录一.操作符分类二.各类操作符介绍1.算数操作符2.移位操作符3.位操作符4.1赋值操作符4.2复合赋值符5.单目操作符6.关系操作符7.逻辑操作符8.条件操作符9.逗号表达式10.下标引用、函数调用和结构成员三.结语一.操作符分类操作符的种类还挺多嘞~可分为:算术操作符移位操作符位操作
Groovy语言的漏洞扫描
花韵婷
包罗万象 golang 开发语言 后端
Groovy语言漏洞扫描:深入分析与实践引言Groovy是一种基于Java虚拟机(JVM)的动态编程语言,它结合了Python、Ruby和Smalltalk等语言的特性,提供了简洁的语法和强大的功能。Groovy广泛应用于脚本编写、自动化测试、构建工具(如Gradle)以及Web开发等领域。然而,随着Groovy的广泛应用,其安全性问题也逐渐显现出来。本文将深入探讨Groovy语言中的常见漏洞类型
描述K8S创建pod的全过程
小马不敲代码
云原生 kubernetes 容器 云原生
1、用户提交请求用户通过kubectl命令行工具或API客户端提交创建Pod的请求。请求中包含了Pod的配置信息,例如容器镜像、资源需求、环境变量等。2、APIServer接收请求APIServer是Kubernetes集群的入口,负责接收和处理所有API请求。APIServer会验证请求的合法性,例如用户权限、资源配额等。验证通过后,APIServer会将Pod的配置信息存储到etcd中。3、S
大模型的webui
Zain Lau
人工智能 python 昇腾 Ascend 天数
exportXXX_LLM_C=~/xcore-llm/build/ReleaseexportCUDA_VISIBLE_DEVICES=2,3exportCUDACXX=/usr/local/cuda-12.3/bin/nvccnohup/usr/bin/python3/home/src/api_server/api_server.py--modelLLama2:7b-chat-hf_A800--
自动同步多服务器下SQL脚本3.0
a栋栋栋
遇到的问题 sql 自动化 事务失效
由于上一版发现数据库【MySQL】不支持DML事务回滚,该迭代主要是去兼容这种问题。数据表新增一个completed字段,用来表示当前版本下同步成功的个数。数据表CREATETABLE`auto_sql_version`(`id`intNOTNULLAUTO_INCREMENT,`version`varchar(20)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_a
云计算、边缘计算与雾计算
白小白呀
笔记 大数据
云计算(数据上传到云端进行处理)云计算(CloudComputing)是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。通俗的讲,云是网络、互联网的一种比喻说法,即互联网与建立互联网所需要的底层基础设施的抽象体。“计算”指的是一台足够强大的计算机提供的计算服务(包括各种功能,资源,存储)。“云计算”可以理解为:通过互联网可以使用足够强大的计算机为用户提
Tornado 初识
Wu_Candy
Web服务器
一、什么是tornadoTornado是使用Python编写的一个强大的、可扩展的Web服务器。它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。二、tornado有什么优势Tornado和现在的主流baiduWeb服务器框架(包括大多数Python的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快,得利于其非阻塞的方式和对epol
openssl TLS 单向认证
spring*-*
网络 服务器 运维
下面是一个简单的C语言程序示例,它展示了如何使用OpenSSL来实现基于TLS的加密TCP通信。这个程序包括一个服务器和一个客户端,它们通过TLS加密的TCP连接进行通信。步骤概览初始化OpenSSL库。创建SSL上下文(SSL_CTX)。在服务器端,加载服务器证书和私钥;在客户端,加载CA证书。使用SSL套接字进行加密通信。服务器端代码c复制代码#include#include#include#
server和client通信双方双向认证,基于openssl,使用TLS加密TCP流量
spring*-*
tcp/ip 服务器 网络协议
设计一个基于OpenSSL的C语言程序来实现双向认证的TLS加密TCP通信,需要包含服务器和客户端两部分。以下是该程序的核心步骤及示例代码。生成证书和私钥首先,需要为服务器和客户端生成证书和私钥。可以使用OpenSSL命令行工具生成这些文件。bash复制代码生成CA私钥和自签名证书opensslgenrsa-outca.key2048opensslreq-x509-new-nodes-keyca.
大模型+智能代理:自动化测试的终极组合?
测试者家园
软件测试 质量效能 人工智能 人工智能 软件测试 质量效能 职场和发展 AI赋能 智能体 LLM
用ChatGPT做软件测试在软件测试领域,自动化测试的目标一直是提高测试效率、减少人工干预、提升缺陷发现率。然而,传统自动化测试仍然面临诸多挑战,例如脚本维护成本高、难以应对动态UI变化、测试数据生成受限,以及难以覆盖复杂业务逻辑。近年来,大模型(LLM,LargeLanguageModel)+智能代理(Agent)的结合,为自动化测试带来了新的可能性。这种“智能测试代理”能够利用大模型的自然语言
【PCDN】2020架构: 提高穿透和分享、BGP协议
等风来不如迎风去
传输探索实践 架构 服务器 运维
小溪流科技自研海外PCDN系统技术架构与演进转载自腾讯云文/张道远整理/核心组网我们自己的P2P组网模型。我们采用了树形组网,但是我们规避优化了传统树形模型的缺点。为防止延时过高,我们在调度时会严格控制树形高度。为弥补父节点掉线造成孤儿状态的不足,我们使系统中每个节点都首先从CDN拉流。如果出现父节点掉线的情况,它立即向服务器补片,同时触发新的组网。对于纯粹的消费者模型,我们目前有两种方案,其中一
Redis 常用数据类型
27xixi
java技术栈 redis 数据库 缓存
Redis常用数据类型的详细介绍及其典型应用场景:String(字符串)描述:最基本的数据类型,可存储文本、数字或二进制数据(最大512MB)。常用命令:SETkeyvalue:设置值GETkey:获取值INCRkey:将值自增1(原子性操作)EXPIREkeyseconds:设置过期时间应用场景:缓存简单键值对(如用户会话、配置项)。计数器(如文章阅读量、库存扣减)。分布式锁(结合SETNX命令
[黑洞与暗粒子]没有光的世界
comsci
无论是相对论还是其它现代物理学,都显然有个缺陷,那就是必须有光才能够计算
但是,我相信,在我们的世界和宇宙平面中,肯定存在没有光的世界....
那么,在没有光的世界,光子和其它粒子的规律无法被应用和考察,那么以光速为核心的
&nbs
jQuery Lazy Load 图片延迟加载
aijuans
jquery
基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载。
对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度。
版本:
jQuery v1.4.4+
jQuery Lazy Load v1.7.2
注意事项:
需要真正实现图片延迟加载,必须将真实图片地址写在 data-original 属性中。若 src
使用Jodd的优点
Kai_Ge
jodd
1. 简化和统一 controller ,抛弃 extends SimpleFormController ,统一使用 implements Controller 的方式。
2. 简化 JSP 页面的 bind, 不需要一个字段一个字段的绑定。
3. 对 bean 没有任何要求,可以使用任意的 bean 做为 formBean。
使用方法简介
jpa Query转hibernate Query
120153216
Hibernate
public List<Map> getMapList(String hql,
Map map) {
org.hibernate.Query jpaQuery = entityManager.createQuery(hql);
if (null != map) {
for (String parameter : map.keySet()) {
jp
Django_Python3添加MySQL/MariaDB支持
2002wmj
mariaDB
现状
首先,
[email protected] 中默认的引擎为 django.db.backends.mysql 。但是在Python3中如果这样写的话,会发现 django.db.backends.mysql 依赖 MySQLdb[5] ,而 MySQLdb 又不兼容 Python3 于是要找一种新的方式来继续使用MySQL。 MySQL官方的方案
首先据MySQL文档[3]说,自从MySQL
在SQLSERVER中查找消耗IO最多的SQL
357029540
SQL Server
返回做IO数目最多的50条语句以及它们的执行计划。
select top 50
(total_logical_reads/execution_count) as avg_logical_reads,
(total_logical_writes/execution_count) as avg_logical_writes,
(tot
spring UnChecked 异常 官方定义!
7454103
spring
如果你接触过spring的 事物管理!那么你必须明白 spring的 非捕获异常! 即 unchecked 异常! 因为 spring 默认这类异常事物自动回滚!!
public static boolean isCheckedException(Throwable ex)
{
return !(ex instanceof RuntimeExcep
mongoDB 入门指南、示例
adminjun
java mongodb 操作
一、准备工作
1、 下载mongoDB
下载地址:http://www.mongodb.org/downloads
选择合适你的版本
相关文档:http://www.mongodb.org/display/DOCS/Tutorial
2、 安装mongoDB
A、 不解压模式:
将下载下来的mongoDB-xxx.zip打开,找到bin目录,运行mongod.exe就可以启动服务,默
CUDA 5 Release Candidate Now Available
aijuans
CUDA
The CUDA 5 Release Candidate is now available at http://developer.nvidia.com/<wbr></wbr>cuda/cuda-pre-production. Now applicable to a broader set of algorithms, CUDA 5 has advanced fe
Essential Studio for WinRT网格控件测评
Axiba
JavaScript html5
Essential Studio for WinRT界面控件包含了商业平板应用程序开发中所需的所有控件,如市场上运行速度最快的grid 和chart、地图、RDL报表查看器、丰富的文本查看器及图表等等。同时,该控件还包含了一组独特的库,用于从WinRT应用程序中生成Excel、Word以及PDF格式的文件。此文将对其另外一个强大的控件——网格控件进行专门的测评详述。
网格控件功能
1、
java 获取windows系统安装的证书或证书链
bewithme
windows
有时需要获取windows系统安装的证书或证书链,比如说你要通过证书来创建java的密钥库 。
有关证书链的解释可以查看此处 。
public static void main(String[] args) {
SunMSCAPI providerMSCAPI = new SunMSCAPI();
S
NoSQL数据库之Redis数据库管理(set类型和zset类型)
bijian1013
redis 数据库 NoSQL
4.sets类型
Set是集合,它是string类型的无序集合。set是通过hash table实现的,添加、删除和查找的复杂度都是O(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能。
sadd:向名称为key的set中添加元
异常捕获何时用Exception,何时用Throwable
bingyingao
用Exception的情况
try {
//可能发生空指针、数组溢出等异常
} catch (Exception e) {
 
【Kafka四】Kakfa伪分布式安装
bit1129
kafka
在http://bit1129.iteye.com/blog/2174791一文中,实现了单Kafka服务器的安装,在Kafka中,每个Kafka服务器称为一个broker。本文简单介绍下,在单机环境下Kafka的伪分布式安装和测试验证 1. 安装步骤
Kafka伪分布式安装的思路跟Zookeeper的伪分布式安装思路完全一样,不过比Zookeeper稍微简单些(不
Project Euler
bookjovi
haskell
Project Euler是个数学问题求解网站,网站设计的很有意思,有很多problem,在未提交正确答案前不能查看problem的overview,也不能查看关于problem的discussion thread,只能看到现在problem已经被多少人解决了,人数越多往往代表问题越容易。
看看problem 1吧:
Add all the natural num
Java-Collections Framework学习与总结-ArrayDeque
BrokenDreams
Collections
表、栈和队列是三种基本的数据结构,前面总结的ArrayList和LinkedList可以作为任意一种数据结构来使用,当然由于实现方式的不同,操作的效率也会不同。
这篇要看一下java.util.ArrayDeque。从命名上看
读《研磨设计模式》-代码笔记-装饰模式-Decorator
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.Fi
Maven学习(一)
chenyu19891124
Maven私服
学习一门技术和工具总得花费一段时间,5月底6月初自己学习了一些工具,maven+Hudson+nexus的搭建,对于maven以前只是听说,顺便再自己的电脑上搭建了一个maven环境,但是完全不了解maven这一强大的构建工具,还有ant也是一个构建工具,但ant就没有maven那么的简单方便,其实简单点说maven是一个运用命令行就能完成构建,测试,打包,发布一系列功
[原创]JWFD工作流引擎设计----节点匹配搜索算法(用于初步解决条件异步汇聚问题) 补充
comsci
算法 工作 PHP 搜索引擎 嵌入式
本文主要介绍在JWFD工作流引擎设计中遇到的一个实际问题的解决方案,请参考我的博文"带条件选择的并行汇聚路由问题"中图例A2描述的情况(http://comsci.iteye.com/blog/339756),我现在把我对图例A2的一个解决方案公布出来,请大家多指点
节点匹配搜索算法(用于解决标准对称流程图条件汇聚点运行控制参数的算法)
需要解决的问题:已知分支
Linux中用shell获取昨天、明天或多天前的日期
daizj
linux shell 上几年 昨天 获取上几个月
在Linux中可以通过date命令获取昨天、明天、上个月、下个月、上一年和下一年
# 获取昨天
date -d 'yesterday' # 或 date -d 'last day'
# 获取明天
date -d 'tomorrow' # 或 date -d 'next day'
# 获取上个月
date -d 'last month'
#
我所理解的云计算
dongwei_6688
云计算
在刚开始接触到一个概念时,人们往往都会去探寻这个概念的含义,以达到对其有一个感性的认知,在Wikipedia上关于“云计算”是这么定义的,它说:
Cloud computing is a phrase used to describe a variety of computing co
YII CMenu配置
dcj3sjt126com
yii
Adding id and class names to CMenu
We use the id and htmlOptions to accomplish this. Watch.
//in your view
$this->widget('zii.widgets.CMenu', array(
'id'=>'myMenu',
'items'=>$this-&g
设计模式之静态代理与动态代理
come_for_dream
设计模式
静态代理与动态代理
代理模式是java开发中用到的相对比较多的设计模式,其中的思想就是主业务和相关业务分离。所谓的代理设计就是指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理。比如我们在进行删除操作的时候需要检验一下用户是否登陆,我们可以删除看成主业务,而把检验用户是否登陆看成其相关业务
【转】理解Javascript 系列
gcc2ge
JavaScript
理解Javascript_13_执行模型详解
摘要: 在《理解Javascript_12_执行模型浅析》一文中,我们初步的了解了执行上下文与作用域的概念,那么这一篇将深入分析执行上下文的构建过程,了解执行上下文、函数对象、作用域三者之间的关系。函数执行环境简单的代码:当调用say方法时,第一步是创建其执行环境,在创建执行环境的过程中,会按照定义的先后顺序完成一系列操作:1.首先会创建一个
Subsets II
hcx2013
set
Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note:
Elements in a subset must be in non-descending order.
The solution set must not conta
Spring4.1新特性——Spring缓存框架增强
jinnianshilongnian
spring4
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
shell嵌套expect执行命令
liyonghui160com
一直都想把expect的操作写到bash脚本里,这样就不用我再写两个脚本来执行了,搞了一下午终于有点小成就,给大家看看吧.
系统:centos 5.x
1.先安装expect
yum -y install expect
2.脚本内容:
cat auto_svn.sh
#!/bin/bash
Linux实用命令整理
pda158
linux
0. 基本命令 linux 基本命令整理
1. 压缩 解压 tar -zcvf a.tar.gz a #把a压缩成a.tar.gz tar -zxvf a.tar.gz #把a.tar.gz解压成a
2. vim小结 2.1 vim替换 :m,ns/word_1/word_2/gc  
独立开发人员通向成功的29个小贴士
shoothao
独立开发
概述:本文收集了关于独立开发人员通向成功需要注意的一些东西,对于具体的每个贴士的注解有兴趣的朋友可以查看下面标注的原文地址。
明白你从事独立开发的原因和目的。
保持坚持制定计划的好习惯。
万事开头难,第一份订单是关键。
培养多元化业务技能。
提供卓越的服务和品质。
谨小慎微。
营销是必备技能。
学会组织,有条理的工作才是最有效率的。
“独立
JAVA中堆栈和内存分配原理
uule
java
1、栈、堆
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)3. 堆:存放所有new出来的对象。4. 静态域:存放静态成员(static定义的)5. 常量池:存放字符串常量和基本类型常量(public static f