针对一个系统的权限管理这样的业务场景,使用各设计模式解说
通义灵码
下面将介绍如何在Java中使用不同的设计模式来实现权限管理系统。每个设计模式都有其特定的应用场景和实现方式,我们将逐一讲解。
1. 单例模式 (Singleton Pattern)
应用场景:确保权限管理服务在整个系统中只有一个实例,避免重复创建和资源浪费。
实现方式:
java
public class PermissionService { private static PermissionService instance; private Map<String, User> users; private PermissionService() { users = new HashMap<>(); } public static PermissionService getInstance() { if (instance == null) { synchronized (PermissionService.class) { if (instance == null) { instance = new PermissionService(); } } } return instance; } public void addUser(User user) { users.put(user.getId(), user); } public User getUser(String id) { return users.get(id); } // 其他权限管理方法 } class User { private String id; private String role; public User(String id, String role) { this.id = id; this.role = role; } public String getId() { return id; } public String getRole() { return role; } }
2. 工厂方法模式 (Factory Method Pattern)
应用场景:根据不同类型的用户创建不同的权限对象。
实现方式:
java
interface Permission { boolean checkAccess(Resource resource); } class AdminPermission implements Permission { @Override public boolean checkAccess(Resource resource) { return true; // 管理员有所有权限 } } class UserPermission implements Permission { @Override public boolean checkAccess(Resource resource) { return resource.isPublic(); // 用户只能访问公开资源 } } abstract class PermissionFactory { abstract Permission createPermission(String type); } class ConcretePermissionFactory extends PermissionFactory { @Override Permission createPermission(String type) { if ("admin".equals(type)) { return new AdminPermission(); } else if ("user".equals(type)) { return new UserPermission(); } return null; } } class Resource { private boolean isPublic; public Resource(boolean isPublic) { this.isPublic = isPublic; } public boolean isPublic() { return isPublic; } }
3. 抽象工厂模式 (Abstract Factory Pattern)
应用场景:创建一系列相关的权限对象,例如不同角色的权限集合。
实现方式:
java
interface PermissionFactory { Permission createUserPermission(); Permission createAdminPermission(); } class ConcretePermissionFactory implements PermissionFactory { @Override public Permission createUserPermission() { return new UserPermission(); } @Override public Permission createAdminPermission() { return new AdminPermission(); } } class UserPermission implements Permission { @Override public boolean checkAccess(Resource resource) { return resource.isPublic(); // 用户只能访问公开资源 } } class AdminPermission implements Permission { @Override public boolean checkAccess(Resource resource) { return true; // 管理员有所有权限 } } class Resource { private boolean isPublic; public Resource(boolean isPublic) { this.isPublic = isPublic; } public boolean isPublic() { return isPublic; } }
4. 建造者模式 (Builder Pattern)
应用场景:逐步构建复杂的权限配置,例如多角色、多权限的组合。
实现方式:
java
class PermissionBuilder { private List<Permission> permissions; public PermissionBuilder() { permissions = new ArrayList<>(); } public PermissionBuilder addAdminPermission() { permissions.add(new AdminPermission()); return this; } public PermissionBuilder addUserPermission() { permissions.add(new UserPermission()); return this; } public CompositePermission build() { return new CompositePermission(permissions); } } class CompositePermission implements Permission { private List<Permission> permissions; public CompositePermission(List<Permission> permissions) { this.permissions = permissions; } @Override public boolean checkAccess(Resource resource) { for (Permission permission : permissions) { if (permission.checkAccess(resource)) { return true; } } return false; } } class UserPermission implements Permission { @Override public boolean checkAccess(Resource resource) { return resource.isPublic(); // 用户只能访问公开资源 } } class AdminPermission implements Permission { @Override public boolean checkAccess(Resource resource) { return true; // 管理员有所有权限 } } class Resource { private boolean isPublic; public Resource(boolean isPublic) { this.isPublic = isPublic; } public boolean isPublic() { return isPublic; } }
5. 适配器模式 (Adapter Pattern)
应用场景:将现有的权限管理系统适配到新的系统中,例如将旧版的权限管理适配到新版的系统中。
实现方式:
java
interface NewPermissionSystem { boolean checkAccess(User user, Resource resource); } class OldPermissionSystem { public boolean checkAccess(User user, Resource resource) { // 旧版权限检查逻辑 return "admin".equals(user.getRole()) || resource.isPublic(); } } class NewPermissionSystemAdapter implements NewPermissionSystem { private OldPermissionSystem oldSystem; public NewPermissionSystemAdapter(OldPermissionSystem oldSystem) { this.oldSystem = oldSystem; } @Override public boolean checkAccess(User user, Resource resource) { return oldSystem.checkAccess(user, resource); } } class User { private String name; private String role; public User(String name, String role) { this.name = name; this.role = role; } public String getName() { return name; } public String getRole() { return role; } } class Resource { private boolean isPublic; public Resource(boolean isPublic) { this.isPublic = isPublic; } public boolean isPublic() { return isPublic; } }
6. 装饰器模式 (Decorator Pattern)
应用场景:在不改变原有权限检查逻辑的情况下,动态添加新的权限检查逻辑,例如日志记录。
实现方式:
java
interface PermissionChecker { boolean checkAccess(User user, Resource resource); } class BasePermissionChecker implements PermissionChecker { @Override public boolean checkAccess(User user, Resource resource) { return "admin".equals(user.getRole()) || resource.isPublic(); } } class LoggingPermissionChecker implements PermissionChecker { private PermissionChecker checker; public LoggingPermissionChecker(PermissionChecker checker) { this.checker = checker; } @Override public boolean checkAccess(User user, Resource resource) { boolean result = checker.checkAccess(user, resource); System.out.println("Access check for " + user.getName() + " on " + resource.getName() + ": " + result); return result; } } class User { private String name; private String role; public User(String name, String role) { this.name = name; this.role = role; } public String getName() { return name; } public String getRole() { return role; } } class Resource { private String name; private boolean isPublic; public Resource(String name, boolean isPublic) { this.name = name; this.isPublic = isPublic; } public String getName() { return name; } public boolean isPublic() { return isPublic; } }
7. 观察者模式 (Observer Pattern)
应用场景:当用户的权限发生变化时,通知相关的系统模块进行更新。
实现方式:
java
import java.util.ArrayList; import java.util.List; interface Observer { void update(User user); } class Subject { private List<Observer> observers = new ArrayList<>(); public void addObserver(Observer observer) { observers.add(observer); } public void removeObserver(Observer observer) { observers.remove(observer); } public void notifyObservers(User user) { for (Observer observer : observers) { observer.update(user); } } } class User { private String name; private String role; public User(String name, String role) { this.name = name; this.role = role; } public String getName() { return name; } public String getRole() { return role; } public void changeRole(String newRole) { this.role = newRole; subject.notifyObservers(this); } private Subject subject = new Subject(); public void addObserver(Observer observer) { subject.addObserver(observer); } public void removeObserver(Observer observer) { subject.removeObserver(observer); } } class Logger implements Observer { @Override public void update(User user) { System.out.println(user.getName() + " changed role to " + user.getRole()); } } public class Main { public static void main(String[] args) { User user = new User("Alice", "user"); Logger logger = new Logger(); user.addObserver(logger); user.changeRole("admin"); } }
8. 策略模式 (Strategy Pattern)
应用场景:根据不同类型的资源或操作,选择不同的权限检查策略。
实现方式:
java
interface PermissionStrategy { boolean checkAccess(User user, Resource resource); } class AdminStrategy implements PermissionStrategy { @Override public boolean checkAccess(User user, Resource resource) { return "admin".equals(user.getRole()); } } class PublicStrategy implements PermissionStrategy { @Override public boolean checkAccess(User user, Resource resource) { return resource.isPublic(); } } class PermissionContext { private PermissionStrategy strategy; public PermissionContext(PermissionStrategy strategy) { this.strategy = strategy; } public void setStrategy(PermissionStrategy strategy) { this.strategy = strategy; } public boolean checkAccess(User user, Resource resource) { return strategy.checkAccess(user, resource); } } class User { private String name; private String role; public User(String name, String role) { this.name = name; this.role = role; } public String getRole() { return role; } } class Resource { private String name; private boolean isPublic; public Resource(String name, boolean isPublic) { this.name = name; this.isPublic = isPublic; } public boolean isPublic() { return isPublic; } } public class Main { public static void main(String[] args) { PermissionContext context = new PermissionContext(new AdminStrategy()); System.out.println(context.checkAccess(new User("Alice", "admin"), new Resource("Document", false))); // true context.setStrategy(new PublicStrategy()); System.out.println(context.checkAccess(new User("Bob", "user"), new Resource("Document", true))); // true System.out.println(context.checkAccess(new User("Bob", "user"), new Resource("Document", false))); // false } }
9. 责任链模式 (Chain of Responsibility Pattern)
应用场景:通过一系列的权限检查器依次检查权限,直到某个检查器通过或全部失败。
实现方式:
java
abstract class PermissionHandler { protected PermissionHandler successor; public void setSuccessor(PermissionHandler successor) { this.successor = successor; } public boolean handle(User user, Resource resource) { if (checkAccess(user, resource)) { return true; } if (successor != null) { return successor.handle(user, resource); } return false; } abstract boolean checkAccess(User user, Resource resource); } class AdminHandler extends PermissionHandler { @Override boolean checkAccess(User user, Resource resource) { return "admin".equals(user.getRole()); } } class PublicHandler extends PermissionHandler { @Override boolean checkAccess(User user, Resource resource) { return resource.isPublic(); } } class User { private String name; private String role; public User(String name, String role) { this.name = name; this.role = role; } public String getRole() { return role; } } class Resource { private String name; private boolean isPublic; public Resource(String name, boolean isPublic) { this.name = name; this.isPublic = isPublic; } public boolean isPublic() { return isPublic; } } public class Main { public static void main(String[] args) { AdminHandler adminHandler = new AdminHandler(); PublicHandler publicHandler = new PublicHandler(); adminHandler.setSuccessor(publicHandler); System.out.println(adminHandler.handle(new User("Alice", "admin"), new Resource("Document", false))); // true System.out.println(adminHandler.handle(new User("Bob", "user"), new Resource("Document", true))); // true System.out.println(adminHandler.handle(new User("Bob", "user"), new Resource("Document", false))); // false } }
10. 状态模式 (State Pattern)
应用场景:根据用户的不同状态(例如登录状态、角色状态)来决定权限检查的逻辑。
实现方式:
java
interface State { boolean checkAccess(Resource resource); } class LoggedInState implements State { @Override public boolean checkAccess(Resource resource) { return resource.isPublic(); } } class AdminState implements State { @Override public boolean checkAccess(Resource resource) { return true; } } class User { private String name; private State state; public User(String name, State state) { this.name = name; this.state = state; } public void setState(State state) { this.state = state; } public boolean checkAccess(Resource resource) { return state.checkAccess(resource); } } class Resource { private String name; private boolean isPublic; public Resource(String name, boolean isPublic) { this.name = name; this.isPublic = isPublic; } public boolean isPublic() { return isPublic; } } public class Main { public static void main(String[] args) { User user = new User("Alice", new LoggedInState()); System.out.println(user.checkAccess(new Resource("Document", true))); // true user.setState(new AdminState()); System.out.println(user.checkAccess(new Resource("Document", false))); // true } }
11. 中介者模式 (Mediator Pattern)
应用场景:协调多个权限管理模块之间的交互,例如用户认证、角色分配、权限检查等。
实现方式:
java
interface Mediator { boolean authenticate(User user, String password); boolean checkAccess(User user, Resource resource); } class PermissionMediator implements Mediator { private AuthService authService; private RoleService roleService; private PermissionService permissionService; public PermissionMediator(AuthService authService, RoleService roleService, PermissionService permissionService) { this.authService = authService; this.roleService = roleService; this.permissionService = permissionService; } @Override public boolean authenticate(User user, String password) { if (authService.authenticate(user, password)) { roleService.assignRole(user); return true; } return false; } @Override public boolean checkAccess(User user, Resource resource) { String role = roleService.getRole(user); return permissionService.checkAccess(role, resource); } } class AuthService { public boolean authenticate(User user, String password) { // 认证逻辑 return user.getPassword().equals(password); } } class RoleService { public void assignRole(User user) { // 分配角色逻辑 user.setRole("user"); } public String getRole(User user) { return user.getRole(); } } class PermissionService { public boolean checkAccess(String role, Resource resource) { // 权限检查逻辑 return "admin".equals(role) || resource.isPublic(); } } class User { private String name; private String password; private String role; public User(String name, String password) { this.name = name; this.password = password; } public String getPassword() { return password; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } } class Resource { private String name; private boolean isPublic; public Resource(String name, boolean isPublic) { this.name = name; this.isPublic = isPublic; } public boolean isPublic() { return isPublic; } } public class Main { public static void main(String[] args) { AuthService authService = new AuthService(); RoleService roleService = new RoleService(); PermissionService permissionService = new PermissionService(); PermissionMediator mediator = new PermissionMediator(authService, roleService, permissionService); User user = new User("Alice", "password"); if (mediator.authenticate(user, "password")) { System.out.println(mediator.checkAccess(user, new Resource("Document", true))); // true } } }
12. 备忘录模式 (Memento Pattern)
应用场景:记录用户权限的状态,以便在需要时恢复到之前的权限状态。
实现方式:
java
class User { private String name; private String role; public User(String name, String role) { this.name = name; this.role = role; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } public Memento createMemento() { return new Memento(role); } public void restoreMemento(Memento memento) { this.role = memento.getRole(); } } class Memento { private String role; public Memento(String role) { this.role = role; } public String getRole() { return role; } } public class Main { public static void main(String[] args) { User user = new User("Alice", "user"); System.out.println(user.getRole()); //
文兴快码
在设计一个系统的权限管理时,可以使用多种设计模式来优化系统结构、增强系统的可扩展性和可维护性。以下是根据提供的背景知识,针对权限管理系统中可能用到的几种设计模式及其解说:
1. 策略模式(Strategy Pattern)
解说: 策略模式定义了一系列算法,并将每一个算法封装起来,使它们可以互换。在权限管理中,可以使用策略模式来处理不同类型的权限验证逻辑。例如,对于页面权限、操作权限和数据权限,可以分别设计不同的验证策略,然后在运行时根据具体需求选择合适的策略进行验证。
代码示例(伪代码):
Java
interface PermissionStrategy { boolean validate(User user, Resource resource); } class PagePermissionStrategy implements PermissionStrategy { @Override public boolean validate(User user, Resource resource) { // 页面权限验证逻辑 return user.hasPagePermission(resource); } } class OperationPermissionStrategy implements PermissionStrategy { @Override public boolean validate(User user, Resource resource) { // 操作权限验证逻辑 return user.hasOperationPermission(resource); } } class PermissionChecker { private PermissionStrategy strategy; public void setStrategy(PermissionStrategy strategy) { this.strategy = strategy; } public boolean checkPermission(User user, Resource resource) { return strategy.validate(user, resource); } }
2. 观察者模式(Observer Pattern)
解说: 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。在权限管理系统中,可以使用观察者模式来监听用户权限的变化,并通知相关的组件进行更新。
代码示例(伪代码):
Java
interface PermissionObserver { void update(User user, PermissionChange change); } class PermissionManager implements PermissionObserver { @Override public void update(User user, PermissionChange change) { // 更新权限逻辑 if (change.getType() == PermissionChangeType.GRANT) { grantPermission(user, change.getPermission()); } else if (change.getType() == PermissionChangeType.REVOKE) { revokePermission(user, change.getPermission()); } } } class PermissionSubject { private List<PermissionObserver> observers = new ArrayList<>(); public void addObserver(PermissionObserver observer) { observers.add(observer); } public void removeObserver(PermissionObserver observer) { observers.remove(observer); } public void notifyObservers(User user, PermissionChange change) { for (PermissionObserver observer : observers) { observer.update(user, change); } } }
3. 工厂模式(Factory Pattern)
解说: 工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在权限管理系统中,可以使用工厂模式来创建不同类型的权限对象,例如页面权限、操作权限和数据权限对象。
代码示例(伪代码):
Java
interface Permission { void validate(User user, Resource resource); } class PagePermission implements Permission { @Override public void validate(User user, Resource resource) { // 页面权限验证逻辑 } } class OperationPermission implements Permission { @Override public void validate(User user, Resource resource) { // 操作权限验证逻辑 } } class PermissionFactory { public static Permission createPermission(PermissionType type) { switch (type) { case PAGE: return new PagePermission(); case OPERATION: return new OperationPermission(); default: throw new IllegalArgumentException("Unsupported permission type"); } } }
4. 代理模式(Proxy Pattern)
解说: 代理模式为其他对象提供一个代理或占位符,以控制对这个对象的访问。在权限管理系统中,可以使用代理模式来代理用户的操作,以便在操作执行前后添加额外的权限验证逻辑。
代码示例(伪代码):
Java
interface UserService { void performOperation(User user, Operation operation); } class RealUserService implements UserService { @Override public void performOperation(User user, Operation operation) { // 执行实际的操作逻辑 } } class PermissionProxyService implements UserService { private RealUserService realService; public PermissionProxyService(RealUserService realService) { this.realService = realService; } @Override public void performOperation(User user, Operation operation) { if (hasPermission(user, operation)) { realService.performOperation(user, operation); } else { throw new PermissionDeniedException("Permission denied"); } } private boolean hasPermission(User user, Operation operation) { // 权限验证逻辑 return true; // 示例代码,实际应实现具体的验证逻辑 } }
5. 装饰者模式(Decorator Pattern)
解说: 装饰者模式允许向一个现有的对象添加新的功能,同时又不改变其结构。在权限管理系统中,可以使用装饰者模式来增强用户对象的功能,例如添加一个权限检查器装饰器来检查用户的权限。
代码示例(伪代码):
Java
interface User { void performAction(); } class RealUser implements User { @Override public void performAction() { // 执行用户操作 } } class PermissionCheckerDecorator implements User { private User user; public PermissionCheckerDecorator(User user) { this.user = user; } @Override public void performAction() { if (hasPermission()) { user.performAction(); } else { throw new PermissionDeniedException("Permission denied"); } } private boolean hasPermission() { // 权限验证逻辑 return true; // 示例代码,实际应实现具体的验证逻辑 } }
通过以上几种设计模式的应用,可以构建出一个灵活、可扩展且易于维护的权限管理系统。这些设计模式不仅有助于优化代码结构,还能提高系统的可重用性和可测试性。
相关文章:
针对一个系统的权限管理这样的业务场景,使用各设计模式解说
通义灵码 下面将介绍如何在Java中使用不同的设计模式来实现权限管理系统。每个设计模式都有其特定的应用场景和实现方式,我们将逐一讲解。 1. 单例模式 (Singleton Pattern) 应用场景:确保权限管理服务在整个系统中只有一个实例,避免重复创…...
Android AppCompatImageView View.Gone状态切换到View.VISIBLE重新layout,Kotlin
Android AppCompatImageView View.Gone状态切换到View.VISIBLE重新layout,Kotlin import android.content.Context import android.util.AttributeSet import android.util.Log import androidx.appcompat.widget.AppCompatImageViewclass MyImageView : AppCompatI…...

在云上轻松部署达梦数据库
达梦数据库(DM Database)是由达梦数据库有限公司开发的一款关系型数据库管理系统(RDBMS)。作为国内领先的数据库产品,达梦数据库在政府、金融、能源、电信、交通、医疗、教育等多个行业得到广泛应用,尤其在…...
什么是厄尔米特(Hermitian)矩阵?
厄米矩阵(Hermitian Matrix)定义 在数学和物理中,厄米矩阵是满足以下条件的复方阵: A A † \mathbf{A}\mathbf{A}^\dagger AA† 其中, A † \mathbf{A}^\dagger A†表示矩阵 A \mathbf{A} A的共轭转置,即…...

React - useActionState、useFormStatus与表单处理
参考文档:react18.3.1官方文档 一些概念: React 的 Canary 和 Experimental 频道是 React 团队用于发布和测试新功能的渠道。 useActionState useActionState 是一个可以根据某个表单动作的结果更新 state 的 Hook。 const [state, formAction, isPe…...
v3账号密码登录随机图片验证码
安装插件 pnpm i identify --save图形验证码组件 <template><div class"s-canvas"><!-- 图形验证码的宽和高都来自于父组件的传值,若父组件没有传值,那么就按当前子组件的默认值进行渲染 --><canvas id"s-canvas&…...

不只是请求和响应:使用Fiddler解读Cookie与状态码全指南(下)
欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! 不只是请求和响应:使用Fiddler抓包HTTP协议全指南(上)_fiddler 获取响应脚本-CSDN博客https://blog.csdn.net/Chunfeng6yugan/article/details/144005872?spm1001.2014.3001.5501 不只是请求和响…...

java+springboot+mysql游乐园管理系统
项目介绍: 使用javaspringbootmysql开发的游乐园管理系统,系统包含管理员、员工、用户角色,功能如下: 管理员:登录后台;首页数据统计;员工管理;用户管理;游乐项目管理&…...
@RequestBody,getparameter,@RequestParam,@PathVariable之间的区别和联系
RequestBody、RequestParam、PathVariable和getParameter(你提到的可能是Java Servlet API中的方法)是用于处理HTTP请求参数的不同机制。它们各自有不同的用途和适用场景,下面将详细解释它们之间的区别和联系。 1. RequestBody 用途…...

Linx下自动化之路:Redis安装包一键安装脚本实现无网极速部署并注册成服务
目录 简介 安装包下载 安装脚本 服务常用命令 简介 通过一键安装脚本实现 Redis 安装包的无网极速部署,并将其成功注册为系统服务,开机自启。 安装包下载 redis-7.0.8.tar.gzhttp://download.redis.io/releases/redis-7.0.8.tar.gz 安装脚本 修…...

VMware虚拟机搭建和镜像配置
VMware虚拟机搭建和镜像配置 下载安装VMware 开始下载 更改安装路径,需要一个大空间的盘 更改后下一步 下一步后,选择不主动升级更新 一直下一步 直到安装完毕 输入许可密钥,我下载的版本是12,输入完成点击输入ÿ…...

红日靶场vulnstark 4靶机的测试报告[细节](一)
目录 一、测试环境 1、系统环境 2、注意事项 3、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、漏洞利用Getshell ①Struts 2 s2-045漏洞 手工利用s2-45漏洞 Msf综合利用 ②Tomcat框架(CVE-2017-12615) ③phpMyAdmin(CVE-2018-12613) 构造语句写入冰蝎木…...
深入详解人工智能机器学习常见算法——线性回归算法
深入解析线性回归算法 线性回归是机器学习和统计学中最基本、最常用的预测建模技术之一。它通过线性关系描述因变量与一个或多个自变量之间的联系,帮助我们进行数据建模和预测。本篇文章将详细介绍线性回归的基础知识、算法原理、核心概念、实现方法以及其在实际问题…...
Python 开发环境搭建
Python 开发环境搭建 flyfish 版本 Ubuntu 22.04.5 LTS PyTorch 2.5.1 cuda 12.4 python 3.12.7安装 Anaconda3 依赖 sudo apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6安装命令 …...
OpenCV相机标定与3D重建(9)相机标定函数calibrateCameraRO()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::calibrateCameraRO 是 OpenCV 中用于相机标定的函数,它允许固定某些点来进行更精确的标定。 函数原型 double cv::calibrateCa…...

flink终止提交给yarn的任务
接上文:一文说清flink从编码到部署上线 1.查看正在执行的flink 访问地址(参考):http://10.86.97.191:8099/cluster/apps 2.终止任务 yarn application -kill appID 本文为: yarn application -kill application_17…...
算法刷题Day14:BM36 判断是不是平衡二叉树
题目链接 描述 输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是…...

【Golang】Go语言编程思想(六):Channel,第一节,介绍Channel
Channel 下面的几个例子将会展示如何定义一个 channel: func chanDemo() {var c chan int // chan int 的含义是, c 是一个 channel, 里面的内容是 int// 上面的声明语句将会创建一个 nil channel, c nil, 它的作用将在 select 当// 中体现 }创建一个非 nil 的 c…...
【Flux.jl】 卷积神经网络
Flux.jl 是包含卷积神经网络的, 但是官方API文件中没有给出一个完整的程序框架, 只是对所需神经元给了局部解释, 此外对 model-zoo 模型动物园中的案例没有及时跟着 Flux.jl 的版本更新, 也无法运行出来结果。 因此本文搭建了一个完整可训练的卷积神经网络。 Conv 卷积算子…...

大模型在辅导场景的深度应用,猿辅导素养课推出启发性“AI作文通”
猿辅导集团旗下的飞象星球面向学校发布“飞象AI作文”,让教育大模型成为老师的AI批改助手、学生的写作助手。芥末堆注意到,猿辅导集团旗下的猿辅导素养课也推出了名为“AI作文通”的AI作文功能,已于7月正式大规模上线,在AI教育领域…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...