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

Shiro总结和常见面试题

Shiro总结和常见面试题一、 什么是shiroShiro是一个强大易用的java安全框架提供了认证、授权、加密、会话管理、与web集成、缓存等功能对于任何一个应用程序都可以提供全面的安全服务相比其他安全框架shiro要简单的多。二、 Shiro的核心概念Subject、SecurityManager、RealmSubject主体代表了当前“用户”这个用户不一定是一个具体的人与当前应用交互的任何东西都是Subject如爬虫、机器人等即一个抽象概念所有Subject都绑定到SecurityManager与Subject的所有交互都会委托给SecurityManager可以把Subject认为是一个门面SecurityManager才是实际的执行者。SecurityManager安全管理器即所有与安全有关的操作都会与SecurityManager交互且它管理着所有Subject可以看出它是shiro的核心, SecurityManager相当于spring mvc中的dispatcherServlet前端控制器。Realm域shiro从Realm获取安全数据(如用户、角色、权限)就是说SecurityManager要验证用户身份那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作可以把Realm看成DataSource即安全数据源。三、 Authentication 身份验证principals身份即主体的标识属性可以是任何东西如用户名、邮箱等唯一即可。credentials证明/凭证即只有主体知道的安全值如密码/数字证书等。身份认证流程首先调用Subject.login(token)进行登录其会自动委托给SecurityManager调用之前必须通过SecurityUtils.setSecurityManager()设置SecurityManager负责真正的身份验证逻辑它会委托给Authenticator进行身份验证Authenticator才是真正的身份验证者shiro api中核心的身份认证入口点此处可以自定义插入自己的实现Authenticator可能会委托给相应的AuthenticationStrategy进行多Realm身份验证默认ModularRealmAuthenticator会调用AuthenticationStrategy进行多Realm身份验证Authenticator会把相应的token传入Realm从Realm获取身份验证信息如果没有返回/抛出异常表示身份验证失败了。此处可以配置多个Realm将按照相应的顺序及策略进行访问。Authenticator及AuthenticationStrategyAuthenticator的职责是验证用户账号是shiro api中身份验证核心的入口点。AuthenticationStrategy 认证策略 ModularRealmAuthenticator默认使用AtLeastOneSuccessfulStrategy策略1 FirstSuccessfulStrategy只要有一个Realm验证成功即可只返回第一个Realm身份验证成功的认证信息其他的忽略2 AtLeastOneSuccessfulStrategy只要有一个Realm验证成功即可和FirstSuccessfulStrategy不同返回所有Realm身份验证成功的认证信息3 AllSuccessfulStrategy所有Realm验证成功才算成功且返回所有Realm身份验证成功的认证信息如果有一个失败就失败了。自定义实现认证时一般继承AbstractAuthenticationStrategy即可四、 Authorization 授权授权也叫访问控制即在应用中控制谁能访问哪些资源如访问页面/编辑数据/页面操作等。在授权中需了解的几个关键对象主体(Subject)、资源Resource、权限Permission、角色Role授权方式编程式通过写if/else授权代码完成Subject subject SecurityUtils.getSubject();If(subject.hasRole(“admin”){// 有权限}else{// 无权限}注解RequiresRoles(“admin”)public void helloWord(){// 有权限}Jsp/gsp标签shiro:hasRole name “admin”!—有权限 /shiro:hasRole基于资源的访问控制1 隐式角色硬编码的方式if/else粗粒度造成的问题如果有一天不需要了那么就需要修改相应代码把所有相关的地方进行删除显示角色规则资源标识符操作user:create,user:update这种方式叫资源级别的粒度好处如果需要修改都是一个资源级别的修改不会对其他模块代码产生影响粒度小但实现起来可能稍微复杂点需要维护“用户—角色角色—权限资源操作”之间的关系Permission字符串通配符权限规则资源标识符 : 操作 : 对象实例ID“:”表示资源/操作/实例的分割“,”表示操作的分割“*”表示任意资源/操作/实例单个资源多个权限Rolesystem:user:update,system:user:delete等价于rolesystem:user:update,delete但是反过来是规则不成立代码判断subject().checkPermissions(“system:user:update,delete”)单个资源全部权限rolesys:user:*/sys:user所有资源全部权限role*:viewsubject.checkPermissions(“user:view”);实例级别的权限单实多限role”user:update,delete:1”;subject().checkPermissions(”user:update,delete:1”);all实单限role”user:auth:”;subject().checkPermissions(“user:auth:1”, “user:auth:2”);all实all限role”user:?”;subject().checkPermissions(“user:view:1”, “user:auth:2”);授权流程首先调用Subject.isPermitted*/hasRole*接口其会委托给SecurityManager而SecurityManager接着会委托给AuthorizerAuthorizer是真正的授权者如果我们调用如isPermitted(“user:view”), 其首先会通过PermissionResolver把字符串转换成相应的Permission实例在进行授权之前其会调用相应的Realm获取Subject相应的角色/权限用于匹配传入的角色/权限Authorizer会判断Realm的角色/权限是否和传入的匹配如果有多个Realm会委托给ModularRealmAuthorizer进行循环判断如果匹配如isPermitted*/hasRole*会返回true, 否则返回false表示授权失败。篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、场景题、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc需要全套面试笔记及答案【点击此处即可/免费获取】​https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho五、 Cryptography 加密编码/解码Shiro提供了base64和16进制字符串编码/解码的API支持,方便一些编码解码操作Base64.encodeToString(str.getBytes())编码Base64.decodeToString(base64Encoded) 解码散列算法常见散列算法如MD5,SHA等首先创建一个DfaultHashService,默认使用SHA-512算法可以通过hashAlgorithmName属性修改算法可以通过privateSalt设置一个私盐其在散列时自动与用户传入的公盐混合产生一个新盐可以通过generatePublicSalt属性在用户没有传入公盐的情况下是否生成公盐可以设置randomNumberGenerator用于生成公盐可以设置hashIterations属性来修改默认加密迭代次数需要构建一个HashRequest,传入算法、数据、公盐、迭代次数。生成随机数SecureRandomNumberGenerator randomNumberGenerator new SecureRandomNumberGenerator();randomNumberGenerator.setSeed(“159”.getBytes());String hex randomNumberGenerator.nextBytes().toHex();加密/解密提供对称式加密/解密算法的支持如AES、Blowfish等PasswordService/CredentialsMatcher用于提供加密密码及验证密码服务Shiro默认提供了PasswordService实现DefaultPasswordService;CredentialsMatcher实现PasswordMatcher及HashedCredentialsMatcher(更强大)HashedCredentialsMatcher实现密码验证服务Shiro提供了CredentialsMatcher的散列实现HashedCredentialsMatcher,和PasswordMatcher不同的是它只是用于密码验证且可以提供自己的盐而不是随机生成盐且生成密码散列值的算法需要自己写因为能提供自己的盐六、 Realm 域定义Realm自定义Realm继承AuthorizingRealm即可UserRealm父类AuthorizingRealm将获取Subject相关信息分成两步获取身份验证信息doGetAuthenticationInfo及授权信息doGetAuthorizationInfodoGetAuthenticationInfo获取身份验证相关信息首先根据传入的用户名获取User信息如果user为空那么抛出没找到账号异常UnknownAccountExecption如果user找到但却被锁定了抛出锁定异常LockedAccountException最后生成AuthenticationInfo信息交给间接父类AuthenticatingRealm使用CredentialsMatcher进行判断密码是否匹配如果不匹配将抛出密码错误异常信息IncorrectCredentialsException如果密码重试次数太多将抛出超出重试次数异常ExcessiveAttemptsException在组装SimpleAuthenticationInfo信息时需要传入身份信息用户名、凭据密文密码、盐usernamesaltCredentialsMatcher使用盐加密传入的明文密码和此处的密文密码进行匹配。doGetAuthorizationInfo获取授权信息PrincipalCollection是一个身份集合因为只用到了一个Realm所以直接调用getPrimaryPrincipal得到之前传入的用户名即可然后根据用户名调用UserService接口获取角色及权限信息。AuthenticationInfo的两个作用如果Realm是AuthenticatingRealm子类则提供给AuthenticatingRealm内部使用的CredentialsMatcher进行凭据验证如果没有继承它需要在自己的Realm中实现验证提供给SecurityManager来创建Subject提供身份信息七、 拦截器基于表单登录拦截器onPreHandle主要流程首先判断是否已经登录过了如果已经登录过了继续拦截器链即可如果没有登录看看是否是登录请求如果是get方法的登录页面请求则继续拦截器链到请求页面否则如果是get方法的其他页面请求则保存当前请求并重定向到登录页面如果是post方法的登录页面表单提交请求则收集用户名/密码登录即可如果失败了保存错误消息到“shiroLoginFailure”并返回到登录页面如果登录成功了且之前有保存的请求则重定向到之前的这个请求否则到默认的成功页面。任意角色授权拦截器流程首先判断用户有没有任意角色如果没有返回false将到onAccessDenied进行处理如果用户没有角色接着判断用户有没有登录如果没有登录先重定向到登录如果用户没有角色且设置了未授权页面unauthorizedUrl那么重定向到未授权页面否则直接返回401未授权错误码。默认拦截器身份验证相关的authc 基于表单的拦截器即验证成功之后才能访问 /authcauthcBasic Basic HTTP身份验证拦截器主要属性applicationNamelogout 退出 /logoutlogoutuser 用户拦截器 /useranon 匿名拦截器一般用于静态资源过滤 /static/anon授权相关的roles 角色授权拦截器主要属性loginUrlunauthorizedUrl /admin/roles[admin]perms 权限授权拦截器 /user/**perms[“user:create”]port 端口拦截器主要属性: port(80) /testport[80]rest rest风格拦截器 /usersrest[user]会自动拼接出“user:read,user:create,user:update,user:delete”ssl ssl拦截器只有请求协议是https才能通过八、 Jsp标签导入标签库%taglib prefix“shiro” uri“http://shiro.apache.org/tags” %shiro:guest标签 匿名访问即游客访问信息shiro:user标签 用户已经身份验证/记住我登录后显示相应的信息shiro:authenticated 用户已经身份验证通过即Subject.login登录成功不是记住我loginshiro:notAuthenticated 未身份验证包括记住我shiro:principal/ 显示用户身份信息默认调用Subject.getPrincipal()获取shiro:principal type“java.lang.String”/相当于 Subject.getPrincipals().oneByType(String.class)。shiro:principal type“java.lang.String”/相当于 Subject.getPrincipals().oneByType(String.class)。shiro:principal property“username”/相当于 ((User)Subject.getPrincipals()).getUsername()。shiro:hasRole name”admin”/shiro:hasRole 当前用户拥有admin角色shiro:hasAnyRoles name”admin,user” 当前用户拥有admin/user角色shiro:lacksRole name”abc”/shiro:lacksRole 当前用户没有abc角色shiro:hasPermission name”user:create” 当前用户拥有权限user:createshiro:lacksPermission name”org:create” 当前用户没有权限org:create导入自定义标签%taglib prefix“zhang” tagdir/WEB-INF/tags %zhang:hasAllRoles name“admin,user” 用户[shiro:principal/]拥有角色admin和user/zhang:hasAllRoleszhang:hasAllPermissions name“user:create,user:update” 用户[shiro:principal/]拥有权限user:create和user:update/zhang:hasAllPermissions zhang:hasAnyPermissions name“user:create,abc:update” 用户[shiro:principal/]拥有权限user:create或abc:update/zhang:hasAnyPermissions\九、 Session Manager 会话管理Session所谓session即用户访问应用时保持的连接关系在多次交互中应用能够识别出当前访问的用户是谁且可以在多次交互中保存一些数据。Subject subject SecurityUtils.getSubject();Session session subject.getSession();session.getId(); // 获取当前session的唯一标识session.getHost(); // 获取当前Subject的主机地址该地址是通过HostAuthenticationToken.getHost()提供的session.getTimeOut(); // 获取超时时间session.setTimeOut(); // 设置超时时间不设置默认是全局过期时间session.touch(); // 更新最后访问时间session.stop(); // 销毁session当Subject.logout()时会自动调用stop方法来销毁会话。如果在web中调用javax.servlet.http.HttpSession.invalidate()也会自动调用shiro session.top方法进行销毁shiro的会话session.setAttribute(“key”,”123”); // 设置session属性session.getAttribute(“key”); // 获取session属性session.removeAttribute(“key”); // 删除属性注Shiro提供的会话可以用于javaSE/javaEE环境不依赖于任何底层容器可以独立使用是完整的会话模块。篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、场景题、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc需要全套面试笔记及答案【点击此处即可/免费获取】​https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1hoSession manager 会话管理器会话管理器管理着应用中所有Subject的会话的创建、维护、删除、失效、验证等工作。是Shiro的核心组件顶层组件SecurityManager直接继承了SessionManager且提供了SessionSecurityManager实现直接把会话管理委托给相应的SessionManager、DefaultSecurityManager及DefaultWebSecurityManager 默认SecurityManager都继承了SessionSecurityManager。Shiro提供了三个默认实现DefaultSessionManagerDefaultSecurityManager使用的默认实现用于JavaSE环境ServletContainerSessionManager: DefaultWebSecurityManager使用的默认实现用于Web环境其直接使用Servlet容器的会话DefaultWebSessionManager用于Web环境的实现可以替代ServletContainerSessionManager自己维护着会话直接废弃了Servlet容器的会话管理。十、shiro 注解1、RequiresAuthentication: 表示当前Subject已经通过login进行了身份验证即Subject.isAuthenticated() 返回 true2、RequiresUser: 表示当前Subject 已经身份验证或者通过记住我登录的3、RequiresGuest: 表示当前Subject没有身份验证或通过记住我登陆过即是游客身份4、RequiresRoles(value { “admin”, “user” }, logical Logical.AND): 表示当前 Subject 需要角色 admin和user5、RequiresPermissions(value { “user:a”, “user:b” }, logical Logical.OR): 表示当前 Subject 需要权限 user:a 或 user:b十一、shiro的优点1、 简单的身份验证支持多种数据源2、对角色的简单授权支持细粒度的授权方法3、支持一级缓存以提升应用程序的性能4、内置基于POJO的企业会话管理适用于web及非web环境5、非常简单的API加密6、不跟任何框架绑定可以独立运行

相关文章:

Shiro总结和常见面试题

Shiro总结和常见面试题 一、 什么是shiro Shiro是一个强大易用的java安全框架,提供了认证、授权、加密、会话管理、与web集成、缓存等功能,对于任何一个应用程序,都可以提供全面的安全服务,相比其他安全框架,shiro要…...

弧齿锥齿轮TCA分析程序功能说明

1. 程序概述 本程序包实现了一套完整的弧齿锥齿轮齿面接触分析(TCA) 系统,主要用于分析大轮凸面与小轮凹面的啮合特性。程序由刘万春博士开发,采用MATLAB语言编写,涵盖了从参数输入、齿面计算到结果可视化的完整分析流…...

2026 Gemini3.1Pro 技术深度拆解,国内直访镜像站实测推荐

2026 年谷歌 DeepMind 发布的 Gemini3.1Pro,凭借推理能力和多模态优势成为旗舰模型,但国内用户无法直接访问官网。目前国内用户想免费体验其技术并一站式使用多模型,推荐聚合镜像平台 RskAi(ai.rsk.cn),支持…...

报废TWS耳机充电仓的二次利用:拆解后的零件还能这么玩

报废TWS耳机充电仓的二次利用:拆解后的零件还能这么玩 当你的TWS耳机充电仓彻底报废时,先别急着把它扔进垃圾桶。这个看似无用的电子垃圾,其实藏着不少可以二次利用的宝藏零件。从环保角度看,电子废弃物是全球增长最快的垃圾类型&…...

智能客服情绪分析利器:Emotion2Vec+语音情感识别实战体验

智能客服情绪分析利器:Emotion2Vec语音情感识别实战体验 1. 引言:当AI学会"察言观色" 在电话客服中心,一位顾客正在抱怨产品问题。传统系统只能记录对话内容,却无法捕捉到顾客语气中逐渐升级的愤怒情绪。这正是语音情…...

云大物智数据研究院:厦门具身智能产业机遇报告(2026-2035)

《厦门具身智能产业机遇报告(2026-2035)》由多机构联合编制,立足全球具身智能产业浪潮与厦门本土禀赋,明确 2026-2035 年是具身智能从技术突破到规模化商用的关键十年,提出厦门以应用牵引、生态聚合为核心理念&#xf…...

YOLOX vs YOLOv5:实测对比哪个更适合你的项目?

YOLOX与YOLOv5实战对比:如何选择最适合你的目标检测模型? 在计算机视觉领域,目标检测技术一直是工业界和学术界关注的焦点。作为YOLO(You Only Look Once)系列的最新成员,YOLOX和YOLOv5各自展现了独特的优势。本文将基于实际测试数…...

FreeRTOS实战:二值信号量在串口DMA接收中的同步设计

1. 二值信号量在串口DMA接收中的核心价值 第一次用STM32的串口DMA配合FreeRTOS做数据传输时,我掉进了一个大坑。当时直接在DMA完成中断里处理数据,结果系统频繁卡死——后来用逻辑分析仪抓波形才发现,中断服务程序里执行了太多耗时操作&#…...

PyTorch softmax的dim参数详解:从理论到实践(含三维Tensor示例)

PyTorch softmax的dim参数详解:从理论到实践(含三维Tensor示例) 在深度学习模型的构建过程中,softmax函数是一个不可或缺的组件,尤其在多分类任务中扮演着关键角色。PyTorch作为当前最流行的深度学习框架之一&#xff…...

Windows平台利用FFmpeg实现高效硬件编解码加速的实战指南(附实测数据)

1. 为什么需要硬件编解码加速? 最近处理4K视频时,我的老电脑风扇狂转得像直升机起飞。直到发现FFmpeg的硬件加速功能,原来同样的转码任务,GPU参与后耗时直接减半。对于经常需要处理视频的开发者来说,硬件编解码加速就像…...

NEURAL MASK 环境配置全攻略:Anaconda虚拟环境管理与依赖包安装

NEURAL MASK 环境配置全攻略:Anaconda虚拟环境管理与依赖包安装 想跑通一个AI模型,最让人头疼的可能不是模型本身,而是环境配置。你肯定遇到过这种情况:好不容易从GitHub上clone了一个项目,照着README一顿操作&#x…...

从零到一:线性稳压电源设计实战笔记(整流、滤波、稳压全解析)

1. 线性稳压电源设计入门:从交流到直流的魔法转换 第一次接触电源设计时,看着墙上插座里的交流电变成手机充电器输出的直流电,总觉得像变魔术。直到自己动手做了第一个线性稳压电源,才发现这背后的原理既有趣又实用。咱们就以最常…...

科研制图省时指南:如何用天地图API自动生成带路网的研究区地图

科研制图效率革命:基于天地图API的智能地图生成实战 打开任何一篇地理或环境领域的SCI论文,区位图永远是第一个映入审稿人眼帘的视觉元素。传统ArcGIS制图流程中,研究人员需要反复下载底图数据、调整边界匹配、手动标注路网——这个过程往往消…...

FlowState Lab跨语言处理实战:中英文混合内容的理解与生成

FlowState Lab跨语言处理实战:中英文混合内容的理解与生成 1. 引言:为什么需要处理中英文混合内容? 在日常工作和学习中,我们经常会遇到中英文混合的内容场景。程序员查看技术文档时,经常需要阅读英文API说明和中文注…...

深入排查K8s节点NotReady:从CNI插件未初始化到Containerd重启的完整解决方案

1. 节点NotReady的典型表现与初步诊断 当你发现Kubernetes集群中某个节点突然变成NotReady状态时,先别慌。这种情况我遇到过不下二十次,大多数时候都能通过系统化的排查快速恢复。最典型的症状就是在执行kubectl get nodes时看到类似这样的输出&#xff…...

Jenkins通用配置实战:从安装到邮件通知的完整指南

1. Jenkins中文界面配置实战 刚装好Jenkins时满屏英文让人头疼?别担心,跟着我做这几个步骤,10分钟就能让界面变成熟悉的中文。我去年给二十多台服务器部署Jenkins时,这套方法屡试不爽。 首先需要安装两个关键插件:Loca…...

投标人,别再让“翻网站”吃掉你的时间

这份央企和政府的采购平台名单,其实是很多投标人日常的“收藏夹”——平台太多、账号太乱,每天光登录一遍就要花掉不少时间,更别说还得盯着哪个网站出了新公告。智标领航想解决的,正是这个问题:把找信息的时间和写标书…...

收藏备用!小白程序员必看:大模型与智能体实操拆解,避开坑快速上手

对于刚涉足大模型与智能体领域的小白程序员而言,很容易被“智能体”“Function call”“工具调用”这些专业术语绕得晕头转向,甚至陷入认知误区,越学越迷茫。本文完全从实操角度出发,拆解智能体的本质与真实企业应用场景&#xff…...

AIVideo在短视频创作中的应用:抖音/B站/小红书视频一键生成

AIVideo在短视频创作中的应用:抖音/B站/小红书视频一键生成 1. 短视频创作的新革命:AI视频生成平台 每天,数以百万计的内容创作者在抖音、B站、小红书等平台上传海量视频内容。传统视频制作流程需要经历文案撰写、分镜设计、拍摄剪辑、配音…...

Nanbeige 4.1-3B应用场景:用像素冒险终端做AI辅助心理疏导初探

Nanbeige 4.1-3B应用场景:用像素冒险终端做AI辅助心理疏导初探 1. 项目背景与设计理念 1.1 像素冒险终端的诞生 Nanbeige 4.1-3B像素冒险聊天终端是一款融合了复古游戏美学与现代AI技术的创新交互界面。这个项目源于一个简单却深刻的观察:传统心理咨询…...

Qwen3.5-27B性能实测报告:4090D四卡下QPS、首token延迟、显存占用数据

Qwen3.5-27B性能实测报告:4090D四卡下QPS、首token延迟、显存占用数据 1. 测试环境与配置 1.1 硬件配置 本次测试使用的硬件环境为4张RTX 4090 D 24GB显卡组成的计算集群,具体配置如下: 组件规格GPU4 x RTX 4090 D 24GBCPUAMD EPYC 7B13 …...

QGIS数据流转实战:从属性表到Excel的完整工作流

1. QGIS属性表导出Excel的完整流程 第一次用QGIS处理空间数据时,最让我头疼的就是如何把图层属性表里的数据导出来做进一步分析。后来发现这个操作其实比想象中简单得多,就像把超市购物小票转换成电子账单一样自然。下面我会用最直白的语言,带…...

灵感画廊部署教程:阿里云ECS实例一键部署Stable Diffusion XL 1.0镜像

灵感画廊部署教程:阿里云ECS实例一键部署Stable Diffusion XL 1.0镜像 你是否曾梦想拥有一个属于自己的数字艺术工作室?一个无需复杂配置,打开浏览器就能挥洒创意的空间?今天,我将带你通过阿里云ECS,一键部…...

FireRedASR Pro智能Agent核心组件:为AI智能体赋予“听觉”

FireRedASR Pro智能Agent核心组件:为AI智能体赋予“听觉” 你有没有想过,让电脑助手像真人一样,不仅能看懂你打的字,还能听懂你说的话?比如你正忙着写代码,随口说一句“帮我查一下今天北京的天气”&#x…...

结合DeOldify与3D建模软件:为黑白材质贴图智能赋予色彩

结合DeOldify与3D建模软件:为黑白材质贴图智能赋予色彩 你有没有遇到过这样的场景?在制作一个复古风格的游戏场景,或者还原某个历史时期的影视特效时,手头只有一堆老旧的黑白参考图,或者为了追求特定艺术效果&#xf…...

告别命令行!用Hexo Admin打造可视化Markdown写作后台(附安全配置指南)

告别命令行恐惧:Hexo Admin可视化写作后台全攻略 每次打开终端准备写博客时,那些闪烁的光标和需要记忆的命令是否让你望而却步?Hexo Admin的出现彻底改变了这一局面。这个轻量级插件为Hexo静态博客系统带来了类似WordPress的后台体验&#xf…...

L298N电机驱动原理与嵌入式控制实践

1. L298N电机驱动模块技术解析与工程实践L298N是意法半导体(STMicroelectronics)推出的一款双H桥直流电机驱动芯片,采用Multiwatt15封装,具备高电压、大电流驱动能力。该芯片自20世纪90年代问世以来,因其结构清晰、接口…...

USB-C线缆里的秘密:E-Marker芯片如何决定你的快充速度(附选购指南)

USB-C线缆里的秘密:E-Marker芯片如何决定你的快充速度(附选购指南) 每次给手机充电时,你是否注意到不同线缆的充电速度差异巨大?一条看似普通的USB-C线,可能隐藏着影响充电效率的核心元件——E-Marker芯片。…...

OpenBMC实战:如何通过YAML配置自定义IPMI FRU信息(附完整避坑指南)

OpenBMC实战:通过YAML定制IPMI FRU信息的工程化实践 在服务器管理领域,FRU(Field Replaceable Unit)信息如同设备的"身份证",记录了主板、CPU、内存等关键部件的生产日期、序列号、厂商数据等资产信息。当我…...

Gemma-3-12B-IT WebUI效果集:多模态扩展方案+CLIP/ViT集成路径

Gemma-3-12B-IT WebUI效果集:多模态扩展方案CLIP/ViT集成路径 1. 引言:当语言模型“睁开双眼” 想象一下,你正在和一位知识渊博的助手聊天,它能理解你的文字,回答你的问题,甚至帮你写代码。但当你问它&am…...