<p class="ArticleContent"><strong><font size="4">1. 充氮回流焊</font></strong></p>
<p class="ArticleContent"><font size="4">在回流焊中使用惰性气体保护,已经有一段时间了,并已得到较大范围的应用,由于价格的考虑,一般都是选择氮气保护。氮气回流焊有</font></p>
<p class="ArticleContent"><font size="4">以下优点。</font></p>
<p class="ArticleContent"><font size="4">1) 防止减少氧化</font></p>
<p class="ArticleContent"><font size="4">2)提高焊接润湿力,加快润湿速度</font></p>
<p class="ArticleContent"><font size="4">3) 减少锡球的产生,避免桥接,得到列好的焊接质量<br/>特别重要的是,可以使用更低活性助焊剂的锡膏,同时也能提高焊点的性能,减少基材的变色,但是它的缺点是成本明显的增加,这个增加的成本随氮气的用量而增加,当你需要炉内达到1000ppm含氧量与50ppm含氧量,对氮气的需求是有天壤之别的。现在的锡膏制造厂商都在致力于开发在较高含氧量的气氛中就能进行良好的焊接的免洗焊膏,这样就可以减少氮气的消耗。对于中回流焊中引入氮气,必须进行成本收益分析,它的收益包括产品的良率,品质的改善,返工或维修费的降低等等,完整无误的分析往往会揭示氮气引入并没有增加最终成本,相反,我们却能从中收益。</font></p>
<p class="ArticleContent"><font size="4">在目前所使用的大多数炉子都是强制热风循环型的,在这种炉子中控制氮气的消耗不是容易的事。有几种方法来减少氮气的消耗量,减少炉子进出口的开口面积,很重要的一点就是要用隔板,卷帘或类似的装置来阻挡没有用到的那部分进出口的空间,另外一种方式是利用热的氮气层比空气轻且不易混合的原理,在设计炉的时候就使得加热腔比进出口都高,这样加热腔内形成自然氮气层,减少了氮气的补偿量并维护在要求的纯度上。</font></p>
<p class="ArticleContent"><font size="4"><strong>2.双面回流焊</strong></font></p>
<p class="ArticleContent"><font size="4">双面PCB已经相当普及,并在逐渐变得复那时起来,它得以如此普及,主要原因是它给设计者提供了极为良好的弹性空间,从而设计出更为小巧,紧凑的低成本的产品。到今天为止,双面板一般都有通过回流焊接上面(元件面),然后通过波峰焊来焊接下面(引脚面)。目前的一个趋势倾向于双面回流焊,但是这个工艺制程仍存在一些问题。大板的底部元件可能会在第二次回流焊过程中掉落,或者底部焊接点的部分熔融而造成焊点的可靠性问题。</font></p>
<p class="ArticleContent"><font size="4">已经发现有几种方法来实现双面回流焊:一种是用胶来粘住第一面元件,那当它被翻过来第二次进入回流焊时元件就会固定在位置上而不会掉落,这个方法很常用,但是需要额外的设备和操作步骤,也就增加了成本。第二种是应用不同熔点的焊锡合金,在做第一面是用较高熔点的合金而在做第二面时用低熔点的合金,这种方法的问题是低熔点合金选择可能受到最终产品的工作温度的限制,而高熔点的合金则势必要提高回流焊的温度,那就可能会对元件与PCB本身造成损伤。对于大多数元件,熔接点熔锡表面张力足够抓住底部元件话形成高可靠性的焊点,元件重量与引脚面积之比是用来衡量是否能进行这种成功焊接一个标准,通常在设计时会使用30g/in2这个标准,第三种是在炉子低部吹冷风的方法,这样可以维持PCB底部焊点温度在第二次回流焊中低于熔点。但是潜在的问题是由于上下面温差的产生,造成内应力产生,需要用有效的手段和过程来消除应力,提高可靠性。以上这些制程问题都不是很简单的。但是它们正在被成功解决之中。勿容置疑,在未来的几年,双面板会断续在数量上和复杂性性上有很大发展。</font></p>
<p class="ArticleContent"><font size="4"> <strong> 3.通孔回流焊</strong></font></p>
<p class="ArticleContent"><font size="4">通孔回流焊有时也称作分类元件回流焊,正在逐渐兴起。它可以去除波峰焊环节,而成为PCB混装技术中的一个工艺环节。一个最大的好处就是可以在发挥表面贴装制造工艺的优点的同时使用通孔插件来得到较好的机械联接强度。对于较大尺寸的PCB板的平整度不能够使所有表面贴装元器件的引脚都能和焊盘接触,同时,就算引脚和焊盘都能接触上,它所提供的机械强度也往往是不够大的,很容易在产品的使用中脱开而成为故障点。尽管通孔回流焊可发取得偿还好处,但是在实际应用中仍有几个缺点,锡膏量大,这样会增加因助焊剂的挥了冷却而产生对机器污染的程度,需要一个有效的助焊剂残留清除装置。另外一点是许多连接器并?没有设计成可以承受回流焊的温度,早期基于直接红外加热的炉子已不能适用,这种炉子缺少有效的热传递效率来处理一般表面贴装元件与具有复杂几何外观的通孔连接器同在一块PCB上的能力。只有大容量的具有高的热传递的强制对流炉子,才有可能实现通孔回流,并且也得到实践证明,剩下的问题就是如何保证通孔中的锡膏与元件脚有一个适当的回流焊温度曲线。随着工艺与元件的改进,通孔回流焊也会越来越多被应用。</font></p>
<p class="ArticleContent"><font size="4"><strong>4.无铅回流焊</strong></font></p>
<p class="ArticleContent"><font size="4">出于对环保的考虑,铅在21世纪将会被严格限用。虽然电子工业中用铅较极小,不到全部用量1%,但也属于禁用之列,在未来的几年中将会被逐步淘汰。现在正在开发可靠而又经济的无铅焊料。目前开发出多种替代品一般都具有比锡铅合金高40C左右的熔点温度,这就意味着回流焊必须在更高的温度下进行。氮气保护可以部分消附除因温度提高而增加的氧化和对PCB本身的损伤。不过工业界大概必须经这一个痛苦的学习期来解决所遇到的问题,工尽快应用该制程,时间已经所省不多,现在所使用的许多炉子被设计成高不超出3000C的作业温度,对于无铅焊料或非共溶点焊锡(用于BGA,双面板等)来讲,则需要更高的炉子温度,这些新的制程通常要求回流区中的温度达到3500C~4000C,炉子的设计必须更改以满足这样的要求,机器中的热敏感部件必须被修改,或者要采取措施防止热量向这些部件传递。</font></p>
<p class="ArticleContent"><strong><font size="4">5 连续柔性板回流焊</font></strong></p>
<p class="ArticleContent"><font size="4">特殊的炉子已经被开发出来处理贴装有SMT元件的连续柔性板。与普通回流炉最大不同点是这种炉子需要特制的轨道来传递柔性板。当然,这种炉子也需要能处理连续板的问题。对于分离的PCB板来讲,炉中的流量与前几段工位的状况无依赖关系,但是对于成卷连续的柔性板,柔性板在整条线上是连续的,线上任何一个特殊问题,停顿就意味着全线必须停顿,这样就产生一个特殊问题,停顿在炉子中的部分会因过热而损坏,因此,这样的炉子必须具备应变随机停顿的能力,继续处理完该段柔性板,并在全线恢复连续运转时回到正常工作状态。</font></p>
<p class="ArticleContent"><strong><font size="4">6. 垂直烘炉技术</font></strong></p>
<p class="ArticleContent"><font size="4">市场对于缩小体积的需求,使CSP(如FLIP CHIP)得到较多应用,这样元件贴装后具有更小的占地面积和更高的信号传递速率。填充或灌胶被用来加强焊点结构使其能抵受住由于硅片与PCB材料的热膨胀系数不一致而产生的应力,一般常会采用上滴或围填法来把晶片用胶封起来。许多这样的封装胶都需要很长的固化时间,对于在线生产的炉子来讲是不现实的,通常会使用成批处理的烘炉,但是垂直烘炉已经被证明可以成功地进行固化过程,并且其温度曲线比普通回流炉更为简单,垂直烘炉使用一个PCB传输系统来扮演缓冲区/堆积区的作用,这样就延长了PCB板在一个小占地面积的烘炉中驻。</font></p>
首先了解一下URL的组成:
从上面的URL可以看出,一个完整的URL包括以下几部分:
1、协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
2、域名部分:该URL的域名部分为“www.baidu.com”。一个URL中,也可以使用IP地址作为域名使用
3、端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口80
4、虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”
5、文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
6、锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
7、参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
很多大公司面试喜欢问这样一道面试题, 输入URL到看见页面发生了什么? ,今天我们来总结一下。 简单来说,共有以下几个过程
下面我们来看看具体的细节
输入 www.google.com 网址后,首先在本地的域名服务器中查找,没找到去根域名服务器查找,没有再去 com 顶级域名服务器查找,,如此的类推下去,直到找到IP地址,然后把它记录在本地,供下次使用。大致过程就是 .->.com -> google.com.-> www.google.com. 。 (你可能觉得我多写 .,并木有,这个.对应的就是根域名服务器,默认情况下所有的网址的最后一位都是.,既然是默认情况下,为了方便用户,通常都会省略,浏览器在请求DNS的时候会自动加上)
既然已经懂得了解析的具体过程,我们可以看到上述一共经过了N个过程,每个过程有一定的消耗和时间的等待,因此我们得想办法解决一下这个问题!
DNS存在着多级缓存,从离浏览器的距离排序的话,有以下几种: 浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存。
在你的chrome浏览器中输入:chrome://dns/,你可以看到chrome浏览器的DNS缓存。
系统缓存主要存在/etc/hosts(Linux系统)中
检查浏览器是否有缓存
通过 Cache-Control 和 Expires 来检查是否命中强缓存,命中则直接取本地磁盘的html(状态码为200 from disk(or memory) cache,内存or磁盘);
如果没有命中强缓存,则会向服务器发起请求(先进行下一步的TCP连接),服务器通过 Etag 和 Last-Modify 来与服务器确认返回的响应是否被更改(协商缓存),若无更改则返回状态码(304 Not Modified),浏览器取本地缓存;
若强缓存和协商缓存都没有命中则返回请求结果。
不知道你们有没有注意这样一件事,你访问http://baidu.com的时候,每次响应的并非是同一个服务器(IP地址不同),一般大公司都有成百上千台服务器来支撑访问,假设只有一个服务器,那它的性能和存储量要多大才能支撑这样大量的访问呢?DNS可以返回一个合适的机器的IP给用户,例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等,这种过程就是DNS负载均衡
TCP 协议通过三次握手建立连接。
翻译成大白话就是:
为什么是3次? :避免 历史 连接,确认客户端发来的请求是这次通信的人。
为什么不是4次? :3次够了第四次浪费
建立连接的过程是利用客户服务器模式,假设主机A为客户端,主机B为服务器端。
采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。
采用两次握手不行,原因就是上面说的失效的连接请求的特殊情况。而在三次握手中, client和server都有一个发syn和收ack的过程, 双方都是发后能收, 表明通信则准备工作OK.
为什么不是四次握手呢? 大家应该知道通信中著名的蓝军红军约定, 这个例子说明, 通信不可能100%可靠, 而上面的三次握手已经做好了通信的准备工作, 再增加握手, 并不能显著提高可靠性, 而且也没有必要。
第一次握手 :
客户端发送syn包(Seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:
服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(Seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:
客户端收到服务器的SYN ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
要先申请CA证书,并安装在服务器上(一个文件,配置nginx支持监听443端口开启ssl并设置证书路径)
浏览器发送请求;
网站从浏览器发过来的加密规则中选一组自身也支持的加密算法和hash算法,并向浏览器发送带有公钥的证书,当然证书还包含了很多信息,如网站地址、证书的颁发机构、过期时间等。
浏览器解析证书。
验证证书的合法性。如颁发机构是否合法、证书中的网站地址是否与访问的地址一致,若不合法,则浏览器提示证书不受信任,若合法,浏览器会显示一个小锁头。
若合法,或用户接受了不合法的证书,浏览器会生成一串随机数的密码(即密钥),并用证书中提供的公钥加密。
使用约定好的hash计算握手消息,并使用生成的随机数(即密钥)对消息进行加密,最后将之前生成的所有消息一并发送给网站服务器。
网站服务器解析消息。用已有的私钥将密钥解密出来,然后用密钥解密发过来的握手消息,并验证是否跟浏览器传过来的一致。然后再用密钥加密一段握手消息,发送给浏览器。
浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。
发送HTTP请求
首先科补一个小知识,HTTP的端口为80/8080,而HTTPS的端口为443
发送HTTP请求的过程就是构建HTTP请求报文并通过TCP协议中发送到服务器指定端口 请求报文由 请求行 , 请求抱头 , 请求正文 组成。
请求行
请求行的格式为 Method Request-URL HTTP-Version CRLF eg: GET index.html HTTP/1.1常用的方法有:GET ,POST ,PUT ,DELETE ,OPTIONS ,HEAD 。
常见的请求方法区别
这里主要展示 POST 和 GET 的区别
常见的区别
注意一点你也可以在GET里面藏body,POST里面带参数
重点区别
GET 会产生一个 TCP 数据包,而 POST 会产生两个 TCP 数据包。
详细的说就是:
注意一点,并不是所有的浏览器都会发送两次数据包,Firefox就发送一次
请求报头
请求报头允许客户端向服务器传递请求的附加信息和客户端自身的信息。
从图中可以看出,请求报头中使用了Accept, Accept-Encoding, Accept-Language, Cache-Control, Connection, Cookie等字段。Accept用于指定客户端用于接受哪些类型的信息,Accept-Encoding与Accept类似,它用于指定接受的编码方式。Connection设置为Keep-alive用于告诉客户端本次HTTP请求结束之后并不需要关闭TCP连接,这样可以使下次HTTP请求使用相同的TCP通道,节省TCP连接建立的时间。
请求正文
当使用POST, PUT等方法时,通常需要客户端向服务器传递数据。这些数据就储存在请求正文中。在请求包头中有一些与请求正文相关的信息,例如: 现在的Web应用通常采用Rest架构,请求的数据格式一般为json。这时就需要设置 Content-Type: application/json 。
更重要的事情-HTTP缓存
HTTP属于客户端缓存,我们常认为浏览器有一个缓存数据库,用来保存一些静态文件,下面我们分为以下几个方面来简单介绍HTTP缓存
缓存的规则
缓存规则分为 强制缓存 和 协商缓存
强制缓存
当缓存数据库中有客户端需要的数据,客户端直接将数据从其中拿出来使用(如果数据未失效),当缓存服务器没有需要的数据时,客户端才会向服务端请求。
又称对比缓存。客户端会先从缓存数据库拿到一个缓存的标识,然后向服务端验证标识是否失效,如果没有失效服务端会返回304,这样客户端可以直接去缓存数据库拿出数据,如果失效,服务端会返回新的数据
强制缓存
对于强制缓存,服务器响应的header中会用两个字段来表明——Expires和Cache-Control。
Expires
Exprires的值为服务端返回的数据到期时间。当再次请求时的请求时间小于返回的此时间,则直接使用缓存数据。但由于服务端时间和客户端时间可能有误差,这也将导致缓存命中的误差,另一方面,Expires是HTTP1.0的产物,故现在大多数使用Cache-Control替代。
Cache-Control
Cache-Control有很多属性,不同的属性代表的意义也不同。
协商缓存
协商缓存需要进行对比判断是否可以使用缓存。浏览器第一次请求数据时,服务器会将缓存标识与数据一起响应给客户端,客户端将它们备份至缓存中。再次请求时,客户端会将缓存中的标识发送给服务器,服务器根据此标识判断。若未失效,返回304状态码,浏览器拿到此状态码就可以直接使用缓存数据了。
对于协商缓存来说,缓存标识我们需要着重理解一下,下面我们将着重介绍它的两种缓存方案。
Last-Modified
Last-Modified:服务器在响应请求时,会告诉浏览器资源的最后修改时间。
从字面上看,就是说:从某个时间节点算起,是否文件被修改了
这两个的区别是一个是修改了才下载一个是没修改才下载。
Last-Modified 说好却也不是特别好,因为如果在服务器上,一个资源被修改了,但其实际内容根本没发生改变,会因为Last-Modified时间匹配不上而返回了整个实体给客户端(即使客户端缓存里有个一模一样的资源)。为了解决这个问题,HTTP1.1推出了Etag。
Etag
Etag:服务器响应请求时,通过此字段告诉浏览器当前资源在服务器生成的唯一标识(生成规则由服务器决定)
但是实际应用中由于Etag的计算是使用算法来得出的,而算法会占用服务端计算的资源,所有服务端的资源都是宝贵的,所以就很少使用Etag了。
缓存的优点
不同刷新的请求执行过程
浏览器地址栏中写入URL,回车
F5
Ctrl+F5
服务器处理请求并返回HTTP报文
它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。这一部分工作一般是由Web服务器去进行,我使用过的Web服务器有Tomcat, Nginx和Apache等等 HTTP报文也分成三份, 状态码 , 响应报头 和 响应报文
状态码
状态码是由3位数组成,第一个数字定义了响应的类别,且有五种可能取值:
平时遇到比较常见的状态码有:200, 204, 301, 302, 304, 400, 401, 403, 404, 422, 500
常见状态码区别
200 成功
请求成功,通常服务器提供了需要的资源。
204 无内容
服务器成功处理了请求,但没有返回任何内容。
301 永久移动
请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 临时移动
服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
304 未修改
自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
400 错误请求
服务器不理解请求的语法。
401 未授权
请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403 禁止
服务器拒绝请求。
404 未找到
服务器找不到请求的网页。
422 无法处理
请求格式正确,但是由于含有语义错误,无法响应
500 服务器内部错误
服务器遇到错误,无法完成请求。
响应报头
常见的响应报头字段有: Server, Connection...。
响应报文
你从服务器请求的HTML,CSS,JS文件就放在这里面
就是 Webkit 解析渲染页面的过程。
这个过程涉及两个比较重要的概念 回流 和 重绘 ,DOM结点都是以盒模型形式存在,需要浏览器去计算位置和宽度等,这个过程就是回流。等到页面的宽高,大小,颜色等属性确定下来后,浏览器开始绘制内容,这个过程叫做重绘。浏览器刚打开页面一定要经过这两个过程的,但是这个过程非常非常非常消耗性能,所以我们应该尽量减少页面的回流和重绘
这个过程中可能会有dom操作、ajax发起的http网络请求等。
web-socket、ajax等,这个过程通常是为了获取数据
setTimeout、setInterval、Promise等宏任务、微任务队列
当Render Tree中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。
会导致回流的操作:
一些常用且会导致回流的属性和方法:
当页面中元素样式的改变并不影响它在文档流中的位置时(例如:color、background-color、visibility等),浏览器会将新样式赋予给元素并重新绘制它,这个过程称为重绘。
JS的解析是由浏览器的JS引擎完成的。由于JavaScript是单线程运行,也就是说一个时间只能干一件事,干这件事情时其他事情都有排队,但是有些人物比较耗时(例如IO操作),所以将任务分为 同步任务 和 异步任务 ,所有的同步任务放在主线程上执行,形成执行栈,而异步任务等待,当执行栈被清空时才去看看异步任务有没有东西要搞,有再提取到主线程执行,这样往复循环(冤冤相报何时了,阿弥陀佛),就形成了Event Loop事件循环,下面来看看大人物
先看一段代码
结果我想大家都应该知道。主要来介绍JavaScript的解析,至于Promise等下一节再说
JavaScript是一门单线程语言,尽管H5中提出了 Web-Worker ,能够模拟实现多线程,但本质上还是单线程,说它是多线程就是扯淡。
既然是单线程,每个事件的执行就要有顺序,比如你去银行取钱,前面的人在进行,后面的就得等待,要是前面的人弄个一两个小时,估计后面的人都疯了,因此,浏览器的JS引擎处理JavaScript时分为 同步任务 和 异步任务
这张图我们可以清楚看到
js引擎存在monitoring process进程,会持续不断的检查主线程执行栈是否为空,一旦为空,就会去Event Queue那里检查是否有等待被调用的函数。 估计看完这些你对事件循环有一定的了解,但是事实上我们看对的没这么简单,通常我们会看到Promise,setTimeout,process.nextTick(),这个时候你和我就懵逼。
不同任务会进入不同的任务队列来执行。 JS引擎开始工作后,先在宏任务中开始第一次循环( script里面先执行,不过我喜欢把它拎出来,直接称其进入执行栈 ),当主线程执行栈全部任务被清空后去微任务看看,如果有等待执行的任务,执行全部的微任务(其实将其回调函数推入执行栈来执行),再去宏任务找最先进入队列的任务执行,执行这个任务后再去主线程执行任务(例如执行```console.log("hello world")这种任务),执行栈被清空后再去微任务,这样往复循环(冤冤相报何时了)
下面来看一段代码
我们看看它的执行情况
具体的执行过程大致就是这样。
欢迎分享,转载请注明来源:优选云