https://blog.csdn.net/wang839305939/article/details/78713124

最近在重构公司以前产品的前端代码,摈弃了以前的session-cookie鉴权方式,采用token鉴权,忙里偷闲觉得有必要对几种常见的鉴权方式整理一下。

目前我们常用的鉴权有四种:

  1. HTTP Basic Authentication
  2. session-cookie
  3. Token 验证
  4. OAuth(开放授权)

一.HTTP Basic Authentication

   这种授权方式是浏览器遵守http协议实现的基本授权方式,HTTP协议进行通信的过程中,HTTP协议定义了基本认证认证允许HTTP服务器对客户端进行用户身份证的方法。

认证过程:

  1. 客户端向服务器请求数据,请求的内容可能是一个网页或者是一个ajax异步请求,此时,假设客户端尚未被验证,则客户端提供如下请求至服务器:

  Get /index.html HTTP/1.0
  Host:www.google.com

  2. 服务器向客户端发送验证请求代码401,(WWW-Authenticate: Basic realm=”google.com”这句话是关键,如果没有客户端不会弹出用户名和密码输入界面)服务器返回的数据大抵如下:

  HTTP/1.0 401 Unauthorised
  Server: SokEvo/1.0
  WWW-Authenticate: Basic realm=”google.com”
  Content-Type: text/html
  Content-Length: xxx

  3. 当符合http1.0或1.1规范的客户端(如IE,FIREFOX)收到401返回值时,将自动弹出一个登录窗口,要求用户输入用户名和密码。

  4. 用户输入用户名和密码后,将用户名及密码以BASE64加密方式加密,并将密文放入前一条请求信息中,则客户端发送的第一条请求信息则变成如下内容:

  Get /index.html HTTP/1.0
  Host:www.google.com
  Authorization: Basic d2FuZzp3YW5n

注:d2FuZzp3YW5n表示加密后的用户名及密码(用户名:密码 然后通过base64加密,加密过程是浏览器默认的行为,不需要我们人为加密,我们只需要输入用户名密码即可)

  5. 服务器收到上述请求信息后,将Authorization字段后的用户信息取出、解密,将解密后的用户名及密码与用户数据库进行比较验证,如用户名及密码正确,服务器则根据请求,将所请求资源发送给客户端

效果:
  客户端未未认证的时候,会弹出用户名密码输入框,这个时候请求时属于pending状态,这个时候其实服务当用户输入用户名密码的时候客户端会再次发送带Authentication头的请求。

这里写图片描述

认证成功:

这里写图片描述

server.js

let express = require("express");
let app = express();app.use(express.static(__dirname+'/public'));app.get("/Authentication_base",function(req,res){console.log('req.headers.authorization:',req.headers)if(!req.headers.authorization){res.set({'WWW-Authenticate':'Basic realm="wang"'});res.status(401).end();}else{let base64 = req.headers.authorization.split(" ")[1];let userPass = new Buffer(base64, 'base64').toString().split(":");let user = userPass[0];let pass = userPass[1];if(user=="wang"&&pass="wang"){res.end("OK");}else{res.status(401).end();}}})

