4.密码修改
4.1.编写前端页面
写项目,建议从底层向上写,思考功能和架构。
4.2.userDao接口
//修改当前密码
public int updatePwd(Connection connection,int id,String userPassword) throws Exception;
4.3.userDao的实现类
//修改当前用户密码
@Override
public int updatePwd(Connection connection, int id, String userPassword) throws Exception {
int i = 0;
PreparedStatement preparedStatement = null;
if (connection != null){
String sql = "update smbms_user set userPassword = ? where id = ?";
Object[] params = {userPassword,id};
i = Base.execute(connection, preparedStatement, sql, params);
}
Base.close(null,preparedStatement,null);
return i;
}
4.4.userService接口
//修改用户密码
public boolean updatePwd(int id, String userPassword) throws Exception;
4.5.userService的实现类
//修改当前用户的密码
@Override
public boolean updatePwd(int id, String userPassword){
boolean flag = false;
Connection connection = null;
try {
connection = Base.getConnection();
if (userDAO.updatePwd(connection,id,userPassword) > 0){
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
Base.close(connection,null,null);
}
return flag;
}
4.6.userServet
public class UserServlet extends HttpServlet {
//servlet:控制层,调用业务层代码
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//从session里面拿id
Object user = req.getSession().getAttribute(Constans.USER_SESSION);
String newpassword = req.getParameter("newpassword");
boolean flag = false;
//调用userService中的方法
if (user != null && !StringUtils.isNullOrEmpty(newpassword)){
UserService userService = new UserServiceImpl();
try {
flag = userService.updatePwd(((User) user).getId(), newpassword);
if (flag){
req.setAttribute("message","修改密码成功,请退出,使用新密码登录。");
//密码修改成功,移除session
req.getSession().removeAttribute(Constans.USER_SESSION);
}else {
req.setAttribute("message","修改密码失败。");
}
} catch (Exception e) {
e.printStackTrace();
}
}else {
req.setAttribute("message","新密码有问题。");
}
req.getRequestDispatcher("jap/pwdmodify.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
4.7.优先使用Ajax修改密码
使用阿里巴巴的fastJson,导入包
com.alibaba
fastjson
1.2.75
//servlet方法复用
public class UserServlet extends HttpServlet {
//servlet:控制层,调用业务层代码
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getParameter("method");
if (method.equals("savepwd")&&method!=null){
this.updatePwd(req,resp);
}else if (method.equals("pwdmodify")&&method!=null){
this.pwdModify(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
//修改密码
public void updatePwd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//从session里面拿id
Object user = req.getSession().getAttribute(Constans.USER_SESSION);
String newpassword = req.getParameter("newpassword");
boolean flag = false;
//调用userService中的方法
if (user != null && !StringUtils.isNullOrEmpty(newpassword)){
UserService userService = new UserServiceImpl();
try {
flag = userService.updatePwd(((User) user).getId(), newpassword);
if (flag){
req.setAttribute("message","修改密码成功,请退出,使用新密码登录。");
//密码修改成功,移除session
req.getSession().removeAttribute(Constans.USER_SESSION);
}else {
req.setAttribute("message","修改密码失败。");
}
} catch (Exception e) {
e.printStackTrace();
}
}else {
req.setAttribute("message","新密码有问题。");
}
req.getRequestDispatcher("jap/pwdmodify.jsp").forward(req,resp);
}
//验证旧密码
public void pwdModify(HttpServletRequest req, HttpServletResponse resp) throws IOException {
Object user = req.getSession().getAttribute(Constans.USER_SESSION);
String oldPassword = (String) req.getAttribute("oldPassword");
//万能的Map,结果集
Map resultMap = new TreeMap<>();
if (user==null){//如果session失效了,登录过期
resultMap.put("result","sessionerror");
}else if (StringUtils.isNullOrEmpty(oldPassword)){//旧密码为空
resultMap.put("result","error");
}else {
String userPassword = ((User) user).getUserPassword();//数据库中用户的密码
if (userPassword.equals(oldPassword)){
resultMap.put("result","true");
}else {
resultMap.put("result","false");
}
}
resp.setContentType("application/json");
PrintWriter writer = resp.getWriter();
//JSONSArray,阿里巴巴的JSON工具类,把map类型转换为json类型传递给前端
//json格式={key:value}
writer.write(JSONArray.toJSONString(resultMap));
writer.flush();
writer.close();
}
}
5.用户管理实底层现
导入用户的工具类、用户列表页面导入:用户列表、分页条
5.1获取用户数量
5.1.1创建分页的类
public class PageSupporttest {
//当前页码-来自于用户输入
private int currentPageNo = 1;
//总数量(表)
private int totalCount = 0;
//页面容量
private int pageSize = 0;
//总页数-totalCount/pageSize(+1)
private int totalPageCount = 1;
public int getCurrentPageNo() {
return currentPageNo;
}
public void setCurrentPageNo(int currentPageNo) {
if(currentPageNo > 0){
this.currentPageNo = currentPageNo;
}
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
if(totalCount > 0){
this.totalCount = totalCount;
//设置总页数
this.setTotalPageCountByRs();
}
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
if(pageSize > 0){
this.pageSize = pageSize;
}
}
public int getTotalPageCount() {
return totalPageCount;
}
public void setTotalPageCount(int totalPageCount) {
this.totalPageCount = totalPageCount;
}
public void setTotalPageCountByRs(){
if(this.totalCount % this.pageSize == 0){
this.totalPageCount = this.totalCount / this.pageSize;
}else if(this.totalCount % this.pageSize > 0){
this.totalPageCount = this.totalCount / this.pageSize + 1;
}else{
this.totalPageCount = 0;
}
}
}
5.1.2获取用户的数量
userDao
//根据用户名或者角色名查询当前所有用户的数量
public int getUserCount(Connection connection,String username,int userRole) throws Exception;
userDaoImpl
//根据用户名或者角色名查询当前所有用户的数量
@Override
public int getUserCount(Connection connection, String username, int userRole) throws Exception {
int i = 0;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
if (connection != null){
StringBuilder sql = new StringBuilder();
sql.append("select count(1) as count from smbms_user user,smbms_role role where user.userRole = role.id");
ArrayList list = new ArrayList<>();
if (StringUtils.isNullOrEmpty(username)){
sql.append(" and userName like ?");
list.add("%" + username + "%");//index = 0
}
if (userRole > 0){
sql.append(" and u.userRole = ?");
list.add(userRole);//index = 1
}
Object[] params = list.toArray();
resultSet = Base.execute(connection, preparedStatement, resultSet, sql.toString(), params);
if (resultSet.next()){
i = resultSet.getInt("count");//从结果集中获取数量
}
}
Base.close(null,preparedStatement,resultSet);
return i;
}
userService
//根据用户名或者角色名查询当前所有用户的数量
public int getUserCount(String username,int userRole);
userServiceImpl
//根据用户名或者角色名查询当前所有用户的数量
@Override
public int getUserCount(String username, int userRole) {
int count = 0;
Connection connection = null;
try {
connection = Base.getConnection();
count = userDAO.getUserCount(connection, username, userRole);
} catch (Exception e) {
e.printStackTrace();
}finally {
Base.close(connection,null,null);
}
return count;
}
5.2获取用户列表
userDao
//通过条件查询---userList
public List getUserList(Connection connection,String username,int userRole,int currentPageNo,int pageSize) throws Exception;
userDaoImpl
public List getUserList(Connection connection, String username, int userRole, int currentPageNo, int pageSize) throws Exception {
List userslist = new ArrayList<>();
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
if (connection != null){
//用户存储sql语句
StringBuilder sql = new StringBuilder();
sql.append("select u.*,r.roleName as userRoleName from smbms_user u,smbms_role r where u.userRole = r.id");
//用于存储参数
ArrayList list = new ArrayList<>();
if (!StringUtils.isNullOrEmpty(username)){
sql.append(" and u.userName like ?");
list.add("%" + username + "%");//index = 0
}
if (userRole > 0){
sql.append(" and u.userRole = ?");
list.add(userRole);//index = 1
}
//在数据中,分页使用,limit startIndex,pageSize;总数
sql.append(" order by creationDate DESC limit ?,?");
//1 0 -(5)
//2 5 -(5)
//3 10 -(5)
//当前记录号=(当前页-1)*页面大小
currentPageNo = (currentPageNo-1)*pageSize;
list.add(currentPageNo);
list.add(pageSize);
Object[] params = list.toArray();
resultSet = Base.execute(connection, preparedStatement, resultSet, sql.toString(), params);
while (resultSet.next()){
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUserCode(resultSet.getString("userCode"));
user.setUserName(resultSet.getString("userName"));
user.setGender(resultSet.getInt("gender"));
user.setBirthday(resultSet.getDate("birthday"));
user.setPhone(resultSet.getString("phone"));
user.setUserRole(resultSet.getInt("userRole"));
user.setUserRoleName(resultSet.getString("userRoleName"));
userslist.add(user);
}
}
Base.close(null,preparedStatement,resultSet);
return userslist;
}
userService
//通过条件查询---userList
public List getUserList(String queryUsername, int queryUserRole, int currentPageNo, int pageSize) throws IOException;
userServiceImpl
//通过条件查询---userList
@Override
public List getUserList(String username, int userRole, int currentPageNo, int pageSize){
List userList = new ArrayList<>();
Connection connection = null;
try {
connection = Base.getConnection();
userList = userDAO.getUserList(connection, username, userRole, currentPageNo, pageSize);
} catch (Exception e) {
e.printStackTrace();
}finally {
Base.close(connection,null,null);
}
return userList;
}
5.3获取角色列表
为了职责的统一,可以把角色的操作单独放到另一个包中。
RoleDAO
//获取角色列表
public List getRoleList(Connection connection) throws Exception;
RoleDOAImpl
//获取角色列表
@Override
public List getRoleList(Connection connection) throws Exception {
List roleList = new ArrayList<>();
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
if (connection != null){
String sql = "select * from smbms_role";
Object[] params = {};
resultSet = Base.execute(connection, preparedStatement, resultSet, sql, params);
while (resultSet.next()){
Role role = new Role();
role.setId(resultSet.getInt("id"));
role.setRoleCode(resultSet.getInt("roleCode"));
role.setRoleName(resultSet.getString("roleName"));
roleList.add(role);
}
}
Base.close(null,preparedStatement,resultSet);
return roleList;
}
RoleService
//获取角色列表
public List getRoleList() throws Exception;
RoleServiceImpl
//获取角色列表
@Override
public List getRoleList(){
List roleList = null;
Connection connection = null;
try {
connection = Base.getConnection();
roleList = roleDAO.getRoleList(connection);
} catch (Exception e) {
e.printStackTrace();
}finally {
Base.close(connection,null,null);
}
return roleList;
}
5.4用户显示的Service
1.获取用户前端的数据(查询)
2.判断请求是否需要执行,查看参数的值判断
3.为了实现分页,需要计算出当前页面和总页数、页面大小
4.用户列表展示
//查询用户列表
public void query(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
UserServiceImpl userService = new UserServiceImpl();
RoleServiceImpl roleService = new RoleServiceImpl();
List userList = null;
List roleList = null;
//从前端获取到的数据
String queryUsername = req.getParameter("queryname");
String temp = req.getParameter("queryUserRole");
String pageIndex = req.getParameter("pageIndex");
//这是为了让界面有一个默认值0,不会出错
int queryUserRole = 0;
//第一次请求,一定是第一页,且页面大小固定
int currentPageNo = 1;
int pageSize = Constants.pageSize;
//获取用户列表
if (queryUsername == null) {
queryUsername = "";
}
if (temp != null && !temp.equals("")) {
queryUserRole = Integer.parseInt(temp);//给查询赋值
}
if (pageIndex != null) {
try {
currentPageNo = Integer.parseInt(pageIndex);
} catch (NumberFormatException e) {
resp.sendRedirect("error.jsp");
}
}
//获取用户的总数(分页:上一页,下一页)
int totalCount = userService.getUserCount(queryUsername, queryUserRole);
//通过页面的类设置当前页面、总的数量、页面大小
PageSupport page = new PageSupport();
page.setCurrentPageNo(currentPageNo);
page.setPageSize(pageSize);
page.setTotalCount(totalCount);
//最大页数
int totalPageCount = page.getTotalPageCount();
//控制首页和尾页
//如果页面小于1,就显示第一页
if (currentPageNo < 1) {
currentPageNo = 1;
} else if (currentPageNo > totalPageCount) {
//如果页面大于最大页数,就显示最后一页
currentPageNo = totalPageCount;
}
//获取用户列表展示.角色列表
userList = userService.getUserList(queryUsername, queryUserRole, currentPageNo, pageSize);
roleList = roleService.getRoleList();
req.setAttribute("userList", userList);
req.setAttribute("roleList", roleList);
req.setAttribute("totalCount", totalCount);
req.setAttribute("currentPageNo", currentPageNo);
req.setAttribute("totalPageCount", totalPageCount);
req.setAttribute("queryUserName", queryUsername);
req.setAttribute("queryUserRole", queryUserRole);
//转发请求
req.getRequestDispatcher("userlist.jsp").forward(req, resp);
}
你可能感兴趣的:(javaweb,学习,java,java-ee)
JavaScript 系列之:垃圾回收机制
程序员SKY
JavaScript javascript
前言垃圾回收是一种自动内存管理机制,用于检测和清除不再使用的对象,以释放内存空间。当一个对象不再被引用时,垃圾回收器会将其标记为垃圾,然后在适当的时候清除这些垃圾对象,并将内存回收给系统以供其他对象使用。什么是"对象不再被引用"?当一个对象不再被任何变量或属性引用时,它就成为垃圾。例如,当一个函数执行完毕后,其中创建的局部变量将成为垃圾,因为它们无法再被访问到。"适当的时候"是指什么时候?首先Ja
机器幻觉产生的原因
人机与认知实验室
机器学习 人工智能
机器幻觉是指模型生成的不符合现实的内容,比如图像生成中的错误或者不合理的输出。线性函数在神经网络中的作用通常是传递梯度,但如果每一层都是线性的,整个网络就相当于一个单层的线性模型,无法学习复杂的模式。所以如果只有线性层而没有非线性激活函数的话,网络将无法处理复杂任务。对于激活函数而言,常见的如ReLU、sigmoid、tanh。激活函数引入非线性,让网络有能力学习复杂的特征。但是如果没有合适的激活
基于web在线餐饮网站的设计与实现——蛋糕甜品店铺(HTML+CSS+JavaScript)
html网页制作
网页设计 前端 javascript html dreamweaver网页设计 web网页设计期末课程大作业
静态网站的编写主要是用HTMLDIV+CSSJS等来完成页面的排版设计,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode、Webstorm、Animate等等,用的最多的还是DW,当然不同软件写出的前端Html5代码都是一致的,本网页适合修改成为各种类型的产品展示网页,比如美食、旅游、摄影、电影、音乐等等多种主题,希望对大家有所帮助。精彩专栏推荐❤
如何在简历中巧妙展现你的兴趣爱好
贵州数擎科技有限公司
面试 跳槽
大家好!我是[数擎AI],一位热爱探索新技术的前端开发者,在这里分享前端和Web3D、AI技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步!开发领域:前端开发|AI应用|Web3D|元宇宙技术栈:JavaScript、React、ThreeJs、WebGL、Go经验经验:6年+前端开发经验,专注于图形渲染和AI技术开源项目:智简未来、晓智元宇宙、数字孪生引擎在简历中展
[LangChain 学习资源大集合]
qahaj
langchain 学习 人工智能 python
在构建语言模型应用(LLM)时,LangChain是当前备受关注的框架之一。无论是初学者还是进阶用户,丰富的学习资源可以帮助我们高效掌握LangChain的核心概念、工具和最佳实践。这篇文章为大家整理了一些优秀的LangChain学习资源,包括官方教程、课程、短视频以及书籍。官方教程(Tutorials)1.LangChain官方教程LangChain官方提供了非常详细的初学者和进阶教程,推荐从这
【股票数据API接口46】如何获取股票指历史分时BOLL数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
Athena二哈
python java 开发语言 股票数据接口 api
如今,量化分析在股市领域风靡一时,其核心要素在于数据,获取股票数据,是踏上量化分析之路的第一步。你可以选择亲手编写爬虫来抓取,但更便捷的方式,莫过于利用专业的股票数据API接口。自编爬虫虽零成本,却伴随着时间与精力的巨大消耗,且常因目标页面变动而失效。大家可以依据自己的实际情况来决定数据获取方式。接下来,我将分享200多个实测可用且免费的专业股票数据接口,并通过Python、JavaScript(
【股票数据API接口45】如何获取股票指历史分时MACD数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
Athena二哈
python java 开发语言 api 股票数据接口
如今,量化分析在股市领域风靡一时,其核心要素在于数据,获取股票数据,是踏上量化分析之路的第一步。你可以选择亲手编写爬虫来抓取,但更便捷的方式,莫过于利用专业的股票数据API接口。自编爬虫虽零成本,却伴随着时间与精力的巨大消耗,且常因目标页面变动而失效。大家可以依据自己的实际情况来决定数据获取方式。接下来,我将分享200多个实测可用且免费的专业股票数据接口,并通过Python、JavaScript(
使用 Three.js 转换 GLSL 粒子效果着色器
贵州数擎科技有限公司
javascript 着色器 开发语言
大家好!我是[数擎AI],一位热爱探索新技术的前端开发者,在这里分享前端和Web3D、AI技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步!开发领域:前端开发|AI应用|Web3D|元宇宙技术栈:JavaScript、React、ThreeJs、WebGL、Go经验经验:6年+前端开发经验,专注于图形渲染和AI技术开源项目:AI简历、元宇宙、数字孪生在这篇博客中,我们
端到端自动驾驶的分布式传感器融合架构
AI智能涌现深度研究
计算机软件编程原理与应用实践 DeepSeek R1 & 大数据AI人工智能 java python javascript kotlin golang 架构 人工智能
自动驾驶,分布式传感器融合,深度学习,计算机视觉,雷达,lidar,惯性导航,Kalman滤波,决策控制1.背景介绍自动驾驶技术作为未来交通运输的重要发展方向,近年来取得了显著进展。然而,实现真正安全的自动驾驶仍然面临着诸多挑战,其中之一就是如何有效地融合来自不同传感器的数据,构建一个可靠的感知、决策和控制系统。传统的自动驾驶系统通常依赖于单一传感器,例如摄像头或雷达,这会导致感知信息的缺失和鲁棒
侯捷C++课程学习笔记:深入探索C++内存管理机制
清水白石008
c++ 学习 笔记
侯捷C++课程学习笔记:深入探索C++内存管理机制引言有幸参与“学C++,赢好礼”——侯捷C++系列精品课学习笔记征文活动,我深感荣幸。侯捷老师作为C++教育界的泰斗,其课程深入浅出,实战性强,引领我们开发者真正理解C++的精髓。在学习侯捷C++系列课程的过程中,我受益匪浅,尤其是在内存管理这一核心领域,更是有了系统而深刻的认识。本文将围绕侯捷C++课程的学习内容,结合个人心得体会,深入探讨C++
Python 与 C++ 混合编程
云淡丶风轻
Python python c++ 开发语言
目录概述实现混合编程的方式ctypes的使用方法pythran的使用方法概述Python是解释型语言,在进行数学运算场景下,性能是瓶颈。C++性能卓越,但学习门槛高且开发效率比Python低。C++可以用于密集型计算并用Python进行调用。实现混合编程的方式将影响性能的核心代码用C++来写,而逻辑开发由Python完成。方法一:使用ctypes库加载C++编写的动态链接库。ctypes是Pyth
pyenv+virtualenv+virtualenvwrapper+VSCode+Jupyter notebook+Spyder的安装(python版本管理+环境管理+编译器解释器设置)
norah2
python virtualenv vscode
关于Python的思考流程和一些废话(可以略过)最近想要再次开始学习关于python之类的东西,但是之前电脑因为硬盘坏了所以重装了系统,导致之前用的python环境都没有了,因此现在需要重新安装。用了这么久的pyhton,很明显可以知道很多项目会依赖不同的python版本,要么是代码语法格式略有差异,要么是依赖的第三方库兼容的python版本不同,这就会经常出现在上一个项目运行的好好的包,在下一个
The Rust Programming Language 学习 (五)
枚举枚举(enumerations),也被称作enums。枚举允许你通过列举可能的成员(variants)来定义一个类型。首先,我们会定义并使用一个枚举来展示它是如何连同数据一起编码信息的。接下来,我们会探索一个特别有用的枚举,叫做Option,它代表一个值要么是某个值要么什么都不是。然后会讲到在match表达式中用模式匹配,针对不同的枚举值编写相应要执行的代码。最后会介绍iflet,另一个简洁方
大模型时代的软件架构设计
AI天才研究院
计算 DeepSeek R1 & 大数据AI人工智能大模型 AI大模型企业级应用开发实战 java python javascript kotlin golang 架构 人工智能 大厂程序员 硅基计算 碳基计算 认知计算 生物计算 深度学习 神经网络 大数据 AIGC AGI LLM 系统架构设计 软件哲学 Agent 程序员实现财富自由
引言当今世界,人工智能(AI)技术正以惊人的速度发展,其中大模型(LargeModels)的崛起尤为引人注目。大模型,也被称为深度学习模型,因其庞大的参数规模和强大的数据处理能力,成为推动AI技术前进的重要力量。随着大模型的广泛应用,软件架构设计面临着前所未有的挑战和机遇。大模型时代的软件架构设计,不仅需要解决传统软件架构所面对的问题,如性能、可靠性和可扩展性等,还需要应对大模型带来的新挑战,如计
侯捷 C++ 课程学习笔记:C++ 2.0 新特性
宇寒风暖
c++ c++ 学习 笔记 开发语言
一、课程目标这节课的目标是帮助学员全面认识C++2.0(即C++11/14)的新特性,并通过实例获得实际体验。课程内容涵盖语言和标准库两个层面,旨在让学员深入理解C++2.0的核心特性和应用场景。二、C++标准的演化C++标准经历了多个版本的演化,每个版本都引入了新的特性和改进。以下是C++标准的主要版本:C++98(1.0):第一个正式的C++标准,奠定了C++语言的基础。C++03(TR1,T
第一篇:k8s架构与组件详解
※网络笨猪※
##云原生-容器化-K8S## 架构
没有那么多花里胡哨,直接进行一个K8s架构与组件的学习。一、K8s架构在Master通常上包括kube-apiserver、etcd存储、kube-controller-manager、cloud-controller-manager、kube-scheduler和用于K8s服务的DNS服务器(插件)。这些对集群做出全局决策(比如调度),以及检测和响应集群事件的组件集合也称为控制平面。其实K8s官
为什么面试狂问Redis,阿里面试官把我问到哑口无言…
2501_90433130
面试 redis 职场和发展
Redis我们在工作中经常会用到,但是为什么要用、redis的一些场景和实战问题,90%以上的人都不是很懂。曾经自己去面试阿里,就被Redis问题问到哑口无言…事后我专门去恶补了Redis,现在算是比较精通了。作为目前主流的NoSQL技术,redis在Java互联网中得到了非常广泛的使用,个时代码代码的秃头人员,对Redis肯定是不陌生的,如果连Redis都没用过,还真不好意思出去面试,指不定被面
大语言模型LLM原理篇_图解大模型从用户输入prompt到llm输出答案的流程原理
喝不喝奶茶丫
prompt 人工智能 自然语言处理 语言模型 javascript 大模型 LLM
大模型席卷全球,彷佛得模型者得天下。对于IT行业来说,以后可能没有各种软件了,只有各种各样的智体(Agent)调用各种各样的API。在这种大势下,笔者也阅读了很多大模型相关的资料,和很多新手一样,开始脑子里都是一团乱麻,随着相关文章越读越多,再进行内容梳理,终于理清了一条清晰的脉络。笔者写原理篇时心情是有些惴惴不安的,因为毕竟对大模型的研究有限,缺乏深度。但是,还是觉得有必要记录一下学习理解心得,
开发基于提示工程的大语言模型(LLM)应用——学习笔记
ricky_fan
人工智能 python
本文是学习笔记。学习通过提示工程与大语言模型进行程序化的交互。将从最基本的开始,比如使用哪些模型,以及如何向它们发送提示词并查看响应。将逐步构建更复杂的提示词,并学习LangChain为我们提供的、用于与大语言模型交互的丰富工具。Langchain链核心是运行时(runnable),它们能以多种方式组合的为工作流。如何创建LangChain链 fromlangchain_nvidia_ai_end
项目经验之LZO压缩?思维导图 代码示例(java 架构)
用心去追梦
java 架构 开发语言
LZO(LightweightZip/Unzip)是一种高效的压缩算法,它以快速解压缩著称,适用于需要频繁读取和处理的数据。在Hadoop生态系统中,使用LZO压缩可以显著减少存储空间,并且由于其快速的解压速度,对于大规模数据处理任务来说是非常有利的。以下是关于LZO压缩的项目经验总结、思维导图描述以及Java代码示例。项目经验之LZO压缩LZO的优势快速解压:LZO算法设计时优先考虑了解压速度,
面试之《前端开发者如何优化页面的加载时间?》
只会写Bug的程序员
面试 面试 前端
前端开发者可以从多个方面入手优化页面的加载时间,以下是一些常见且有效的方法:优化资源加载压缩资源文件:对HTML、CSS、JavaScript文件进行压缩,去除不必要的空格、注释等,减小文件体积,加快下载速度。例如使用uglify-js压缩JavaScript文件,cssnano压缩CSS文件。优化图片:对图片进行压缩处理,降低图片的分辨率、色彩深度或采用更高效的图片格式(如WebP)。同时,根据
计算机视觉与机器学习之文档解析与向量化技术加速多模态大模型训练与应用——文件向量化大模型!
知世不是芝士
计算机视觉 人工智能 大语言模型 ai大模型 多模态大模型 机器学习 LLM
目录前言1、TextIn文档解析技术1.1、文档解析技术1.2、目前存在的问题1.2.1、不规则的文档信息示例1.3、合合信息的文档解析1.3.1、合合信息的TextIn文档解析技术架构1.3.2、版面分析关键技术Layout-engine1.3.3、文档树提取关键技术Catalog-engine1.3.4、双栏1.3.5、非对称双栏1.3.6、双栏+表格1.3.7、无线表格1.3.8、合并单元格
《AI大模型开发笔记》——提示词工程
Richard Chijq
AI大模型开发笔记 前端 服务器 运维
1.什么是提示工程提示工程(PromptEngineering),也被称为上下文学习,是指通过精心设计的提示技术来引导LLM行为,而无需更改模型权重。其目标是使模型输出与给定任务的人类意图一致。提示工程帮助用户控制语言模型输出,生成适合的特定需求。提示调整提供了对模型行为的直观控制,但对提示的确切措辞和设计敏感,因此需要精心制定的准则以实现期望的结果。2.提示工程的原则2.1.给模型清晰指令:
OED下载助手地址
凉风听雪
学习笔记 下载器
ODEv0.8.9官方版(自窝挖坑多功能生态应用)|克隆窝ODE易称"窝的",是窝头将以多功能生态为主扩展开发的应用,会随时间发展慢慢堆积些有的没的功能,主要用于自窝学习,也希望能帮到大家。下载地址:克隆窝高速下载A点https://www.uy5.net/ode/
计算机复试面试题总结
m0_67400972
面试 学习路线 阿里巴巴 android 前端 后端
时隔两年,重新完善一下以前写的东西:更新!!!!1.c++,408,设计模式,编程技巧,开源框架(适合cpp后端开发)2.数据结构与算法面试题3.c++与STL面试题4.计算机网络面试题面试问题之编程语言1。C++的特点是什么?封装,继承,多态。支持面向对象和面向过程的开发。2.C++的异常处理机制?抛出异常和捕捉异常进行处理。(实际开发)3.c和c++,java的区别c是纯过程,c++是对象加过
瑞芯微RK安卓Android主板GPIO按键配置方法,触觉智能嵌入式开发
Industio_触觉智能
嵌入式开发 RK3562 RK3568 RK3566 串口调试 开发板外设
触觉智能分享,瑞芯微RK安卓Android主板GPIO按键配置方法,方便大家更好利用空闲IO!由触觉智能PurplePiOH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,树莓派卡片电脑设计,支持安卓Android、开源鸿蒙OpenHarmony、Linux多系统,适合嵌入式开发入门学习。设备树修改空闲IO选择由下图可得当前IO是主板上一个没有用到的IO,对应的GPIO为:GPIO4_A4。设
ArcGIS学习教程视频含ArcMap/ArcCatalog(二狮兄)的简介和目录部分免费
weixin_37545874
arcgis gis
ArcGIS学习教程视频含ArcMap/ArcCatalog(二狮兄)的简介和目录部分免费适用人群ArcGIS目前的应用范围非常广泛,包括但不限于从事地理景观、生态环境、规划设计相关的人员,如教师、科研人员、学生等等。课程概述课程分为上中下三部,已全部录制完毕,全部课程120节。在线观看地址见下面目录。课程特征1,没有多余的闲话。大家观看免费试学即可发现,没有纯口头ppt干讲,全部为软件技术实操。
Hutool - Script:脚本执行封装,以 JavaScript 为例
五行星辰
业务系统应用技术 javascript 开发语言 java 后端
一、简介在Java开发中,有时需要动态执行脚本代码,比如JavaScript脚本,来实现一些灵活的业务逻辑,如动态规则计算、数据处理等。Java本身提供了javax.script包来支持脚本执行,但使用起来较为繁琐。Hutool-Script模块对Java的脚本执行功能进行了封装,提供了更简洁易用的API,让开发者可以方便地执行各种脚本,这里主要介绍JavaScript脚本的执行。二、引入依赖如果
springboot习题
苍曦
java 开发语言
第1章一、填空题1.Pivotal团队在原有Spring框架的基础上开发了全新的SpringBoot框架。2.SpringBoot框架在开发过程中大量使用约定优先配置的思想来摆脱框架中各种复杂的手动配置。3.SpringBoot2.1.3版本要求Java8及以上版本的支持。4.SpringBoot2.1.3版本框架官方声明支持的第三方项目构建工具包括有Maven(3.3+)和Gradle(4.4+
Amazon SageMaker 批量转换中的 JSON 处理技巧
t0_54coder
json 个人开发
在使用AmazonSageMaker进行机器学习模型的批量转换时,我们经常会遇到一些配置和数据格式的问题。今天我们来讨论一个常见的困扰:如何处理在MultiRecord批量策略下JSON数据的解析错误。背景介绍AmazonSageMaker提供了强大的批量转换功能,允许我们对大量数据进行推理。这在处理大规模数据集时非常有用。然而,当我们尝试将批量策略从SingleRecord切换到MultiRec
knob UI插件使用
换个号韩国红果果
JavaScript jsonp knob
图形是用canvas绘制的
js代码
var paras = {
max:800,
min:100,
skin:'tron',//button type
thickness:.3,//button width
width:'200',//define canvas width.,canvas height
displayInput:'tr
Android+Jquery Mobile学习系列(5)-SQLite数据库
白糖_
JQuery Mobile
目录导航
SQLite是轻量级的、嵌入式的、关系型数据库,目前已经在iPhone、Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠。
因为Android已经集成了SQLite,所以开发人员无需引入任何JAR包,而且Android也针对SQLite封装了专属的API,调用起来非常快捷方便。
我也是第一次接触S
impala-2.1.2-CDH5.3.2
dayutianfei
impala
最近在整理impala编译的东西,简单记录几个要点:
根据官网的信息(https://github.com/cloudera/Impala/wiki/How-to-build-Impala):
1. 首次编译impala,推荐使用命令:
${IMPALA_HOME}/buildall.sh -skiptests -build_shared_libs -format
2.仅编译BE
${I
求二进制数中1的个数
周凡杨
java 算法 二进制
解法一:
对于一个正整数如果是偶数,该数的二进制数的最后一位是 0 ,反之若是奇数,则该数的二进制数的最后一位是 1 。因此,可以考虑利用位移、判断奇偶来实现。
public int bitCount(int x){
int count = 0;
while(x!=0){
if(x%2!=0){ /
spring中hibernate及事务配置
g21121
Hibernate
hibernate的sessionFactory配置:
<!-- hibernate sessionFactory配置 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<
log4j.properties 使用
510888780
log4j
log4j.properties 使用
一.参数意义说明
输出级别的种类
ERROR、WARN、INFO、DEBUG
ERROR 为严重错误 主要是程序的错误
WARN 为一般警告,比如session丢失
INFO 为一般要显示的信息,比如登录登出
DEBUG 为程序的调试信息
配置日志信息输出目的地
log4j.appender.appenderName = fully.qua
Spring mvc-jfreeChart柱图(2)
布衣凌宇
jfreechart
上一篇中生成的图是静态的,这篇将按条件进行搜索,并统计成图表,左面为统计图,右面显示搜索出的结果。
第一步:导包
第二步;配置web.xml(上一篇有代码)
建BarRenderer类用于柱子颜色
import java.awt.Color;
import java.awt.Paint;
import org.jfree.chart.renderer.category.BarR
我的spring学习笔记14-容器扩展点之PropertyPlaceholderConfigurer
aijuans
Spring3
PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是BeanFactoryPostProcessor接口的一个实现。关于BeanFactoryPostProcessor和BeanPostProcessor类似。我会在其他地方介绍。
PropertyPlaceholderConfigurer可以将上下文(配置文件)中的属性值放在另一个单独的标准java
maven 之 cobertura 简单使用
antlove
maven test unit cobertura report
1. 创建一个maven项目
2. 创建com.CoberturaStart.java
package com;
public class CoberturaStart {
public void helloEveryone(){
System.out.println("=================================================
程序的执行顺序
百合不是茶
JAVA执行顺序
刚在看java核心技术时发现对java的执行顺序不是很明白了,百度一下也没有找到适合自己的资料,所以就简单的回顾一下吧
代码如下;
经典的程序执行面试题
//关于程序执行的顺序
//例如:
//定义一个基类
public class A(){
public A(
设置session失效的几种方法
bijian1013
web.xml session失效 监听器
在系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁session。具体设置很简单,方法有三种:(1)在主页面或者公共页面中加入:session.setMaxInactiveInterval(900);参数900单位是秒,即在没有活动15分钟后,session将失效。这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。所
java jvm常用命令工具
bijian1013
java jvm
一.概述
程序运行中经常会遇到各种问题,定位问题时通常需要综合各种信息,如系统日志、堆dump文件、线程dump文件、GC日志等。通过虚拟机监控和诊断工具可以帮忙我们快速获取、分析需要的数据,进而提高问题解决速度。 本文将介绍虚拟机常用监控和问题诊断命令工具的使用方法,主要包含以下工具:
&nbs
【Spring框架一】Spring常用注解之Autowired和Resource注解
bit1129
Spring常用注解
Spring自从2.0引入注解的方式取代XML配置的方式来做IOC之后,对Spring一些常用注解的含义行为一直处于比较模糊的状态,写几篇总结下Spring常用的注解。本篇包含的注解有如下几个:
Autowired
Resource
Component
Service
Controller
Transactional
根据它们的功能、目的,可以分为三组,Autow
mysql 操作遇到safe update mode问题
bitray
update
我并不知道出现这个问题的实际原理,只是通过其他朋友的博客,文章得知的一个解决方案,目前先记录一个解决方法,未来要是真了解以后,还会继续补全.
在mysql5中有一个safe update mode,这个模式让sql操作更加安全,据说要求有where条件,防止全表更新操作.如果必须要进行全表操作,我们可以执行
SET
nginx_perl试用
ronin47
nginx_perl试用
因为空闲时间比较多,所以在CPAN上乱翻,看到了nginx_perl这个项目(原名Nginx::Engine),现在托管在github.com上。地址见:https://github.com/zzzcpan/nginx-perl
这个模块的目的,是在nginx内置官方perl模块的基础上,实现一系列异步非阻塞的api。用connector/writer/reader完成类似proxy的功能(这里
java-63-在字符串中删除特定的字符
bylijinnan
java
public class DeleteSpecificChars {
/**
* Q 63 在字符串中删除特定的字符
* 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
* 例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
*/
public static voi
EffectiveJava--创建和销毁对象
ccii
创建和销毁对象
本章内容:
1. 考虑用静态工厂方法代替构造器
2. 遇到多个构造器参数时要考虑用构建器(Builder模式)
3. 用私有构造器或者枚举类型强化Singleton属性
4. 通过私有构造器强化不可实例化的能力
5. 避免创建不必要的对象
6. 消除过期的对象引用
7. 避免使用终结方法
1. 考虑用静态工厂方法代替构造器
类可以通过
[宇宙时代]四边形理论与光速飞行
comsci
从四边形理论来推论 为什么光子飞船必须获得星光信号才能够进行光速飞行?
一组星体组成星座 向空间辐射一组由复杂星光信号组成的辐射频带,按照四边形-频率假说 一组频率就代表一个时空的入口
那么这种由星光信号组成的辐射频带就代表由这些星体所控制的时空通道,该时空通道在三维空间的投影是一
ubuntu server下python脚本迁移数据
cywhoyi
python Kettle pymysql cx_Oracle ubuntu server
因为是在Ubuntu下,所以安装python、pip、pymysql等都极其方便,sudo apt-get install pymysql,
但是在安装cx_Oracle(连接oracle的模块)出现许多问题,查阅相关资料,发现这边文章能够帮我解决,希望大家少走点弯路。http://www.tbdazhe.com/archives/602
1.安装python
2.安装pip、pymysql
Ajax正确但是请求不到值解决方案
dashuaifu
Ajax async
Ajax正确但是请求不到值解决方案
解决方案:1 . async: false , 2. 设置延时执行js里的ajax或者延时后台java方法!!!!!!!
例如:
$.ajax({ &
windows安装配置php+memcached
dcj3sjt126com
PHP Install memcache
Windows下Memcached的安装配置方法
1、将第一个包解压放某个盘下面,比如在c:\memcached。
2、在终端(也即cmd命令界面)下输入 'c:\memcached\memcached.exe -d install' 安装。
3、再输入: 'c:\memcached\memcached.exe -d start' 启动。(需要注意的: 以后memcached将作为windo
iOS开发学习路径的一些建议
dcj3sjt126com
ios
iOS论坛里有朋友要求回答帖子,帖子的标题是: 想学IOS开发高阶一点的东西,从何开始,然后我吧啦吧啦回答写了很多。既然敲了那么多字,我就把我写的回复也贴到博客里来分享,希望能对大家有帮助。欢迎大家也到帖子里讨论和分享,地址:http://bbs.csdn.net/topics/390920759
下面是我回复的内容:
结合自己情况聊下iOS学习建议,
Javascript闭包概念
fanfanlovey
JavaScript 闭包
1.参考资料
http://www.jb51.net/article/24101.htm
http://blog.csdn.net/yn49782026/article/details/8549462
2.内容概述
要理解闭包,首先需要理解变量作用域问题
内部函数可以饮用外面全局变量
var n=999;
functio
yum安装mysql5.6
haisheng
mysql
1、安装http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
2、yum install mysql
3、yum install mysql-server
4、vi /etc/my.cnf 添加character_set_server=utf8
po/bo/vo/dao/pojo的详介
IT_zhlp80
java BO VO DAO POJO po
JAVA几种对象的解释
PO:persistant object持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作.
VO:value object值对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可
java设计模式
kerryg
java 设计模式
设计模式的分类:
一、 设计模式总体分为三大类:
1、创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。
2、结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
3、行为型模式(11种):策略模式,模版方法模式,观察者模式,迭代子模式,责任链模式,命令模式,备忘录模式,状态模式,访问者
[1]CXF3.1整合Spring开发webservice——helloworld篇
木头.java
spring webservice CXF
Spring 版本3.2.10
CXF 版本3.1.1
项目采用MAVEN组织依赖jar
我这里是有parent的pom,为了简洁明了,我直接把所有的依赖都列一起了,所以都没version,反正上面已经写了版本
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht
Google 工程师亲授:菜鸟开发者一定要投资的十大目标
qindongliang1922
工作 感悟 人生
身为软件开发者,有什么是一定得投资的? Google 软件工程师 Emanuel Saringan 整理了十项他认为必要的投资,第一项就是身体健康,英文与数学也都是必备能力吗?来看看他怎么说。(以下文字以作者第一人称撰写)) 你的健康 无疑地,软件开发者是世界上最久坐不动的职业之一。 每天连坐八到十六小时,休息时间只有一点点,绝对会让你的鲔鱼肚肆无忌惮的生长。肥胖容易扩大罹患其他疾病的风险,
linux打开最大文件数量1,048,576
tianzhihehe
c linux
File descriptors are represented by the C int type. Not using a special type is often considered odd, but is, historically, the Unix way. Each Linux process has a maximum number of files th
java语言中PO、VO、DAO、BO、POJO几种对象的解释
衞酆夼
java VO BO POJO po
PO:persistant object持久对象
最形象的理解就是一个PO就是数据库中的一条记录。好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。
BO:business object业务对象
封装业务逻辑的java对象