上一篇文章实现Student 基本的实体CRUD操作。本文将展示如何Students Index页添加排序、筛选和分页功能。
以下是排序完成时、经过筛选和分页功能截图,您可以在列标题点击排序。
1.为 Students Index页面加入列排序链接
要为Students Index页面加入排序功能,你须要改动Student controller的Index方法,并为Student Index视图加入代码。
向Index方法加入排序功能
打开Controllers\StudentController.cs,使用以下的代码替换Index 方法
public ActionResult Index(string sortOrder)
{
ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
ViewBag.DateSortParm = sortOrder == "Date" ?
"date_desc" : "Date"; var students = from s in db.Students select s; switch (sortOrder) { case "name_desc": students = students.OrderByDescending(s => s.LastName); break; case "Date": students = students.OrderBy(s => s.EnrollmentDate); break; case "date_desc": students = students.OrderByDescending(s => s.EnrollmentDate); break; default: students = students.OrderBy(s => s.LastName); break; } return View(students.ToList()); }
上面的代码接收URL中的查询字符串作为sortOrder參数。该參数是"Name"或"Date"。使用三元运算符推断并加下划线和"desc"来指名这是一个降序排序,默认是按升序排序。
第一次訪问Index页面时是没有查询字符串的,students依照LastName作升序排序显示。这是由switch语句中的default指定的。当用户点击某列的标题链接时,URL的查询字符串中就含有了对应的sortOrder值。
这里使用了两个ViewBag变量以便视图能够将合适的查询字符串提供给列标题链接。
ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ?
"name_desc" : ""; ViewBag.DateSortParm = sortOrder == "Date" ?
"date_desc" : "Date";
这里使用了三元运算符,上面第一个指明假如sortOrder參数为null或为空。则ViewBag.NameSortParm被赋值为"name_desc"。否则将其赋值为空。其排序规则为:
Current sort order
Last Name Hyperlink
Date Hyperlink
Last Name ascending
descending
ascending
Last Name descending
ascending
ascending
Date ascending
ascending
descending
Date descending
ascending
ascending
该方法使用LINQ to Entities来指明要排序的列,上面的代码在switch语句前新建了一个 IQueryable变量,然后在switch中改动它,最后在switch语句后调用ToList方法。当你创建并改动IQueryable变量时,并没有向数据库发送查询命令,直到调用ToList方法将IQueryable 对象转换为一个集合时才真正的运行查询命令。因此,直到return View语句,才会运行查询语句。
作为还有一种为每个排序编写不同的LINQ语句的替代方法。能够使用动态创建LINQ句。
为Student Index视图加入列标题链接
打开Views\Student\Index.cshtml,加入以下的代码
@Html.ActionLink("Create New", "Create")
@Html.ActionLink("Last Name", "Index", new { sortOrder = ViewBag.NameSortParm })
First Name
@Html.ActionLink("Enrollment Date", "Index", new { sortOrder = ViewBag.DateSortParm })
@foreach (var item in Model) {
上面的代码使用ViewBag属性使用对应的查询字符串来设置列标题链接的值。
执行项目,点击Last Name和Enrollment Date行标题,验证排序功能
点击Last Name标题。students 将按降序排列
2.向Students Index页面加入搜索框
要在Students Index页面中加入搜索功能,你须要在视图中加入一个文本框和一个提交button并改动Index方法,通过在文本框中输入 first name或者last name 来搜索对应的Students数据。
在Index方法中加入筛选功能
打开Controllers\StudentController.cs,使用以下的代码替换Index方法
public ViewResult Index(string sortOrder, string searchString)
{
ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
ViewBag.DateSortParm = sortOrder == "Date" ?
"date_desc" : "Date"; var students = from s in db.Students select s; if (!String.IsNullOrEmpty(searchString)) { students = students.Where(s => s.LastName.ToUpper().Contains(searchString.ToUpper()) || s.FirstMidName.ToUpper().Contains(searchString.ToUpper())); } switch (sortOrder) { case "name_desc": students = students.OrderByDescending(s => s.LastName); break; case "Date": students = students.OrderBy(s => s.EnrollmentDate); break; case "date_desc": students = students.OrderByDescending(s => s.EnrollmentDate); break; default: students = students.OrderBy(s => s.LastName); break; } return View(students.ToList()); }
上面的代码将searchString參数加入到Index方法。你也能够向LINQ语句中加入where子句来查询那些first name 或者 last name中包括查询条件的student。
查询条件就是你所填写在Index视图的文本框中的字符串,仅仅有当文本框中由查询条件时。where语句才会运行。
注意:在非常多情况下,你能够调用不管该是Entity Framework实体集中的方法还是位于内存集合中的作为扩展的方法,得到的结果一般是一样的,可是有些情况下可能不同。
举例来说。.NET Framework实现了Contains方法,当你向该方法传递一个空字符串作为參数时,它将返回全部行,可是在SQL Server Compact 4.0的 Entity Framework提供程序中不反回不论什么行,因此上面的代码(将where语句放在if语句中)能够确保全部SQL Server版本号都能返回同样的结果。另外,.NET Framework实现的Contains方法默认是大写和小写敏感的,可是Entity Framework SQL Server 提供程序运行的比較是不区分大写和小写的。
因此。此处调用ToUpper方法来明白这里运行不区分大写和小写的比較,这样当接下来使用仓储模式时不须要改动代码就能够得到同样的结果(IEnumerable集合中的Contains方法是由 .NET Framework实现的,IQueryable对象中的Contains方法是由数据库提供程序实现的)。
对于不同的数据库提供程序或者使用IQueryable对象作比較或者使用IEnumerable集合作比較时,Null值得处理也是不同的。比如某些情况下,where条件比方table.Column !=0可能不返回那些包括null值得列。
在Student Index 视图中加入一个搜索框
打开Views\Student\Index.cshtml,加入例如以下代码
@Html.ActionLink("Create New", "Create")
@using (Html.BeginForm())
{
Find by name: @Html.TextBox("SearchString")
}
执行项目。输入要搜索的值,点击Search验证搜索功能是否正常
注意在URL中并不包括搜索字符串,这意味着假设你将此页面增加书签,然后通过书签来打开此页面。你将无法得到筛选后的结果。
在Students Index页面中加入分页功能
要向Students Index页面中加入分页,你须要安装PagedList.Mvc NuGet包。然后你能够在Index 方法中做一些改动并在Index视图中加入分页链接。PagedList.Mvc是ASP.NET MVC中众多分页和排序包中比較好的一个。这里仅仅是使用它来作为演示,并不是作为推荐选择。
安装PagedList.Mvc NuGet包
PagedList包作为PagedList.Mvc包的依赖项会自己主动安装到项目中。PagedList包为IQueryable和IEnumable集合加入了PagedList集合类型和扩展方法。
PagedList扩展方法为从IQueryabl或IEnumable集合产生的PagedList集合数据创建了一个单一的页面。而且PagedList集合提供了多个便于分页的属性和方法。PagedList.Mvc包中含有分页帮助器并可在页面中显示分页button。
依次打开Tools-> Library Package Manager-> Package Manager Console
在打开的Package Manager Console中确保Package source是nuget.org 而且Default project是 ContosoUniversity,最后输入Install-Package PagedList.Mvc命令
在Index方法中加入分页功能
打开Controllers\StudentController.cs,加入PagedList命名空间
using PagedList;
使用以下的代码替换Index方法
public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page)
{
ViewBag.CurrentSort = sortOrder;
ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ?
"name_desc" : ""; ViewBag.DateSortParm = sortOrder == "Date" ?
"date_desc" : "Date"; if (searchString != null) { page = 1; } else { searchString = currentFilter; } ViewBag.CurrentFilter = searchString; var students = from s in db.Students select s; if (!String.IsNullOrEmpty(searchString)) { students = students.Where(s => s.LastName.ToUpper().Contains(searchString.ToUpper()) || s.FirstMidName.ToUpper().Contains(searchString.ToUpper())); } switch (sortOrder) { case "name_desc": students = students.OrderByDescending(s => s.LastName); break; case "Date": students = students.OrderBy(s => s.EnrollmentDate); break; case "date_desc": students = students.OrderByDescending(s => s.EnrollmentDate); break; default: // Name ascending students = students.OrderBy(s => s.LastName); break; } int pageSize = 3; int pageNumber = (page ??
1); return View(students.ToPagedList(pageNumber, pageSize)); }
上面的代码加入了一个page參数,一个当前排序顺序參数,一个当前搜索条件參数
public ActionResult Index(string sortOrder, string currentFilter, string searchString, int? page)
页面第一次显示或者用户还没有点击分页或排序链接。全部參数值都为null。假设点击分页链接,page变量将包括要显示的页码。
ViewBag属性向视图提供了当前的排序顺序,由于在点击分页链接后必需要保持当前的排序顺序。
ViewBag.CurrentSort = sortOrder;
还有一个属性ViewBag.CurrentFiler向视图提供当前的搜索条件。该值必需要被包括在分页链接中以保证是针对搜索结果进行分页。同一时候在页面又一次显示时,搜索字符串必须显示在搜索框中。假设在分页时改动了搜索字符串。页码必需要被重置为1。由于新的搜索条件可导致不同的搜索结果。当向搜索框输入搜索字符串并点击提交button。这是searchString的值不为null。
if (searchString != null)
{
page = 1;
}
else
{
searchString = currentFilter;
}
在该方法的结尾部分,学生IQueryable对象的ToPagedList扩展方法将学生查询转换为一个支持分页的学生集合类型,并将该学生集合传递给视图
int pageSize = 3;
int pageNumber = (page ?
?
1); return View(students.ToPagedList(pageNumber, pageSize));
ToPagedList方法须要一个页码參数。两个问号表示空合并操作符(null-coalescing operator)。空合并操作符为nullable 类型指定默认值,表达式(page ?? 1)表示假设page值不为空就返回该值,否则返回1。
向 Student Index视图加入分页链接
打开Views\Student\Index.cshtml,使用以下的代码替换
@model PagedList.IPagedList
@using PagedList.Mvc;
@{
ViewBag.Title = "Students";
}
Students
@Html.ActionLink("Create New", "Create")
@using (Html.BeginForm("Index", "Student", FormMethod.Get))
{
Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
}
@Html.ActionLink("Last Name", "Index", new { sortOrder = ViewBag.NameSortParm, currentFilter=ViewBag.CurrentFilter })
First Name
@Html.ActionLink("Enrollment Date", "Index", new { sortOrder = ViewBag.DateSortParm, currentFilter=ViewBag.CurrentFilter })
@foreach (var item in Model) {
@Html.DisplayFor(modelItem => item.LastName)
@Html.DisplayFor(modelItem => item.FirstMidName)
@Html.DisplayFor(modelItem => item.EnrollmentDate)
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
}
Page @(Model.PageCount < Model.PageNumber ?
0 : Model.PageNumber) of @Model.PageCount @Html.PagedListPager(Model, page => Url.Action("Index", new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter }))
页面顶部的@model语句指明视图如今获取的是PagedList对象而不是List对象。
using PagedList.Mvc语句能够使MVC帮助器提供分页button。
在代码中使用了 BeginForm 的重载方法并加入了FormMethod.Get 參数。
@using (Html.BeginForm("Index", "Student", FormMethod.Get))
{
Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
}
默认情况下BeginForm 使用POST方式提交表单数据,这意味着參数通过HTTP消息正文传递而不是通过URL查询字符串。当你指定使用HTTP GET时。表单数据通过URL查询字符串来传递。这样能够同意用户将URL保存为书签。
W3C guidelines for the use of HTTP GET推荐你应该在不会更新数据的方法中使用GET方式。
搜索框使用当前的搜索字符串进行初始化,以便在分页的时候不会丢失搜索字符串。
Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
列标题链接使用了搜索字符串并将其传递给控制器以便用户能够对搜索结果进行排序。
@Html.ActionLink("Last Name", "Index", new { sortOrder=ViewBag.NameSortParm, currentFilter=ViewBag.CurrentFilter })
显示当前页码和总页数
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
假设没有要显示的页。就显示"Page 0 of 0"
PagedListPager帮助器显示分页button
@Html.PagedListPager( Model, page => Url.Action("Index", new { page }) )
PagedListPager帮助器提供了多个选项。你能够自己定义URL和样式
执行项目
使用不同的排序方式。并点击分页button跳转至不同的页码,确保分页功能正常,然后输入查询条件,再次验证分页和搜索功能正常。
3.创建显示学生统计信息的About页面
要让About页面显示在每个入学日共同拥有多少学生登记,须要将学生分组并进行简单的计算,要做到这些。须要运行下列操作:
须要为要传递给视图的数据创建一个视图模型类
改动Home控制器中的About方法
改动About视图
创建视图模型 创建一个ViewModels目录并加入名为EnrollmentDataGroup.cs的类,使用以下的代码替换
using System;
using System.ComponentModel.DataAnnotations;
namespace ContosoUniversity.ViewModels
{
public class EnrollmentDateGroup
{
[DataType(DataType.Date)]
public DateTime? EnrollmentDate { get; set; }
public int StudentCount { get; set; }
}
}
改动Home控制器
打开HomeController.cs,在文件顶部加入using语句引入命名空间
using ContosoUniversity.DAL;
using ContosoUniversity.ViewModels;
为数据库上下文加入类变量
public class HomeController : Controller
{
private SchoolContext db = new SchoolContext();
使用以下的代码替换About方法
public ActionResult About()
{
IQueryable data = from student in db.Students
group student by student.EnrollmentDate into dateGroup
select new EnrollmentDateGroup()
{
EnrollmentDate = dateGroup.Key,
StudentCount = dateGroup.Count()
};
return View(data.ToList());
}
使用LINQ语句对Student实体依照enrollment date分组。计算每一个分组的实体数量,并将结果存储在EnrollmentDateGroup视图模型对象的集合中。
加入Dispose方法
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
改动About视图
打开Views\Home\About.cshtml ,使用以下的代码替换
@model IEnumerable
@{
ViewBag.Title = "Student Body Statistics";
}
Student Body Statistics
Enrollment Date
Students
@foreach (var item in Model) {
@Html.DisplayFor(modelItem => item.EnrollmentDate)
@item.StudentCount
}
执行项目,点击About链接。显示学生统计信息
欢迎转载,请注明文章出处:http://blog.csdn.net/johnsonblog/article/details/38795465
还大家一个健康的网络环境,从你我做起
项目源代码:https://github.com/johnsonz/MvcContosoUniversity
THE END
你可能感兴趣的:(MVC5 Entity Framework学习参加排序、筛选和排序功能)
安装wordpress报错(完美解决)
光头程序员em
wordpress 报错
#错误1#YourserverisrunningPHPversion7.2.1butWordPress6.7.1requiresatleast7.2.24.这是因为wordpress6.7.1需要7.2.24及以上版本,解决方法就是下载低版本wordpress或者升级高版本的php运行环境#错误2#不能选择数据库可以连接到数据库服务器(这说明您的用户名和密码正确),但是不能选择wordpress数
学习三维动画心得
2501_92205961
开发语言 青少年编程
在大二学年的三维动画设计学习进程中,我围绕3dsMax和Blender两大核心软件展开深入钻研,并在此基础上探索技术应用与创新。不仅熟练掌握了基础操作,还深入到代码编写与复杂技术问题解决领域,逐步构建起系统的三维动画设计知识与技能体系,以下是详细的学习总结。一、3dsMax的深度学习与技术实践(一)高级建模与脚本优化在3dsMax的学习中,基础建模掌握后,我开始挑战高级建模技术。利用NURBS建模
Python网安-zip文件暴力破解(仅供学习)
Whoisshutiao
python网安 python 开发语言 网络安全
目录源码在这里需要的模块准备一个密码本和需要破解的ZIP文件一行一行地从密码文件中读取每个密码。核心部分注意,需要修改上段代码注释里的这段具有编码问题的代码:源码在这里https://github.com/Wist-fully/Attack/tree/cracker需要的模块fromtqdmimporttqdmimportzipfileimportpyzipper准备一个密码本和需要破解的ZIP文
【力扣hot100】python刷题笔记之哈希
Animato.
哈希算法 leetcode 笔记
1.两数之和(简单)题目描述:给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。示例:解法一:暴力解法:双层循环(这里就不给代码了)解法二:哈希表(时间复杂度O(n))算法思路:(1)先创建一个空字典当做哈希表来存储已经遍历过的
Qt实现tcp通信(QTcpServer和QTcpSocket的应用)详细教程
Qt实现tcp通信(QTcpServer和QTcpSocket的应用)详细教程服务端监听地址和端口ip可以是Ipv4Any,本机地址,也可以是固定的某个ip端口号则作为服务端绑定的端口,客户端连接服务端时需要连接到服务端绑定的端口,端口不对连接失败m_server=newQTcpServer(this);m_server->listen(QHostAddress::AnyIPv4,serverPo
AI对话导出工具 (AI Chat Exporter)——支持 ChatGPT, Grok 和 Gemini 平台
ALGORITHM LOL
人工智能 chatgpt
AI对话导出工具(AIChatExporter)轻松将AI对话导出为标准Markdown格式支持ChatGPT,Grok和Gemini平台相关代码已开源至Github欢迎Star✨功能特点多平台支持:同时支持ChatGPT,Grok和Gemini三大AI平台完整内容保留:精确导出所有对话内容,包括代码块、数学公式、链接和格式化文本标准Markdown格式:输出符合标准的Markdown格式,确保最
AMHS工程项目中-MCS-STKC之间的office 测试场景的介绍
爱吃青菜的大力水手
半导体 自动化 AMHS MCS
工业自动化/半导体/面板制造等行业中常见的系统间接口预调试测试,通常称为Mockup测试、Office测试或FAT-Simulation测试。它的核心目标是在设备实际搬入工厂现场并连接真实物理设备之前,在办公室环境中验证上位系统(MCS)与下位系统(STOCKER控制器)之间的通信接口、协议逻辑和业务流程是否正常工作。以下是针对此场景的详细解读和关键点:核心目标:验证通信协议互通性:确保MCS发送
程序员思维
SHIZHONGYUO
思维 语言 应用程序 软件 编程
起因首先简单说一下,为什么我会想到这个话题。主要有这么几方面的原因。当我试图回过头去总结大学在计算机专业所学习的一些理论和知识的时候。发现,在学校里面学习的一些东西,走了两个极端。一个极端是偏向了细节。比如我们学习的那些《***程序设计》的课程。看这几门课的名称的我们能够很明显的看出,***是一个形容词定语,用来修饰主题“程序设计”。但是,你却非常意外的意识到《C++面向对象程序设计》和面向对象程
打造连贯性:如何通过过渡句提升论文的逻辑流畅性
学境思源AcademicIdeas
AI写作 ChatGPT 学境思源 chatgpt 人工智能
在学术写作中,逻辑连贯性是衡量论文质量的重要标准之一。即使论点扎实、数据详实,缺乏连贯性的论文仍可能让读者感到困惑。过渡句作为连接不同段落和章节的重要桥梁,能够有效地提升文章的逻辑流畅性,使内容更加易于理解。今天的内容我们将深入探讨过渡句的重要性,并提供实用技巧和示例,帮助写作者在论文中实现自然过渡,提升整体阅读体验。通过掌握这些方法,作者可以确保其研究成果得到更好的展示和认可。1.过渡句的重要性
生成式AI技术对未来知识生产模式的颠覆性影响:跨学科案例分析
德宿
人工智能
引言随着人工智能技术的迅猛发展,生成式AI作为一种革命性技术正在深刻地改变人类知识生产和学术研究的范式。生成式AI不仅能够创建原创内容,还能模拟人类思维过程,处理和生成大量数据,从而在各个学科领域展现出广阔的应用前景。本研究报告旨在深入探讨生成式AI技术对未来知识生产模式的颠覆性影响,通过对比传统学术研究与AI辅助研究的范式差异,并选取医学、法学、文学、经济学和艺术学等五个典型领域进行深度案例分析
广州华锐互动携手中石油:AR 巡检系统实现重大突破
广州华锐视点
ar
广州华锐互动在AR技术领域的卓越成就,通过一系列与知名企业、机构的成功合作案例得以充分彰显。其中,与中石油的合作项目堪称经典,展现了广州华锐互动运用AR技术解决实际难题、达成目标的强大实力。中石油作为能源行业的巨擘,在石油勘探、开采、运输和炼化等环节面临着诸多复杂的挑战。广州华锐互动与中石油携手,针对其油田设备巡检和员工培训等关键业务场景,开发了一套定制化的AR解决方案。在油田设备巡检方面,传统的
大模型本地部署,拥有属于自己的ChatGpt
小妖同学学AI
chatgpt
ChatGpt以其强大的信息整合和对话能力惊艳了全球,在自然语言处理上面表现出了惊人的能力。不管用于文案撰写还是程序辅助开发都大大提高了我们的工作效率,但是其使用有一定的门槛,让我们大多数人都望而却步,今天我们利用ollama实现本地大模型的步骤,让我们轻松拥有自己的人工智能。Ollama作为一个轻量级的工具,可以帮助用户在本地运行这些大型语言模型,无需持续依赖云服务,既保护了数据隐私,又能减少网
左神算法之二叉树最大路径和问题
岳轩子
左神算法 算法 深度优先
二叉树最大路径和问题(Java实现)文章目录二叉树最大路径和问题(Java实现)1.题目描述2.问题解释3.解决思路4.代码实现5.总结1.题目描述给定一棵二叉树,其中每个节点都包含一个整型权值。要求计算从根节点到叶节点的所有路径中,权值和最大的值是多少。2.问题解释必须从根节点出发到叶子节点结束需要遍历所有可能的路径找出所有路径和中最大的那个值叶子节点是指没有子节点的节点3.解决思路采用深度优先
进程和线程的区别,如何实现线程通信?
EchoYa!
java linux 服务器
进程和线程是操作系统中的两个重要概念,它们都是用来实现并发执行的方式,但有一些关键的区别:1.进程(Process)是程序的一次执行过程,是操作系统进行资源分配和调度的基本单位。每个进程都有独立的内存空间,包括代码、数据、堆栈等,进程之间相互独立,需要通过进程间通信来实现数据共享。2.线程(Thread)是进程中的一个执行单元,一个进程可以包含多个线程,线程共享进程的内存空间和资源,每个线程有自己
程序和进程和线程的区别是什么?
小白之歌
Java
程序和进程和线程的区别是什么?进程是操作系统资源分配的基本单位,线程是任务调度执行基本单位(CPU的基本调度单位),程序是静态的指令集合,而进程是运行中的指令集合。进程:程序的一次执行,答法1:进程间切换代价大,线程间切换代价小进程拥有资源多,线程拥有资源少多个线程共享进程的资源进程是分配资源的基本单位,而线程是独立运行和调度的基本单位。任意时刻,一个CPU只能运行一个进程,进程获得资源后进行分配
Zeek网络安全分析框架深入体验
八位数花园
本文还有配套的精品资源,点击获取简介:Zeek(前身为Bro)是一个强大的开源网络分析工具,专门用于监控和分析网络流量以识别安全威胁。它通过事件驱动的方式解析多种网络协议,并具备实时分析、非侵入式部署、强大的日志记录能力,以及丰富的脚本语言支持,是网络安全专业人员不可或缺的工具之一。通过本课程,学生将掌握Zeek的核心功能,包括其日志系统、事件处理机制,以及如何通过编写Zeek脚本来扩展分析能力,
矩阵的行列式和逆矩阵的行列式的关系
音程
数学 矩阵 线性代数
矩阵的行列式和它的逆矩阵的行列式之间有明确的数学关系。我们来详细解释这个关系。✅前提条件:要讨论逆矩阵的行列式,首先必须满足矩阵是可逆的(即:非奇异矩阵),也就是说:矩阵AAA是一个方阵(行数等于列数)且其行列式det(A)≠0\det(A)\neq0det(A)=0核心公式:设AAA是一个n×nn\timesnn×n的可逆矩阵,则其逆矩阵A−1A^{-1}A−1存在,并且满足以下关系:det
进程与线程的联系和区别?
Owen_Xp
JavaEE java 面试 开发语言
1、线程的基本概念概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。好处:(1)易于调度。(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序
干货 | 50题带你玩转numpy
朱卫军 AI
numpy
这是在stackoverflow和numpy文档里汇总的numpy练习题,目的是为新老用户提供快速参考。1.Importthenumpypackageunderthenamenp(★☆☆)导入numpy包,命名为npimportnumpyasnp2.Printthenumpyversionandtheconfiguration(★☆☆)打印numpy版本和配置print(np.__version_
MySQL常用函数性能优化及索引影响分析
Hai-W
数据库 mysql 性能优化 数据库 sql
MySQL常用函数性能优化指南(含索引影响分析)以下是MySQL函数使用指南,新增性能影响评级、索引失效分析和优化方案,帮助您高效使用函数:一、字符串处理函数(含性能分析)函数示例性能影响索引影响优化建议CONCAT()SELECTCONCAT(first_name,last_name)FROMusers;⭐⭐❌导致全扫描存储计算列:ALTERTABLEusersADDfull_nameVARCH
deepseek:2025年Java面试必刷高频LeetCode题目
Alexon Xu
java 面试 leetcode
以下是2025年Java面试中高频LeetCode题目分类及对应链接,结合大厂实际考察频率整理:一、链表类反转链表(Easy)迭代法与递归实现双解,掌握三指针操作环形链表检测(Easy)快慢指针经典应用,延伸考察环入口点计算合并K个排序链表(Hard)优先队列解法时间复杂度O(NlogK)相交链表(Easy)双指针数学技巧:a+c+b=b+c+a删除链表的倒数第N个节点(Medium)快慢指针+虚
Python网安-ftp服务暴力破解(仅供学习)
Whoisshutiao
python 网络安全 开发语言
目录源码在这里需要导入的模块连接ftp,并设置密码本和线程核心代码设置线程源码在这里https://github.com/Wist-fully/Attack/tree/cracker需要导入的模块importftplibfromthreadingimportThreadimportqueue连接ftp,并设置密码本和线程host="192.168.6.6"user="student"port=21
流量压测,CDN跑量
JAVA拾贝
ddos 压测 攻击 网络攻击模型
这里写自定义目录标题背景灵机一动平台部署总结背景自己经营了个网站,有一点收益,经常被竞争对手DDOS,客户流失,无奈只能上防御平台,气不过也找人去DDOS对方(不建议,费钱且违法),对方也上了高防CDN,于是一直陷入伤敌一千自损八百的循环~灵机一动常规的CDN套餐除了时间还有请求数和流量的限制,那如果可以一直刷对方流量岂不是,可以间接掏空对方钱包了?如是赶紧找了下有没有类似的平台~平台官网:Img
FTTR(Fiber to the Room)一主一从
FTTR(FibertotheRoom)一主一从是家庭或企业光纤组网中的一种设备配置方式,具体含义如下:1.基本概念FTTR:指光纤直接延伸到每个房间(替代传统网线),实现全屋千兆/万兆覆盖。一主一从:由一台主光猫(主网关)和一台从光猫(从网关)组成的网络架构,通过光纤连接,形成主从协作的网络系统。2.主设备和从设备的作用主光猫(主网关)直接连接运营商的光纤入户线路,负责拨号、路由、Wi-Fi覆盖
Charles中文版抓包工具:如何加速API调试与网络优化
2501_91592143
http udp https websocket 网络安全 网络协议 tcp/ip
在软件开发的过程中,网络请求和API接口的调试与优化是最常见的挑战之一。无论是Web开发、移动应用调试,还是后端API性能优化,开发者都需要一个高效的工具来帮助诊断和解决网络流量中的潜在问题。Charles抓包工具作为一款行业领先的网络调试软件,凭借其强大的功能和简便的操作,帮助开发者提升开发效率、优化网络请求。本文将探讨如何通过Charles中文版抓包工具加速API调试与网络优化,确保开发过程中
DOP数据开放平台(真实线上项目)
JAVA拾贝
java 数据开放平台 接口开放平台 监控限流 接口过滤 自动文档
什么是数据开放平台?数据开放平台是一种通过公开应用程序编程接口(API)或结构化数据,允许第三方开发者或机构访问、使用和共享数据的平台,旨在促进数据流通、打破信息孤岛并激发创新应用。DOP数据开放平台简单演示DOP数据开放平台(JAVA语言)DOP数据开放平台优势网址:DOP数据开放平台商户可自行注册,管理员开放权限访问接口向下兼容,方便版本迭代响应报文过滤,数据更安全支持监控限流,服务更稳定自
Joda-Time 日期时间库介绍
hweiyu00
技术栈杂谈 开发语言 java
一、Joda-Time是什么?Joda-Time是由StephenColebourne开发的开源日期时间库,用于替代Java标准库中的java.util.Date和java.util.Calendar。它因设计更合理、使用更便捷,曾是Java开发中处理日期时间的主流选择,尤其在Java8推出新的日期时间API(java.time包)之前被广泛使用。二、Joda-Time解决了Java标准库的哪些问
Spring AI 结合 MCP MySQL 实现对话式数据库查询
没刮胡子
软件开发技术实战专栏 人工智能AI Spring 数据库 spring 人工智能 spring-ai mcp-server mysql
在现代应用开发中,将人工智能与数据库查询结合可以创造更自然、更智能的用户交互方式。下面我将详细介绍如何使用SpringAI框架结合MCP(可能指MySQL连接池或相关组件)实现对话中的数据库查询功能。什么是SpringAI和MCPMySQLSpringAI框架概述SpringAI是基于Spring生态的人工智能集成框架,它提供了:与大型语言模型(LLM)的集成能力对话管理和自然语言处理功能业务逻辑
MiniMax - M1:开源大模型的革命性突破
开源大模型MiniMax-M1研究报告一、引言在人工智能技术飞速发展的当下,大模型领域的竞争愈发激烈。开源大模型以其开放性、可定制性和社区协作的优势,逐渐成为推动人工智能技术进步的重要力量。MiniMax-M1作为全球首个开源大规模混合架构的推理模型,一经发布便引起了广泛关注。它在长上下文处理、推理效率和成本控制等方面展现出了卓越的性能,为人工智能的发展带来了新的思路和方向。本文将对MiniMax
Ubuntu基础(上传文件和部署Python)
aaiier
ubuntu linux 运维
首先打开
[email protected] 然后写yes,在输入密码然后就是输入ls/查看根目录ls/结果是ubuntu@x0-x-xx-xx:~$ls/binbootdevhomelib.usr-is-mergedlost+foundmntprocrunsbin.usr-is-mergedsrvtmpvarbin.usr-is-mergeddataetclibli
java解析APK
3213213333332132
java apk linux 解析APK
解析apk有两种方法
1、结合安卓提供apktool工具,用java执行cmd解析命令获取apk信息
2、利用相关jar包里的集成方法解析apk
这里只给出第二种方法,因为第一种方法在linux服务器下会出现不在控制范围之内的结果。
public class ApkUtil
{
/**
* 日志对象
*/
private static Logger
nginx自定义ip访问N种方法
ronin47
nginx 禁止ip访问
因业务需要,禁止一部分内网访问接口, 由于前端架了F5,直接用deny或allow是不行的,这是因为直接获取的前端F5的地址。
所以开始思考有哪些主案可以实现这样的需求,目前可实施的是三种:
一:把ip段放在redis里,写一段lua
二:利用geo传递变量,写一段
mysql timestamp类型字段的CURRENT_TIMESTAMP与ON UPDATE CURRENT_TIMESTAMP属性
dcj3sjt126com
mysql
timestamp有两个属性,分别是CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP两种,使用情况分别如下:
1.
CURRENT_TIMESTAMP
当要向数据库执行insert操作时,如果有个timestamp字段属性设为
CURRENT_TIMESTAMP,则无论这
struts2+spring+hibernate分页显示
171815164
Hibernate
分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流。
1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法:
public in
构建自己的Wrapper应用
g21121
rap
我们已经了解Wrapper的目录结构,下面可是正式利用Wrapper来包装我们自己的应用,这里假设Wrapper的安装目录为:/usr/local/wrapper。
首先,创建项目应用
&nb
[简单]工作记录_多线程相关
53873039oycg
多线程
最近遇到多线程的问题,原来使用异步请求多个接口(n*3次请求) 方案一 使用多线程一次返回数据,最开始是使用5个线程,一个线程顺序请求3个接口,超时终止返回 缺点 测试发现必须3个接
调试jdk中的源码,查看jdk局部变量
程序员是怎么炼成的
jdk 源码
转自:http://www.douban.com/note/211369821/
学习jdk源码时使用--
学习java最好的办法就是看jdk源代码,面对浩瀚的jdk(光源码就有40M多,比一个大型网站的源码都多)从何入手呢,要是能单步调试跟进到jdk源码里并且能查看其中的局部变量最好了。
可惜的是sun提供的jdk并不能查看运行中的局部变量
Oracle RAC Failover 详解
aijuans
oracle
Oracle RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换。
Oracle 10g RAC 的Failover 可以分为3种:
1. Client-Si
form表单提交数据编码方式及tomcat的接受编码方式
antonyup_2006
JavaScript tomcat 浏览器 互联网 servlet
原帖地址:http://www.iteye.com/topic/266705
form有2中方法把数据提交给服务器,get和post,分别说下吧。
(一)get提交
1.首先说下客户端(浏览器)的form表单用get方法是如何将数据编码后提交给服务器端的吧。
对于get方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:
JS初学者必知的基础
百合不是茶
js函数 js入门基础
JavaScript是网页的交互语言,实现网页的各种效果,
JavaScript 是世界上最流行的脚本语言。
JavaScript 是属于 web 的语言,它适用于 PC、笔记本电脑、平板电脑和移动电话。
JavaScript 被设计为向 HTML 页面增加交互性。
许多 HTML 开发者都不是程序员,但是 JavaScript 却拥有非常简单的语法。几乎每个人都有能力将小的
iBatis的分页分析与详解
bijian1013
java ibatis
分页是操作数据库型系统常遇到的问题。分页实现方法很多,但效率的差异就很大了。iBatis是通过什么方式来实现这个分页的了。查看它的实现部分,发现返回的PaginatedList实际上是个接口,实现这个接口的是PaginatedDataList类的对象,查看PaginatedDataList类发现,每次翻页的时候最
精通Oracle10编程SQL(15)使用对象类型
bijian1013
oracle 数据库 plsql
/*
*使用对象类型
*/
--建立和使用简单对象类型
--对象类型包括对象类型规范和对象类型体两部分。
--建立和使用不包含任何方法的对象类型
CREATE OR REPLACE TYPE person_typ1 as OBJECT(
name varchar2(10),gender varchar2(4),birthdate date
);
drop type p
【Linux命令二】文本处理命令awk
bit1129
linux命令
awk是Linux用来进行文本处理的命令,在日常工作中,广泛应用于日志分析。awk是一门解释型编程语言,包含变量,数组,循环控制结构,条件控制结构等。它的语法采用类C语言的语法。
awk命令用来做什么?
1.awk适用于具有一定结构的文本行,对其中的列进行提取信息
2.awk可以把当前正在处理的文本行提交给Linux的其它命令处理,然后把直接结构返回给awk
3.awk实际工
JAVA(ssh2框架)+Flex实现权限控制方案分析
白糖_
java
目前项目使用的是Struts2+Hibernate+Spring的架构模式,目前已经有一套针对SSH2的权限系统,运行良好。但是项目有了新需求:在目前系统的基础上使用Flex逐步取代JSP,在取代JSP过程中可能存在Flex与JSP并存的情况,所以权限系统需要进行修改。
【SSH2权限系统的实现机制】
权限控制分为页面和后台两块:不同类型用户的帐号分配的访问权限是不同的,用户使
angular.forEach
boyitech
AngularJS AngularJS API angular.forEach
angular.forEach 描述: 循环对obj对象的每个元素调用iterator, obj对象可以是一个Object或一个Array. Iterator函数调用方法: iterator(value, key, obj), 其中obj是被迭代对象,key是obj的property key或者是数组的index,value就是相应的值啦. (此函数不能够迭代继承的属性.)
java-谷歌面试题-给定一个排序数组,如何构造一个二叉排序树
bylijinnan
二叉排序树
import java.util.LinkedList;
public class CreateBSTfromSortedArray {
/**
* 题目:给定一个排序数组,如何构造一个二叉排序树
* 递归
*/
public static void main(String[] args) {
int[] data = { 1, 2, 3, 4,
action执行2次
Chen.H
JavaScript jsp XHTML css Webwork
xwork 写道 <action name="userTypeAction"
class="com.ekangcount.website.system.view.action.UserTypeAction">
<result name="ssss" type="dispatcher">
[时空与能量]逆转时空需要消耗大量能源
comsci
能源
无论如何,人类始终都想摆脱时间和空间的限制....但是受到质量与能量关系的限制,我们人类在目前和今后很长一段时间内,都无法获得大量廉价的能源来进行时空跨越.....
在进行时空穿梭的实验中,消耗超大规模的能源是必然
oracle的正则表达式(regular expression)详细介绍
daizj
oracle 正则表达式
正则表达式是很多编程语言中都有的。可惜oracle8i、oracle9i中一直迟迟不肯加入,好在oracle10g中终于增加了期盼已久的正则表达式功能。你可以在oracle10g中使用正则表达式肆意地匹配你想匹配的任何字符串了。
正则表达式中常用到的元数据(metacharacter)如下:
^ 匹配字符串的开头位置。
$ 匹配支付传的结尾位置。
*
报表工具与报表性能的关系
datamachine
报表工具 birt 报表性能 润乾报表
在选择报表工具时,性能一直是用户关心的指标,但是,报表工具的性能和整个报表系统的性能有多大关系呢?
要回答这个问题,首先要分析一下报表的处理过程包含哪些环节,哪些环节容易出现性能瓶颈,如何优化这些环节。
一、报表处理的一般过程分析
1、用户选择报表输入参数后,报表引擎会根据报表模板和输入参数来解析报表,并将数据计算和读取请求以SQL的方式发送给数据库。
2、
初一上学期难记忆单词背诵第一课
dcj3sjt126com
word english
what 什么
your 你
name 名字
my 我的
am 是
one 一
two 二
three 三
four 四
five 五
class 班级,课
six 六
seven 七
eight 八
nince 九
ten 十
zero 零
how 怎样
old 老的
eleven 十一
twelve 十二
thirteen
我学过和准备学的各种技术
dcj3sjt126com
技术
语言VB https://msdn.microsoft.com/zh-cn/library/2x7h1hfk.aspxJava http://docs.oracle.com/javase/8/C# https://msdn.microsoft.com/library/vstudioPHP http://php.net/manual/en/Html
struts2中token防止重复提交表单
蕃薯耀
重复提交表单 struts2中token
struts2中token防止重复提交表单
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年7月12日 11:52:32 星期日
ht
线性查找二维数组
hao3100590
二维数组
1.算法描述
有序(行有序,列有序,且每行从左至右递增,列从上至下递增)二维数组查找,要求复杂度O(n)
2.使用到的相关知识:
结构体定义和使用,二维数组传递(http://blog.csdn.net/yzhhmhm/article/details/2045816)
3.使用数组名传递
这个的不便之处很明显,一旦确定就是不能设置列值
//使
spring security 3中推荐使用BCrypt算法加密密码
jackyrong
Spring Security
spring security 3中推荐使用BCrypt算法加密密码了,以前使用的是md5,
Md5PasswordEncoder 和 ShaPasswordEncoder,现在不推荐了,推荐用bcrpt
Bcrpt中的salt可以是随机的,比如:
int i = 0;
while (i < 10) {
String password = "1234
学习编程并不难,做到以下几点即可!
lampcy
java html 编程语言
不论你是想自己设计游戏,还是开发iPhone或安卓手机上的应用,还是仅仅为了娱乐,学习编程语言都是一条必经之路。编程语言种类繁多,用途各 异,然而一旦掌握其中之一,其他的也就迎刃而解。作为初学者,你可能要先从Java或HTML开始学,一旦掌握了一门编程语言,你就发挥无穷的想象,开发 各种神奇的软件啦。
1、确定目标
学习编程语言既充满乐趣,又充满挑战。有些花费多年时间学习一门编程语言的大学生到
架构师之mysql----------------用group+inner join,left join ,right join 查重复数据(替代in)
nannan408
right join
1.前言。
如题。
2.代码
(1)单表查重复数据,根据a分组
SELECT m.a,m.b, INNER JOIN (select a,b,COUNT(*) AS rank FROM test.`A` A GROUP BY a HAVING rank>1 )k ON m.a=k.a
(2)多表查询 ,
使用改为le
jQuery选择器小结 VS 节点查找(附css的一些东西)
Everyday都不同
jquery css name选择器 追加元素 查找节点
最近做前端页面,频繁用到一些jQuery的选择器,所以特意来总结一下:
测试页面:
<html>
<head>
<script src="jquery-1.7.2.min.js"></script>
<script>
/*$(function() {
$(documen
关于EXT
tntxia
ext
ExtJS是一个很不错的Ajax框架,可以用来开发带有华丽外观的富客户端应用,使得我们的b/s应用更加具有活力及生命力。ExtJS是一个用 javascript编写,与后台技术无关的前端ajax框架。因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。
ExtJs最开始基于YUI技术,由开发人员Jack
一个MIT计算机博士对数学的思考
xjnine
Math
在过去的一年中,我一直在数学的海洋中游荡,research进展不多,对于数学世界的阅历算是有了一些长进。为什么要深入数学的世界?作为计算机的学生,我没有任何企图要成为一个数学家。我学习数学的目的,是要想爬上巨人的肩膀,希望站在更高的高度,能把我自己研究的东西看得更深广一些。说起来,我在刚来这个学校的时候,并没有预料到我将会有一个深入数学的旅程。我的导师最初希望我去做的题目,是对appe