index.html:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>HTTP Basic Authentication</title></head><body><div></div><script src="js/jquery-3.2.1.js"></script><script>$(function(){send('./Authentication_base');})var send = function(url){$.ajax({  url : url,  method : 'GET',  });}</script></body>
</html>

      当然有登陆就有注销,我们会发现当我们认证成功后每次请求请求头都会带上Authentication及里面的内容,那么如何做到让这次登陆失效的?

      网上查了半天,目前最有效的方式就是在注销操作的时候,专门在服务器设置一个专门的注销账号,当接收到的Authentication信息为注销用户名密码的时候纠就带便注销成功了,而客户端在注销操作的时候,手动的的去修改请求头重的Authentication,将他设置未服务器默认的注销账号和密码。

      通过上面的简单讲解 其实我们已经可以返现这种验证方式的缺陷加密方式简单,仅仅是base64加密,这种加密方式是可逆的。同时在每个请求的头上都会附带上用户名和密码信息,这样在外网是很容易被嗅探器探测到的。

    总结:

      正式因为这样,这种加密方式一般多被用在内部安全性要求不高的的系统上,只是相对的多,总的来说现在使用这种鉴权比较少了。如果项目需要部署在公网上,这种方式不推荐,当然你也可以和SSL来加密传输,这样会好一点,这个如果我后面有时间来研究一下。

    二.session-cookie

    第二种这个方式是利用服务器端的session(会话)和浏览器端的cookie来实现前后端的认证,由于http请求时是无状态的,服务器正常情况下是不知道当前请求之前有没有来过,这个时候我们如果要记录状态,就需要在服务器端创建一个会话(seesion),将同一个客户端的请求都维护在各自得会会话中,每当请求到达服务器端的时候,先去查一下该客户端有没有在服务器端创建seesion,如果有则已经认证成功了,否则就没有认证。
    session-cookie认证主要分四步:
      1,服务器在接受客户端首次访问时在服务器端创建seesion,然后保存seesion(我们可以将seesion保存在内存中,也可以保存在redis中,推荐使用后者),然后给这个session生成一个唯一的标识字符串,然后在响应头中种下这个唯一标识字符串。
       2.签名。这一步只是对sid进行加密处理,服务端会根据这个secret密钥进行解密。(非必需步骤)
      3.浏览器中收到请求响应的时候会解析响应头,然后将sid保存在本地cookie中,浏览器在下次http请求de 请求头中会带上该域名下的cookie信息,
       4.服务器在接受客户端请求时会去解析请求头cookie中的sid,然后根据这个sid去找服务器端保存的该客户端的session,然后判断该请求是否合法。

    这里写图片描述

    server.js(nodejs+express+seesion+redis)

    var express = require('express');
    var RedisStore = require('connect-redis')(express.session);
    var app = express();
    var secret  = "wang839305939"
    // 设置 Cookie
    app.use(express.cookieParser(secret));// 设置 Session
    app.use(express.session({store: new RedisStore({host: "127.0.0.1",port: 6379,db: "session_db"}),secret: secret
    }))app.get("/", function(req, res) {var session = req.session;session.time= session.time|| 0;var n = session.time++;res.send('hello, session id:' + session.id + ' count:' + n);
    });app.listen(9080);

      三.Token 验证

      使用基于 Token 的身份验证方法,大概的流程是这样的:

        1. 客户端使用用户名跟密码请求登录
        2. 服务端收到请求,去验证用户名与密码
        3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
        4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
        5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
        6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

        总的来说就是客户端在首次登陆以后,服务端再次接收http请求的时候,就只认token了,请求只要每次把token带上就行了,服务器端会拦截所有的请求,然后校验token的合法性,合法就放行,不合法就返回401(鉴权失败)。

        乍的一看好像和前面的seesion-cookie有点像,seesion-cookie是通过seesionid来作为浏览器和服务端的链接桥梁,而token验证方式貌似是token来起到seesionid的角色。其实这两者差别是很大的。
        1. sessionid 他只是一个唯一标识的字符串,服务端是根据这个字符串,来查询在服务器端保持的seesion,这里面才保存着用户的登陆状态。但是token本身就是一种登陆成功凭证,他是在登陆成功后根据某种规则生成的一种信息凭证,他里面本身就保存着用户的登陆状态。服务器端只需要根据定义的规则校验这个token是否合法就行。
        2. session-cookie是需要cookie配合的,居然要cookie,那么在http代理客户端的选择上就是只有浏览器了,因为只有浏览器才会去解析请求响应头里面的cookie,然后每次请求再默认带上该域名下的cookie。但是我们知道http代理客户端不只有浏览器,还有原生APP等等,这个时候cookie是不起作用的,或者浏览器端是可以禁止cookie的(虽然可以,但是这基本上是属于吃饱没事干的人干的事)…,但是token 就不一样,他是登陆请求在登陆成功后再请求响应体中返回的信息,客户端在收到响应的时候,可以把他存在本地的cookie,storage,或者内存中,然后再下一次请求的请求头重带上这个token就行了。简单点来说cookie-session机制他限制了客户端的类型,而token验证机制丰富了客户端类型。
         3. 时效性。session-cookie的sessionid实在登陆的时候生成的而且在登出事时一直不变的,在一定程度上安全就会低,而token是可以在一段时间内动态改变的。
         4. 可扩展性。token验证本身是比较灵活的,一是token的解决方案有许多,常用的是JWT,二来我们可以基于token验证机制,专门做一个鉴权服务,用它向多个服务的请求进行统一鉴权。

      下面就拿最常用的JWT(JSON WEB TOKEN)来说:

         JWT是Auth0提出的通过对JSON进行加密签名来实现授权验证的方案,就是登陆成功后将相关信息组成json对象,然后对这个对象进行某中方式的加密,返回给客户端,客户端在下次请求时带上这个token,服务端再收到请求时校验token合法性,其实也就是在校验请求的合法性。
      JWT对象通常由三部分构成:

      1. Headers: 包括类别(typ)、加密算法(alg)
          {"alg": "HS256","typ": "JWT"}
        1. Claims :包括需要传递的用户信息
            {"sub": "1234567890","name": "John Doe","admin": true}
          1. Signature: 根据alg算法与私有秘钥进行加密得到的签名字串, 这一段是最重要的敏感信息,只能在服务端解密;
          HMACSHA256(  base64UrlEncode(Headers) + "." +base64UrlEncode(Claims),SECREATE_KEY
          )

            编码之后的JWT看起来是这样的一串字符:

            eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

            nodejs+express+jwt-simple
            auth.js

            let jwt = require('jwt-simple');
            let secret = "wangyy";
            let time = 10;module.exports = { /**检验token合法性*/ validate:function(req,res,next){ let token = req.body.token||req.headers["xssToken"];if(token){ let decodeToken = null;try { //防止假冒token解析報錯 decodeToken = jwt.decode(token,secret,'HS256'); } catch (err) { res.status(401).send("非法访问"); return; } let exp = decodeToken.exp; if(!exp){res.status(401).send("非法访问");}let now = new Date().getTime();if(exp>(now+time*60*1000)){res.send({code:'002',"errorMsg":"授权超时"})}next();}else{ res.status(401).send("非法访问");}},/* 生成token*/ makeToken(){ let Token = null; let payload = { time:new Date().getTime(), exp:this.makeExp(time) } Token = jwt.encode(payload,secret,HS256) return Token; }, /*生成token过期时间*/ makeExp:function(time){let stam = time601000; } }

              server.js

              let express = require("express"); 
              let app = express(); 
              let bodyParser = require('body-parser'); 
              let auth = require('./lib/auth.js'); 
              let chalk = require('chalk'); app.use(bodyParser.json()); app.post('/login',function(req,res,next){ let Token = auth.makeToken(); res.json({result:"success",token:Token},200)});
              app.use('*',[auth.validate],function(req,res,next){ res.send('success'); }); 
              app.listen('9999')

                  上面只是一个简单的token生成和校验,如果有需要可以根据实际需要进行逻辑处理

                四.OAuth(开放授权)

                  OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容,为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。我们常见的提供OAuth认证服务的厂商有支付宝,QQ,微信。
                  OAuth协议又有1.0和2.0两个版本。相比较1.0版,2.0版整个授权验证流程更简单更安全,也是目前最主要的用户身份验证和授权方式。
                下面是一张auth2.0的流程图:
                这里写图片描述

                从图中我们可以看出,auth2.0流程分为六布(我们就以csdn登陆为例):

                第一步. 向用户请求授权,现在很多的网站在登陆的时候都有第三方登陆的入口,当我们点击等第三方入口时,第三方授权服务会引导我们进入第三方登陆授权页面。

                这里写图片描述

                通过第三方请求授权页面的浏览器地址栏地址可以看出,

                https://graph.qq.com/oauth2.0/show?which=Login&display=pc&response_type=code&client_id=100270989&redirect_uri=https%3A%2F%2Fpassport.csdn.net%2Faccount%2Flogin%3Foauth_provider%3DQQProvider&state=test

                  这里的地址里面的%是浏览器强制编码后的显示我们可以使用decodeURIComponent进行解码,解码后是这样:

                  https://graph.qq.com/oauth2.0/show?which=Login&display=pc&response_type=code&client_id=100270989&redirect_uri=https://passport.csdn.net/account/login?oauth_provider=QQProvider&state=test

                    这个url地址我们可以看见Auth2.0常见的几个参数:
                          response_type,返回类型
                          client_id,第三方应用id,由授权服务器(qq)在第三方应用提交时颁发给第三方应用。
                          redirect_uri,登陆成功重定向页面
                          oauth_provider,第三方授权提供方
                          state,由第三方应用给出的随机码
                    第二步. 返回用户凭证(code),并返回一个凭证(code),当用户点击授权并登陆后,授权服务器将生成一个用户凭证(code)。这个用户凭证会附加在重定向的地址redirect_uri的后面

                    https://passport.csdn.net/account/login?code=9e3efa6cea739f9aaab2&state=XXX

                      第3步. 请求授权服务器授权:

                        经过第二部获取code后后面的工作就可以交给后台去处理的,和用户的交互就结束了。接下来我的需要获取Access Token,我们需要用他来向授权服务器获取用户信息等资源。
                        第三方应用后台通过第二步的凭证(code)向授权服务器请求Access Token,这时候需要以下几个信息:

                      • client_id 标识第三方应用的id,由授权服务器(Github)在第三方应用提交时颁发给第三方应用
                      • client_secret 第三方应用和授权服务器之间的安全凭证,由授权服务器(Github)在第三方应用提交时颁发给第三方应用
                      • code 第一步中返回的用户凭证redirect_uri 第一步生成用户凭证后跳转到第二步时的地址
                      • state 由第三方应用给出的随机码

                      第四步. 授权服务器同意授权后,返回一个资源访问的凭证(Access Token)。

                      第五步. 第三方应用通过第四步的凭证(Access Token)向资源服务器请求相关资源。

                      第六步. 资源服务器验证凭证(Access Token)通过后,将第三方应用请求的资源返回。

                      从用户角度来说,第三方授权可以让我们快速的登陆应用,无需进行繁琐的注册,同时不用记住各种账号密码。只需要记住自己常用的几个账号就ok了。
                      从产品经理的角度来所,这种授权方式提高用户的体验满意度。另一方面可以获取更多的用户。

                      总结:

                        授权方式多种多样,主要还是要取决于我们对于产品的定位。如果我们的产品只是在企业内部使用,token和session就可以满足我们的需求,如果是面向互联网的大众用户,那么第三方授权在用户体验度上会有一个很大的提升。

                        还是那句话,上面可能有很多‘通假字’勿怪,我写作的目的一方面是希望和大家分享我掌握的点点滴滴,另一方面也是梳理一下掌握的知识。

                      查看全文
                      如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

                      相关文章

                      1. 视觉SLAM | RealsenseD435i相机标定

                        在运行VINS-MONO、VINS-Fusion等SLAM方案的时候,需要很准确的相机参数,否则很容易漂移。本文是RealsenseD435i相机标定过程的记录,标定主要有三个步骤IMU标定 相机标定 IMU与相机联合标定IMU标定 这里使用imu_utils标定imu,在安装imu_utils之前,要先安装code_utils,注意要…...

                        2024/5/6 21:58:53
                      2. 2020杭电多校第二场部分题解(1004, 1005, 1006, 1009)

                        1004 Tokitsukaze and Multiple 可以处理出每个点i作为划分的右端点,它最近的左端点为L[i],然后问题就转换成了若个个区间,求彼此之间不相交的情况下最多有几个共存。经典问题,这里用DP解决 #include<bits/stdc++.h> #define ll long long #define pb push_back #de…...

                        2024/4/29 1:27:38
                      3. java连接数据库发生错误

                        出现以下错误时, java.sql.SQLException: The server time zone value ‘?й???’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the ‘serverTimezone’ configuration property) to use a more s…...

                        2024/4/27 11:01:48
                      4. 直播平台代码、直播APP源代码《直播疑难杂症排查》之: 音画不同步

                        音画不同步的表现 很容易判断,就是画面和声音不匹配。 音画同步的基础概念 首先我们要明白一个概念,虽然人的肉眼很容易辨别音画是否同步的,但是机器则不然,对于播放器而言,它判断一帧视频和一帧音频是否要在同一个时间渲染和播放,依靠的完全是该数据携带的时间戳信息。如…...

                        2024/4/15 16:12:13
                      5. MEXGroup:晚间专题技术报告2020-07-28

                        汇市焦点 避险货币方面,日内美元指数止跌回升,一方面是因美国公布了新一轮的万亿美元救助计划,提振了市场对于美国经济复苏的希望。另一方面,美联储将于周四公布利率决议,部分美元空头选择获利了结。考虑到美国疫情仍然严峻,且市场预计美联储于本周四将继续重申利率保持在…...

                        2024/4/15 16:12:12
                      6. 来聊聊华为云WeLink那些好用的移动办公功能

                        最近几年,“移动办公”频频被提起,不过绝大部分人都认为“移动办公”的想法需要花费很长一段时间来实现,但2020年初,一场突如其来的新冠疫情让“全民移动办公”瞬间成为了现实。 疫情的大背景下,以在家远程办公的方式复工,让各类协同办公、视频会议等软件成为关注焦点之一…...

                        2024/4/15 16:12:11
                      7. H3C交换机基本配置笔记

                        配置ip 我的进线插在管理口,所以在管理口配置ip,并且开启远程 [H3C-M-GigabitEthernet0/0/0]ip address 10.15.10.243 24 [H3C]ip route-static 0.0.0.0 0 10.15.10.1开启远程 使用telnet功能需要本机具有up状态的三层接口telnet server enable //开启本机telnet功能ssh ser…...

                        2024/4/23 0:13:23
                      8. JSP之EL表达式与JSTL标准标签库

                        EL表达式EL(Expression Language 表达式语言)定义了一系列隐含对象和操作符,无须Java代码即可方便地访问pageContext、request、session、application作用域中的对象。1、EL表达式显示数据基本数据类型与String类型:自定义类型: a、在页面中要显示的自定义类成员变量必须要…...

                        2024/4/15 16:12:09
                      9. python +ip2region +淘宝IP查询 组合查询IP信息,做到毫秒级查询

                        环境:python 3.6 运行环境: Windows 10 前言:非常感谢大佬做的这个项目,可以很快速的解决查询IP地址的事情。可以很方便的解决一些业务上的需求。拜谢!大佬项目地址:GitHub项目地址 PS:现已经支持:java、C#、php、c、python、nodejs、php扩展(php5和php7)、golang、rus…...

                        2024/5/6 15:55:02
                      10. HDU 1241 Oil Deposits

                        题目:http://acm.hdu.edu.cn/showproblem.php?pid=1241给出一张地图,@代表有油,*代表没有。对于一个@,它的上下左右,左上,左下,右上,右下的位置若含有@,则它们属于同一块油田,问给出的地图中有几块油田?#include<iostream> #include<algorithm> #inclu…...

                        2024/4/15 16:12:07
                      11. 强行分页和pageHelper分页

                        强行分页List currentPageList = new ArrayList<>(); //最后返回的listList data = new ArrayList<>(); //需要分页的listif (data != null && data.size() > 0) {int currIdx = (current > 1 ? (current - 1) * size : 0);for (int i = 0; i < …...

                        2024/4/22 12:37:39
                      12. 算法总结-数组(剑指Offer)

                        算法数组总结剑指 Offer 13. 机器人的运动范围题目思路题解剑指 Offer 59 - I. 滑动窗口的最大值题目思路题解剑指 Offer 66. 构建乘积数组题目思路题解剑指 Offer 03. 数组中重复的数字题目思路题解剑指 Offer 57. 和为s的两个数字题目思路题解 这是一篇关于总结剑指Offer数组…...

                        2024/4/15 16:23:52
                      13. react、vue打包之后更新到服务器有缓存问题

                        解决方法:找到webpack .config.js1.定义版本变量: const Version = new Date().getTime(); // 这里使用的是时间戳 来区分 ,也可以自己定义成别的如:1.12.修改要生成的js和css文件的配置项,把刚刚声明的版本拼接进要生成的文件名中;output: { path: config.build.assetsR…...

                        2024/4/15 16:23:51
                      14. ARMv8.1平台下新添加原子操作指令

                        ARMv8.1指令集相对于ARMv8指令集添加了不少新的功能,其中有很大的一块功能称作LSE(Large System Extensions),这其中添加了很多平台原生就支持的原子操作指令。在这之前,如果想实现某个原子操作,必须要使用LL/SC操作,在ARMv8以前的32位系统中使用LDREX和STREX指令,从AR…...

                        2024/4/29 19:40:14
                      15. SSL证书吊销列表(CRL)是什么?

                        SSL证书吊销列表,顾名思义,证书吊销是一个将无效证书和不可信证书与有效可信证书区分开的过程。基本上,这是CA(或CRL颁发者)知道一种或多种数字证书由于某种原因或其他原因不再值得信赖的一种方法。当他们吊销证书(此过程有时称为PKI证书吊销)时,他们实际上会在证书的到…...

                        2024/4/28 15:18:02
                      16. 照片活体检测技术

                        1、2017年开始陆续将原先的指静脉系统,替换成人工智能服务,一路走来看着AI技术不过成长2、最先使用的是百度的照片活体检测技术,系统接入后,发现百度AI在这块上的能力略显不足,在用手机对着照片翻拍的时候,时不时就可以绕过,当然我们的系统业务要求不是那么很足,比对用…...

                        2024/4/15 16:23:48
                      17. 基于MySql主从分离的代码层实现(附源码)

                        前言 该文是基于之前那篇《MySQL主从分离的实现》的代码层实现,所以本文配置的主数据库和从数据库的数据源都是在上篇博文中已经介绍了的。 动态选择数据源的配置 由于我们在写数据的时候需要使用主库的数据源,读的时候需要从库的数据源,我们可以在Spring源码中,通过DataSo…...

                        2024/5/2 11:55:41
                      18. 批量写c++函数头部注释(一)

                        处理工具: python 脚本: import os import re import math import shutil import xlsxwriter import pandas as pdsource_path = os.path.abspath(rH:\ALM\model\rxengine-v0.2_0414\rxengine\RxEngine) target_path = os.path.abspath(rI:\临时\RxEngine)try:os.rmdir(targe…...

                        2024/5/6 15:17:56
                      19. MyBatis实现数据的批量新增和删除

                        在项目的开发中,我们经常需要对数据进行批量的操作,如:批量新增、批量删除等。下面将介绍MyBatis如何实现数据的批量新增和删除操作。创建UserMapper接口(用户信息Mapper动态代理接口),实现用户信息的批量新增、批量删除、批量查询。package com.pjb.mapper;import com.p…...

                        2024/5/7 1:31:46
                      20. LUT的原理与结构

                        查找表(look-up-table)简称为LUT,LUT本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有 4位地址线的16x1的RAM。 当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,…...

                        2024/4/15 16:23:44

                      最新文章

                      1. 四川易点慧电子商务抖音小店:潜力无限的新零售风口

                        在当今数字化浪潮中&#xff0c;电子商务已经成为推动经济发展的重要引擎。四川易点慧电子商务有限公司凭借其敏锐的市场洞察力和创新精神&#xff0c;成功在抖音小店这一新兴平台上开辟出一片新天地。本文将探讨四川易点慧电子商务抖音小店的潜力及其在新零售领域的影响力。 一…...

                        2024/5/7 5:25:33
                      2. 梯度消失和梯度爆炸的一些处理方法

                        在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

                        2024/5/6 9:38:23
                      3. 【vim 学习系列文章 20 -- a:mode 的值有哪些?】

                        请阅读【嵌入式开发学习必备专栏 之 Vim】 文章目录 a:mode 的值有哪些?举例Vim 底部状态栏设置 a:mode 的值有哪些? 在 Vim 脚本语言中&#xff0c;a:mode 常常用于函数内部&#xff0c;以获取该函数被调用时 Vim 正处于的模式。它主常用于那些可以从不同模式下被调用的函数…...

                        2024/5/1 0:33:57
                      4. ChatGPT 赚钱初学者指南(上)

                        原文&#xff1a;The Beginner’s Guide to Earning Money Online with ChatGPT 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第一章&#xff1a;理解基础知识 什么是 ChatGPT&#xff1f; 在人工智能与人类对话相遇的数字织锦中&#xff0c;ChatGPT 作为一个突出…...

                        2024/5/5 8:51:03
                      5. 大数据学习十三天(hadhoop基础2)

                        一: MapReduce概述(了解) MapReduce是hadoop三大组件之一,是分布式计算组件 Map阶段 : 将数据拆分到不同的服务器后执行Maptask任务,得到一个中间结果 Reduce阶段 : 将Maptask执行的结果进行汇总,按照Reducetask的计算 规则获得一个唯一的结果 我们在MapReduce计算框架的使用过…...

                        2024/5/2 21:17:01
                      6. 416. 分割等和子集问题(动态规划)

                        题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

                        2024/5/6 18:23:10
                      7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

                        工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

                        2024/5/6 18:40:38
                      8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

                        LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

                        2024/5/6 23:37:19
                      9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

                        一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

                        2024/5/6 7:24:07
                      10. VB.net WebBrowser网页元素抓取分析方法

                        在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

                        2024/5/7 0:32:52
                      11. 【Objective-C】Objective-C汇总

                        方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

                        2024/5/6 6:01:13
                      12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

                        &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

                        2024/5/6 7:24:06
                      13. 【ES6.0】- 扩展运算符(...)

                        【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

                        2024/5/7 1:54:46
                      14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

                        文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

                        2024/5/6 20:04:22
                      15. Go语言常用命令详解(二)

                        文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

                        2024/5/7 0:32:51
                      16. 用欧拉路径判断图同构推出reverse合法性:1116T4

                        http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

                        2024/5/6 7:24:04
                      17. 【NGINX--1】基础知识

                        1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

                        2024/5/6 7:24:04
                      18. Hive默认分割符、存储格式与数据压缩

                        目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

                        2024/5/6 19:38:16
                      19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

                        文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

                        2024/5/6 7:24:03
                      20. --max-old-space-size=8192报错

                        vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

                        2024/5/7 0:32:49
                      21. 基于深度学习的恶意软件检测

                        恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

                        2024/5/6 21:25:34
                      22. JS原型对象prototype

                        让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

                        2024/5/6 7:24:02
                      23. C++中只能有一个实例的单例类

                        C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

                        2024/5/6 7:24:01
                      24. python django 小程序图书借阅源码

                        开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

                        2024/5/7 0:32:47
                      25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

                        C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

                        2024/5/6 16:50:57
                      26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

                        解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

                        2022/11/19 21:17:18
                      27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

                        %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

                        2022/11/19 21:17:16
                      28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

                        win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

                        2022/11/19 21:17:15
                      29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

                        有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

                        2022/11/19 21:17:14
                      30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

                        置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

                        2022/11/19 21:17:13
                      31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

                        Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

                        2022/11/19 21:17:12
                      32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

                        有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

                        2022/11/19 21:17:11
                      33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

                        今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

                        2022/11/19 21:17:10
                      34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

                        只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

                        2022/11/19 21:17:09
                      35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

                        原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

                        2022/11/19 21:17:08
                      36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

                        关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

                        2022/11/19 21:17:05
                      37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

                        钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

                        2022/11/19 21:17:05
                      38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

                        前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

                        2022/11/19 21:17:04
                      39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

                        本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

                        2022/11/19 21:17:03
                      40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

                        许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

                        2022/11/19 21:17:02
                      41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

                        配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

                        2022/11/19 21:17:01
                      42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

                        不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

                        2022/11/19 21:17:00
                      43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

                        当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

                        2022/11/19 21:16:59
                      44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

                        我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

                        2022/11/19 21:16:58
                      45. 如何在iPhone上关闭“请勿打扰”

                        Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

                        2022/11/19 21:16:57