精华内容
下载资源
问答
  • 1、线程安全 指多个线程在执行同一段代码的时候采用加锁机制,使每次的执行结果单线程执行的结果都是一样的,不存在执行程序时...引起线程安全问题原因: 1、线程安全问题都是由全局变量及静态变量引起的 若每个

    1、线程安全

    指多个线程在执行同一段代码的时候采用加锁机制,使每次的执行结果和单线程执行的结果都是一样的,不存在执行程序时出现意外结果。

    2、线程不安全

    指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

    举例说明:假设售票系统有1000张票,A和B同时来买票,如果是线程不安全,那么可能售票系统可能出现1000-1去同时执行的情况,最终结果是A和B都买完后剩下999张票,而不是998张。

    在这里插入图片描述
    引起线程安全问题的原因:

    1、线程安全问题都是由全局变量及静态变量引起的
    若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。

    2、解决多线程并发访问资源安全问题的方法
    (1)synchronized
    synchronized关键字,就是用来控制线程同步的,保证我们的线程在多线程环境下,不被多个线程同时执行,确保我们数据的完整性,使用方法一般是加在方法上。
    (2)Lock
    Lock是在Java1.6被引入进来的,Lock的引入让锁有了可操作性,是指我们在需要的时候去手动的获取锁和释放锁,甚至我们还可以中断获取以及超时获取的同步特性,从使用上synchronized使用起来比Lock更方便。

    展开全文
  • TLS1.2 TLS1.3握手协议区别和问题排查

    千次阅读 2020-05-22 11:18:10
    与许多SSL错误消息一样,这可以从客户端服务器端触发,因此有时可以由普通互联网用户修复,而其他时候则表明网站存在配置问题。 不管它的起源如何,这都可能是一个令人沮丧的SSL错误,因为它阻止您与试图访问的...

    修复internet用户和站点所有者的SSL/TLS握手失败错误

    现在是发表另一篇技术文章的时候了,今天我们将讨论SSL/TLS握手失败错误及其修复方法。与许多SSL错误消息一样,这可以从客户端和服务器端触发,因此有时可以由普通互联网用户修复,而其他时候则表明网站存在配置问题。

    不管它的起源如何,这都可能是一个令人沮丧的SSL错误,因为它阻止您与试图访问的网站建立安全连接。

    我们将了解SSL/TLS握手是什么,然后我们将介绍SSL/TLS握手失败错误的原因以及您可以做些什么来修复它。

    让我们好好想想。

    什么是SSL/TLS握手?

    在每个HTTPS连接开始时,客户端(互联网用户的web浏览器)和服务器(托管网站)必须经过一系列检查,以相互验证并确定加密连接的参数。

    TLS握手完成三件事:

    将服务器验证为非对称公钥/私钥对的合法所有者

    确定将用于连接的TLS版本和密码套件

    交换将用于通信的对称会话密钥

    TLS handshake failed

    如果您简化PKI(作为整个SSL/TLS生态系统的基础设施),它实际上是关于安全密钥交换的。在HTTPS连接期间,通信实际上是通过生成客户端的对称会话密钥(通常是256位AES密钥)完成的。当生成对称密钥时,双方都会得到一个副本,并可以使用它来加密和解密。
    虽然256位加密仍然足够健壮,但真正的安全性是在入口,一个更大、更强的私钥(通常是2048位RSA密钥)有助于处理连接的身份验证部分。身份验证很重要,因为客户端希望确保它与正确的参与方连接。这就是握手的本质,它是一组检查,在那里客户机和服务器相互验证,确定HTTPS连接的参数(将使用什么密码套件),然后客户机加密会话密钥的副本,并将其发送到服务器以在连接期间使用。
    从历史上看,握手给连接增加了一点延迟,这就是为什么会有人声称HTTPS会减慢你的网站速度。不过,TLS协议的最新版本已经解决了这种延迟问题,所以现在这几乎完全不正确,尤其是在HTTP/2和HTTP/3中。
    目前,有两种不同版本的TLS握手正在使用中。TLS 1.2使用握手,在客户机和服务器之间进行多次往返。

    我们不会一步一步地进行,但实际上,客户机和服务器相互ping,提供SSL/TLS证书,客户机对其进行身份验证,他们交换一个受支持的密码套件列表并就其中一个达成一致,然后进行密钥交换。

    TLS 1.3将TLS握手改进为一次往返。

     

    很明显,这减少了连接启动所需的时间——我们在这里讨论的是毫秒,所以可能不太明显——并使一切都更加高效。TLS 1.3还允许0-RTT恢复,这将进一步简化与启用TLS 1.3的网站的后续连接。

    但是,考虑到TLS握手中移动部件的数量,如果网站或设备配置错误,可能会出现很多问题。现在我们来讨论一下TLS握手会出现什么问题,以及需要做些什么来修复它。

    仔细看一下SSL/TLS握手

    帕特里克·诺赫的所有加密技术

    当你通过HTTPS连接到一个网站时,引擎盖下面发生了很多事情。首先,每个人都需要…握手?!

     

    SSL/TLS握手失败错误概述

    为了使本文更易于理解,我们将介绍SSL/TLS握手失败错误的所有可能原因以及谁可以修复这些错误,然后稍后我们将为每个问题提供一个专门的部分,我们将介绍如何修复它们。

    CAUSE DESCRIPTION FIX
    Incorrect System Time Client device has the incorrect time & date Client
    Browser Error A browser configuration is causing the error Client
    Man-in-the-Middle A third party is intercepting/manipulating connection Client
    Protocol Mismatch Protocol used by client is not supported by server Server
    Cipher Suite Mismatch Cipher Suite used by client is not supported by server Server
    Incorrect Certificate
    • URL host name doesn’t match host name on server certificate
    • Incomplete/Invalid certificate chain presented to client
    • Revoked/Expired SSL/TLS certificate sent to the client or server
    • Replacement of self-signed certificates in internal networks has caused a path-building error
    Server
    SNI-Enabled Server Client can’t communicate with SNI-enabled server Server

    现在让我们深入讨论解决这些问题和可以做的事情,然后我们将完成一些您绝对不应该从客户端尝试解决这个错误的事情。

     

    TLS handshake failed

    SSL/TLS握手失败-客户端错误

    当握手失败时,通常是网站/服务器及其SSL/TLS配置的问题。

    实际上,现在只是TLS配置,因为对SSL 3.0的支持几乎完全被否决了。

    但是,在一些上下文中,客户端错误可能导致SSL/TLS握手失败错误。其中很多看起来都很简单,比如确保系统时间正确,浏览器更新。

    但是,正如我们所讨论的,在TLS握手时有很多活动部件,有时甚至是最轻微的打嗝都会导致整个事情变得一团糟。

    所以,让我们来看看一些客户端修复。

    系统时间不正确

    我真的不知道为什么有人会把他们的系统时钟从通用时间选项中去掉,但很显然这是真的。也许你想像精神病患者一样遵守自己的个人时钟,或者设置只是意外改变——这不关我的事,真的——但如果你的系统时间不对,可能会导致TLS握手出现问题。

    这主要是因为SSL/TLS证书的寿命有限,所以时间很重要。事实上,在一些相当引人注目的证书过期案例中,比如Oculus Rift虚拟现实系统,互联网用户甚至故意将其系统时间设置回到期前的某个日期,以便他们仍然可以连接。

    显然,不要这样做。如果您仍然收到SSL/TLS握手失败错误,并且您的系统时间正确,则该问题是由其他地方引起的。

     

    TLS handshake failed error

    浏览器错误
    这不像是一个浏览器错误,这实际上是你的浏览器犯了一个错误。有时你的浏览器可能会配置错误,或者插件可能会导致工作方式有点不同,从而导致连接到其他合法网站的问题。虽然诊断当前浏览器上需要调整的内容可能有点困难,但将其缩小到文本浏览器错误是非常简单的:只需尝试另一个浏览器。
    如果你使用的是Google Chrome,可以切换到苹果Safari或微软Edge等操作系统的原生浏览器,如果你有,也可以使用Mozilla Firefox(我的首选)。
    只要把它打开,然后试着连接到站点。如果您得到相同的SSL/TLS握手失败错误,您知道它不是浏览器。但是如果你能连接,现在你知道你的插件或设置有问题了。
    解决这个问题的最快方法就是将浏览器重置为默认设置并禁用所有插件。在那里,你可以根据自己的需要配置浏览器,在你调整的时候测试你与相关站点的连接。这可能需要一点时间,但如果您的浏览器配置错误或出错,这确实是解决问题的唯一方法。
    中间人
    中间人(MITM)通常被描述为企图窃取信息或造成伤害的邪恶黑客。事实上并不总是这样。许多程序和设备为了检查或其他目的(如负载平衡)而拦截通信量,然后将其发送到应用服务器。这也构成了MITM。
    不幸的是,有时这些设备的问题会导致TLS握手失败。它可能类似于网络防火墙阻止连接,也可能是服务器端网络上的边缘设备上的配置,因此此问题实际上可以是客户端修复,也可以是服务器端修复,具体取决于场景。
    这里的事情,如果这个问题是客户端,你可以冒险暴露自己,如果你与你的防病毒或VPN设置抖动。一般来说,应该有一种方法可以列出白名单,或者为有问题的站点创建一个异常。但千万不要放下防火墙或杀毒软件,只需连接到一个网站。如果问题是服务器端的,则很可能是边缘设备上的配置问题。最近,Ross Thomas告诉我他曾经处理过一个设备,这个设备拦截流量并附加一个小数据字符串以表明它通过了检查。这导致数据无法通过校验和散列,还可能干扰身份验证。
    同样,对于我来说,有太多的可能来源来缩小到一个单一的修复,但是如果你有一个设备检查或拦截流量,从那里开始。

    SSL/TLS握手失败:服务器端错误
    大多数时候,SSL/TLS握手失败是服务器端问题的结果。其中有些很容易修复,有些更复杂,有些根本不值得修复。
    让我们看看。

     

    协议不匹配
    这实际上是一个在客户端和服务器端都可能发生的错误,根据上下文的不同,它实际上可能不值得修复。在支持协议和密码方面,最重要的一点是:永远向前,永远不要向后。
    TLS 1.2十年前问世,但仍有一小部分网站不支持它。今年夏天早些时候,IETF最终将TLS 1.3发布为RFC 8446。建议各网站在早期方便时增加对TLS 1.3的支持。
    另一方面,PCI DSS要求最近强制要求所有收集支付卡信息的网站最终支持SSL 3.0和TLS 1.0。谷歌、火狐、苹果和微软四大浏览器制造商联合宣布,到2020年,TLS 1.1将被弃用。
    如果由于协议不匹配而导致SSL/TLS握手失败错误,则意味着客户端和服务器对同一TLS版本没有相互支持。下面是一个例子:

    CLIENT SERVER
    Supports TLS 1.0, TLS 1.1 Supports TLS 1.2

    在这个场景中,没有相互支持的TLS协议,服务器可能不支持向后版本控制。服务器不应该修复这个问题。在此示例中,客户端应升级其浏览器,或者在浏览器为当前版本的情况下,将其配置为支持最新的TLS版本。

    此时,您应该使用TLS 1.2或tls1.3,如果没有,请添加对它们的支持。但请记住,永远不要倒退。

     

    TLS handshake failed

    密码套件不匹配
    这与协议不匹配非常相似——只是更精细一些。SSL/TLS不仅仅是一个处理所有事情的算法(尽管ECC很接近),它实际上是一个提供不同功能并与SSL/TLS协同工作的算法集合。
    SSL/TLS就像Megazord,密码套件就像Power Rangers。
    什么?你试图使一组算法听起来更有趣。
    总之,虽然TLS 1.3使用的密码套件已经过改进,但传统的密码套件有处理以下问题的算法:
    非对称公钥加密
    对称会话密钥加密
    密钥生成
    签名哈希

    不同的行业和政府机构有不同的加密标准,建议使用不同的密码套件。一般来说,这里有很多重叠,而且大多数网站都支持少数密码套件,这样客户机就有几个选项,并且通常能够找到一个双方都满意的密码。显然,如果一个站点只支持一个密码套件,那么成功协商的几率将大大降低。
    如果执行SSL桥接(边缘设备接收和解密HTTPS通信量,然后对其进行重新加密,以便将其发送到应用程序服务器),则在网络中经常会发生这种情况。如果边缘设备和应用程序服务器不共享相互支持的密码套件,将导致错误。
    与协议版本非常相似,您应该只使用密码套件,而不是向后移动。请记住,当一个协议版本或密码套件被弃用时,并不是因为这个行业正试图变得困难,而是因为已经发现或迫在眉睫的漏洞。所以,向后走只会降低你的连接的安全性。

    SSL/TLS证书不正确
    有很多不同的东西可以使浏览器将SSL/TLS证书视为不正确,并阻止握手成功完成。我们将在下一小节中逐一讨论。值得注意的是,有时这些问题会在客户端变成不同的错误,而不是SSL/TLS握手失败消息。一般来说,网站上没有提供安全连接的东西。但在技术层面上,错误是由于握手失败而产生的。

    ISSUE DESCRIPTION
    Host Name Mismatch The CN in the certificate does not match the host name
    Incorrect Certificate Chain The certificate chain is missing intermediates
    Expired/Revoked Certificate The server presented an expired, revoked or untrusted certificate
    Self-Signed Replacements (Internal Networks) Certificate replacements confused path

    主机名不正确
    这曾经是WWW和非WWW版本的网站的一个问题,但证书颁发机构社区通常会减少这一问题,允许将一个站点免费列为SAN。此问题通常可以通过重新颁发证书或有时使用通配符证书来解决。
    证书链不正确
    几个月前,我们深入研究了证书链、根证书和中间证书,但这里是快速版本。SSL/TLS和PKI中的信任模型通常依赖于精心管理的根程序,这些根程序是可信CA根证书的集合,它们实际上存在于计算机系统上。

    ROOT PROGRAM USED BY
    Mozilla Firefox Desktop and Mobile
    Google Android OS
    Apple iOS, macOS
    Microsoft Windows

    这些CA根是非常宝贵的,以至于证书颁发机构没有直接从中发出风险,而是将中间根旋转起来,并与这些中间根签署SSL/TLS leaf(最终用户)证书。这就是锁链开始进入的地方。根CA证书用于对中间根进行数字签名,这些中间根用于对其他中间根或最终用户的leaf SSL/TLS证书进行签名。
    当浏览器收到SSL/TLS证书时,它要做的检查其真实性的一件事就是跟踪签名。它查看SSL/TLS证书上的数字签名,然后返回到签名它的中间根。然后,它查看中间层的数字签名,并跟随它返回到签署中间层的证书。以此类推,直到最终到达其信任存储区中的一个根CA证书。
    如果它做不到这一点,证书链通常是不完整的,这意味着浏览器找不到中间层之一,并且SSL/TLS握手失败。要解决这个问题,您需要找到并安装丢失的中间证书。根据您购买证书的CA,它应该在其网站上提供其中间产物。
    过期/吊销的证书
    虽然在当前的SSL/TLS生态系统中,撤销操作还有很多需要改进的地方,但在某些上下文中,浏览器将看到证书已被撤销,并且在此基础上握手失败。更常见的情况是由于证书过期。

    TLS handshake failed

    RELATED: This is what happens when your SSL/TLS certificate expires

    SSL/TLS证书过期有两个原因:
    确保验证信息的准确性
    以更快的速度扩展协议和密码更新
    现在,SSL/TLS证书的最大有效期是两年(27个月,因为CAs将允许您从以前的证书中携带最多3个月)。最终,可能会缩短到六个月。这意味着您需要定期交换证书。如果忘记了,这可能就是SSL/TLS握手失败的原因。只要获得一个有效的证书,并安装它-这应该可以解决你的问题。


    自签名替换
    在公共internet上,如果客户端没有在其根存储中手动安装您的私有根,则自签名证书将100%返回错误。但是,在内部网络上,自签名证书相当常见。如果你把它们换得足够多,可能会导致问题。
    大多数浏览器都会缓存证书,这样在返回网站时,握手速度会更快,但是如果您定期生成新证书,不断地将所有新生成的证书添加到本地数据库将导致混乱,最终浏览器将难以构建路径并崩溃。
    在过去,Firefox一直在努力解决这个问题,以至于7-8个证书的重新颁发将导致显著的延迟,而10个或更多证书可能导致握手需要30秒以上。


    启用SNI的服务器
    这更多的是设备之间存在的内部问题,但有时在未启用SNI时与服务器名称指示服务器通信的客户端可能是SSL/TLS握手失败的原因。
    首先要做的是确定所讨论的服务器的主机名和端口号,并确保它启用了SNI,并且它可以传递所需的所有信息。再说一次,这通常不是一个公众面临的问题,但它可能是不时的内部原因。


    什么都不动-不要奖励糟糕的SSL/TLS实现
    很多时候,网站所有者不想做任何改变,直到它产生了一个他们不能忽视的问题。虽然有一些针对SSL/TLS握手失败错误的客户端修复,但通常是服务器端的。
    这意味着作为一个普通的互联网用户,你的选择是有限的。最好的办法是通知网站所有者问题并等待他们解决。如果他们不这样做,最好停止使用网站。有些事情你绝对不应该去访问网站:
    不要放弃防火墙,你通常可以列出一个网站,但不要放弃防火墙。永远。
    如果可能的话,不要再次禁用你的防病毒软件,但是要保持更新和开启。
    不要通过HTTP连接或单击间隙警告
    如果网站不能提供安全的浏览体验,你不应该访问它。

    展开全文
  • 这里是修真院前端小课堂,每篇分享文从 ...RESETTING NORMALIZING 之间有什么区别? 】 1.背景介绍 默认样式重置出现的原因: 目前为止,市面上的五大主流浏览器为IE、Chrome、Firefox...

    这里是修真院前端小课堂,每篇分享文从

    【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

    八个方面深度解析前端知识/技能,本篇分享的是:

    【如何做默认样式重置?RESETTING 和 NORMALIZING 之间有什么区别? 】

    1.背景介绍

    默认样式重置出现的原因:

    目前为止,市面上的五大主流浏览器为IE、Chrome、Firefox、Safari和Opera。 当我们没有给html元素设置样式时,这5个浏览器会根据自己的默认样式对html元素进行布局,但是由于每个浏览器的默认布局样式不同, 会导致元素的展示方式出现差异,从而使同一页面在不同浏览器中的展示出现差异。使用CSS样式重置这一方式,就可以使网页展示效果保持 一致。

    webkit浏览器默认样式

    火狐浏览器默认样式

    IE浏览器不同版本默认样式对比表

    最早的一份CSS reset来自Tantek 的undohtml.css, 很简单的代码,Tantek 根据自己的需要,对浏览器的默认样式进行了一些重置。 其余一些有名的CSS reset如业界领袖Eric Meyer的reset; 或是Tripoli Reset

    2.知识剖析

    什么是CSS RESET?

    我们可以把它叫做CSS重设,也有人叫做CSS复位、默认CSS、CSS重置等。 CSS重设就是由于各种浏览器解释CSS样式的初始值有所不同,导致设计师 在没有定义某个CSS属性时,不同的浏览器会按照自己的默认值来为没有定 义的样式赋值,所以我们要先定义好一些CSS样式,去“覆盖”浏览器的CSS默认属性, 来让所有浏览器都按照同样的规则解释CSS,这样就能避免发生这种问题。

    CSS Reset的作用:

    CSS Reset让各个浏览器的CSS样式有一个统一的基准,而实现这一基准最主要的方式就是“清零”

    举例:

    * { outline: 0; padding: 0; margin: 0; border: 0; }其中 * 就是常说的通配符,意思是“所有的”。使用 * 代表所有的标签或元素,就叫做通配符选择器。

    由于 * 会匹配所有的元素,所以当浏览器解析到 * 时,会将页面内的所有标签都进行如上的样式重置, 这样会影响网页渲染的时间,所以使用 * 时一定要慎重,尽量不要在样式重置时应用 * 。

    CSS Reset的一些方法(推荐第2、4、5篇)

    目前比较全的CSS重设(reset)方法总结

    HTML5 css reset

    CSS工具:重置CSS

    几个CSS重置默认样式reset.css代码

    css重置样式表

    什么是NORMALIZE?

    Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上 提供了跨浏览器的高度一致性。相比于传统的CSS reset,Normalize.css 是一种现代的、为HTML5准备的优质替代方案。Normalize.css现在已经被 用于Twitter Bootstrap、HTML5 Boilerplate、GOV.UK、Rdio、CSS Tricks 以及许许多多其他框架、工具和网站上。

    源码见:normalizeGitHub源码

    normalize创造的目的:

    保护有用的浏览器默认样式而不是完全去掉它们

    一般化的样式:为大部分HTML元素提供

    修复浏览器自身的bug并保证各浏览器的一致性

    优化CSS可用性:用一些小技巧

    解释代码:用注释和详细的文档来

    RESET和NORMALIZE的区别

    1. Normalize.css 保护了有价值的默认值

    Reset通过为几乎所有的元素施加默认样式,强行使得元素有相同的视觉效果。 相比之下,Normalize.css保持了许多默认的浏览器样式。这就意味着你不用再 为所有公共的排版元素重新设置样式。当一个元素在不同的浏览器中有不同的默认值时, Normalize.css会力求让这些样式保持一致并尽可能与现代标准相符合。

    2. Normalize.css 修复了浏览器的bug

    它修复了常见的桌面端和移动端浏览器的bug。 这往往超出了Reset所能做到的范畴。关于这一点, Normalize.css修复的问题包含了HTML5元素的显示设置、 预格式化文字的font-size问题、在IE9中SVG的溢出、许多 出现在各浏览器和操作系统中的与表单相关的bug。

    3. Normalize.css 不会让你的调试工具变的杂乱

    使用Reset最让人困扰的地方莫过于在浏览器调试工具中大段大段的继承链, 如下图所示。在Normalize.css中就不会有这样的问题,因为在我们的准则中 对多选择器的使用时非常谨慎的,我们仅会有目的地对目标元素设置样式。

    4. Normalize.css 是模块化的

    这个项目已经被拆分为多个相关却又独立的部分, 这使得你能够很容易也很清楚地知道哪些元素被设置了特定的值。 因此这能让你自己选择性地移除掉某些永远不会用到部分(比如表单的一般化)。

    5. Normalize.css 拥有详细的文档

    Normalize.css的代码基于详细而全面的跨浏览器研究与测试。 这个文件中拥有详细的代码说明并在Github Wiki中有进一步的说明。 这意味着你可以找到每一行代码具体完成了什么工作、为什么要写这句代码、 浏览器之间的差异,并且你可以更容易地进行自己的测试。

    总得来说,CSS Reset 是革命党,CSS Reset 里最激进那一派提倡不管你有用没用, 通通给我脱了衣服,于是 *{margin:0;} 等等运动,把人家全拍了。看似是众生平等了, 实则是浪费了资源又占不到便宜,有求于人家的时候还得给加回去,实在需要人家的默认 样式了怎么办?自己看着办吧。

    Normalize.css 是改良派。他们提倡,各个元素都有其存在的道理, 简单粗暴地一视同仁是不好的。谁都有谁的作用,给他们制定个规范,确保他们 在任何浏览器里都干好自己的活儿就好了。

    来源于‘知乎用户’[侵删]

    3.常见问题

    Question:

    reset和normalize如何选用?还是直接不用?

    4.解决方案

    这需要以自身的需求为基点出发去选择,是个公说公有理婆说婆有理的事, 故而在此只给出一些建议:

    1.如果要使用reset。则尽量不要去直接拷贝CSS reset的代码, 自己网站上没用到的不用重置,且无意义的重置不要 (比如div本不需要{margin:0;padding:0}), 尽量保证用到的重置是高效简洁的;

    2.如果要使用normalize,可以将normalize.css作为自己项目的基础CSS, 自定义样式值来满足自己的需求。(例如去掉a标签自带的下划线和p标签的自带的margin)

    3.如果选择不用,可以根据自己需要的再去设置改变,或者写一段适合自己的修改默认样式的代码。

     

    5.编码实战

    Demo1:各个元素在不同浏览器中的表现形式

    Demo2:用常见reset代码

    Demo3:用normalize.css

    6.扩展思考

    到底该不该用 CSS reset?

    参考知乎讨论

    7.参考文献

    参考一:张鑫旭-《CSS reset的重新审视 – 避免样式重置》

    参考二:来,让我们谈一谈 Normalize.css

    参考三:Normalize.css 与传统的 CSS Reset 有哪些区别?

    8.更多讨论

    讨论:应该如何做到最优的样式重置呢?

    鸣谢

    感谢大家观看

    BY : 彭勇、胡嘉杰、万维娜、吴昊 杨梦桐|杨刚\

    课后问答:

    1.苹果系统用rest还是normalize好?

    答:因为苹果的safri浏览器比较特殊,即使用了normalize,他跟其他浏览器的样式差别也会很大,所以建议清空。

    2.那么我们平常开发建议用哪种?

    答: 一般情况下,少即是好,代码量大的话,标准化〉普通〉清空,

    3.标准化和清空有什么区别

    答:其实两者的出发点都是一样,只不过清空更像是一个打包的通配符,他几乎清除了所有浏览器默认样式,而标准化却是改良派,只对他觉得应该改变的进行更改,

    ppt链接:https://ptteng.github.io/PPT/PPT/css-71-CSS_Reset&Normalizeyg.html

    视频链接:视频

    密码: y6ku

    今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

    展开全文
  • 在前端的面试中,经常会问到 防抖 节流 的问题,这里我简单的说一下自己的理解。 防抖: 在任务高频率触发的时候,只有触发间隔超过指定间隔的时间,任务才会执行 在每次函数执行之前先清空上一次设置的...

    在前端的面试中,经常会问到 防抖节流 的问题,这里我简单的说一下自己的理解。

    防抖:

    • 在任务高频率触发的时候,只有触发间隔超过指定间隔的时间,任务才会执行

    • 在每次函数执行之前先清空上一次设置的定时器,原因是:如果执行间隔大于n秒,那么先前的定时任务一定已经执行完毕,当执clearTimeout时,其实并没有定时器可清楚,否则定时器会被清除,然后重新计时

    function debounce (fn,wait,immediate){
    	  var timer = null;
    	  console.log(fn,wait,immediate,'aaa')
    	  return ()=>{
    	    //判断首次是否需要立即执行
    	    if(immediate){
    			console.log('立即执行')
    	      fn.call(this,arguments)
    		  immediate = false;
    	    }
    		//清除定时器
    		clearInterval(timer)
    		timer = setTimeout(()=>{
    			console.log('再次执行')
    			fn.call(this,arguments)
    		},wait)
    	  }
    }
    

    节流:

    • 在指定间隔内任务只执行一次

    • 在每次函数执行之前,先判断是否存在定时器,存在则跳过本次执行,否则设置新的定时器

    function debounce (fn,wait,immediate){
    	  var timer = null;
    	  console.log(fn,wait,immediate,'aaa')
    	  return ()=>{
    	    //判断首次是否需要立即执行
    	    if(immediate){
    			console.log('立即执行')
    	      fn.call(this,arguments)
    		  immediate = false;
    	    }
    		
    		//如果当前存在定时器,返回;否则设置定时器
    		if(timer) return ;
    		//清除定时器
    		clearInterval(timer)
    		timer = setTimeout(()=>{
    			console.log('再次执行')
    			fn.call(this,arguments)
    		},wait)
    	  }
    }
    

    区别:

    • 一定时间内任务执行的次数
    • 节流 – 被调用n次,只在time间隔时间点运行
    • 防抖 – 被调用n次,只执行一次
    展开全文
  • mvcmvvm的区别

    2019-07-02 09:31:18
    mvcmvvm大概是个老生常谈的问题了,关于MVCMVVM如此这般设计的原因以及我们应该如何思考一些相关的问题 1.在看mvcmvvm的区别之前我们来看一下前端的发展历史 在上个世纪的1989年,欧洲核子研究中心的物理学家...
  • MVCMVVM的区别

    千次阅读 多人点赞 2019-04-23 20:23:23
    文章目录前言MVC解释MVC下面看这张图ViewController的交互ModelController的交互MVVM什么是MVVMMVVM的诞生如何实现MVVMController存在感降低的原因最后贴图 前言 mvcmvvm究竟是怎么样子的,这是一个前后端...
  • SDNNFV的区别

    千次阅读 2017-03-08 10:09:26
    网络虚拟化受到热捧的原因是什么?SDN与NFV的区别又在哪里?下面我们就来回答一下这些问题。 SDN: SDN抽象地说就是让管理员从功能的角度来管理整个网络。SDN把网络流量的管理层与底层控制流量的数据层分隔开来,但...
  • 原因是,https要比http更加安全一些,也就是说http协议是由ssl+http协议构建的可进行加密传输、身份验证的网络协议要比http协议安全,现在大多数的网站都逐渐用https://,因为安全问题太重要了,有很多的网站都被...
  • conststatic区别

    2012-07-19 11:01:11
     1、引出原因:函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间 ,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想 将函数中此变量的值...
  • iis跨域的问题很郁闷,估计程序因为不是php或.net的原因吧! 1)ngnix是反向代理服务器,它是代理,只是个向内网服务器传话的话筒;可以解决跨域; 2)IIS是微软公司的Web服务器。主要用来跑.net php; 3)...
  • (1)编译错误是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置,这个也是大家在刚接触编程语言最常遇到的问题。 (2)运行时错误是因为程序在执行时,运行环境发现了不能执行的操作...
  • 异常发生的原因有很多,通常包含以下几大类: 用户输入了非法数据。 要打开的文件不存在。 网络通信时连接中断,或者JVM内存溢出。 这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理...
  • C Static Const 区别

    2014-02-20 17:07:34
    1、引出原因:函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一...
  • 异常发生的原因有很多,通常包含以下几大类: 用户输入了非法数据。 要打开的文件不存在。 网络通信时连接中断,或者JVM内存溢出。 这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理...
  • 异常发生的原因有很多,通常包含以下几大类: 用户输入了非法数据。 要打开的文件不存在。 网络通信时连接中断,或者JVM内存溢出。 这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为...
  • Java异常ErrorException的区别

    万次阅读 多人点赞 2017-10-10 18:50:19
    异常发生的原因有很多,通常包含以下几大类: 用户输入了非法数据。 要打开的文件不存在。 网络通信时连接中断,或者JVM内存溢出。 这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理...
  • unsigned int int 的区别

    千次阅读 2012-08-24 14:34:46
    void foo(void) {  unsigned int a = 6;  int b = -20;  (a+b > 6) ? puts("> 6") : puts(" ... 这个问题测试你是否懂得C语言中的整数自动转换原则...原因是当表达式中存在有符号类型无符号类型时所有的操
  • 一建二建可以说是建筑行业中的必备证书了,很多有意向的考生在选择一建还是二建的时候都会纠结,不知道选择一级建造师还是二级建造师,出于这种原因,很多程度是因为很多人没分清楚一建与二建有什么区别,或是考了...
  • c语言中unsigned intint的区别

    千次阅读 2017-03-12 19:30:09
    void foo(void)  {   unsigned int a = 6;   int b = -20;   (a+b > 6) ? puts("> 6") : puts(" ... 这个问题测试你是否懂得C语言中的整数自动转换原则...原因是当表达式中存在有符号类型无符号类型时所有
  • 一、正常的缓存处理流程 二、什么是缓存雪崩缓存穿透 缓存雪崩:指的是缓存中大量数据到达过期时间或者没有此数据,而数据查询量过大,导致数据库压力...二、如何解决缓存雪崩问题 1.分析造成缓存雪崩的原因: (...
  • 除了利用布板、阻抗匹配更昂贵的材料实现信号完整性增强技术之外,设计师还可以简单地在设计中增加诸如均衡器这样的抖动消除器来解决抖动问题。这样设计师就不用专注于信号完整性问题,而把主要精力放在系统的核心...
  • 买了idea6410回来发现触摸屏有点抖动,后来网友交流,说他们用官方的BSP不会抖动,我要了他们的BSP来比较,发现没有区别,这样基本就确定了是供电原因,所以要用软件的方法解决,后来CSDN刚好有人发帖,harktrip ...
  • Windows10共有四个版本,分别为专业版、家庭版、企业版、教育版,可能大家会在选择家庭版专业版中纠结,不知道如何选择,原因无非就是因为你对两大版本不太了解,当然版本不同,功能可能有所不同。那么Win10专业版...
  • 磁盘格式化了如何恢复数据?我们有时候为了修复磁盘或是因为...高级格式化普通格式化的区别并不大,也就是我们平时在电脑系统中操作的格式化,又被称作逻辑格式化,是一种通过清除文件分配表的方式来把磁盘标记空...
  • 如果禁用浏览器 cookie,如何实现用户追踪认证? 遗憾的是依然有大量候选人答非所问,无法搞清楚 cookie session 之间的区别。 而在工作中也有让人惊讶的真实案例: 把 user ID 存储到 local storage 中当做 ...
  • 文章目录系列文章目录前言一、修改book(未整合修改添加功能)如何把值带到修改页面修改操作二、使用步骤总结 前言 前面讲了删除添加,我们一提到就要能够想到删除添加的区别 那么区别是什么呢 区别就是添加...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 383
精华内容 153
关键字:

如何区别原因和问题