Http协议 压缩
先说结论:Request和Response可以设置gzip压缩从而节省流量/带宽,这是一个不常见的问题。具体可见连接:HTTP 协议之压缩
最近测试代理服务器时,意外的发现使用urlopen请求百度首页时,会返回两种结果,一种是正常的百度首页html源码(以下简称正常结果),一种是'乱码'。样例如下:
\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x8dVKo\xe36\x10\xfe+*\x8d\xbd\x04\xd6\xcb\x89\x13G\xb2\rl\x1c\x17\xbb\xa7\x16\xc5\x16\xc8.\n\x18\x94H\xc9L$QKQ~\xaca\xa0=\xb7\xb7\x9ezj/\xed\xb9\xbd-\x8a\xb6\xbf&\x8bEO\xfd\x0b\x1dJ\x94-\xc7IQ\x08\x90\xc4\xe1\xc7y|3\x1cr\xf8\xc9\xf5g\x93W\xaf?\x9f\x1as\x99&\xe3\xa1~SL\xc6\xc3\x94J\x0cb\x99\x9b\xf4m\xc9\x16#\x14\xf2L\xd2L\x9ar\x9dSd\xe8\xd1\x08I\xba\x92\xb6Z\xe8\x87s,\n*G\xa5\x8c\xcc\x01zD\xc3\x8d\xf9\xe5ss\xc2\xd3\x1cK\x16$m%/\xa7\xa3)\x89),JXvg\x08\x9a\x8cP1\xe7B\x86\xa54\x18\xc0\x901\x174\x1a!;\xc2\x0b5\xb6\xe0\x85\x0c\xe5\xca\x08\xb1\x14\xc7\xd4^\x99\x15n<\x94L&t\xfc\xf1\x87\xbf>\xfc\xfe\xcb\xfd\xfb\xaf\xef\xdf\x7f\xfb\xcf\x1f\xdf\xdd\xff\xf9\xd3\x87_\x7f\xfb\xf8\xe3\xcf\x7f\x7f\xf3\xfd\xd0\xae!\xc3B\xae\xe1\xa3|\xef\x06\x9c\xac7s\xca\xe2\xb9\xf4\\\xc7y\xb6U\xd2\r_P\x11%|i\xae=\\J\xbe\xadP\x118\xed\xb9\xbd|e`\xc1p\xe2\x078\xbc\x8b\x05/3\xe2u\xa2(\xaa@\xdd\xbc\x1bq\x91v\xcb\xa4\x9b\xb0M\x8aE\xcc2\xcf\xf1sL\x08\xcbb\xf8KX!\xcd\xca\xbe\x97\xf1\x8c\xd6\x8b\xd4\x92M\xce\x0b&\x19\xcf< \x01xZ\xd0-K\xe3M\xc0\x05\xa1\xc2s\xb6x\x13\xf2\x84\x0b\xaf\xe38\xe1\x16{8T\x90F\x16\x9d;[\x96\xe5\xa5\xdc\xe1\xf7&\xb7\x9d\xa5\xc0yN\xc5\xb1\x05\x7f\xb6\x13\xf9)\xcb\xcc6\x0f\x1dU\r\x1b\xad\xc5\x0c\xb8\x94<U3\xf9\xcaW\x997q\xc2\xe2\xcc\x0b!\x8bT\xf8\'\xefL\x96\x11\xba\xf2\xdc\xbd5\xa5p\xc9\x88\x9c{\x03W\xadj)o\x1b;W*\x1bkG\x0e>\xb0\xef\xfc\x0f-\x86\xa5\xde\xb3\xc6\x8d\x83\x98*\xa2uVzU&!\xbb\x86\xe3\xd7~\x9e\x9f\xb9\x87\xd1%4\x92\xfe.4\x07\xa8\xbc[>\x92\'\xab\x98\x052\xdb\xd4J.\xfb\xfbXO\xc1\xc4.\x04\xc9s\x0f\xc6_]\xfa\xaa\x90\xcc\x82\xbd\xa3\x9e{\x06\x80}\x1d\x99:\x9d\x84\x90\xb6tg\xd11\xcc\xb3\x01\xac\x08KQ\x00.\xe7L\xb1\x7fh\xbfNQ\xe3\xc0\xb9BWJ\x97s&i\xdb\xb4\xf23\xa1\x12\x14\x98E\x8eCU+\xee\x817^\xe7\xf4t\xd0\x8f"\xbf\xae\xa9]\r\x00m\x05O\x181:=r1\x88\xce|^J\xd8\xbd\xd4K)ae\xea\x9f\x1c\xe2\x1d\xdf\\\xd2\xe0\x8e\x01\xa9\x90\x10,p\x16\xd6\xb5\xbf\x93k\xbc\xc0\xb0\xbc\x80\x82\xad\xe3\x81\x0c6\x94^\xb4"R\x8c\x11V\xe4\t^{,Sv\xcd \xe1\xe1\xdd\xa3\x84\x99n\x0f\xd8\xd0\xac\x9d\x1c\x97W\x93[\xc7\x87\r/Y\x88\x13\x9dyH\xd6\x91\x1b\xaaV\x1a7\xaa\xff\xa7x\x91\x10#P*`o\x1c\x91\xa1\xb4\xb2\\*\xad\xad\x88\xf6R+\x88\xbb;\xc3j\xd0)J\xf8lZ\xd1Um\xaf\xee\x1e{ez\xdf\xb7\x92\x13\x9c\xab\xa7qRW\xd6E\xa0\x9efr\xff\xad\xe5\x0f[\xda\xe3D\x1fS\xa5\xf7O\xff\xf4\x12h\xae\xb7\x97)\xaa\xe0\x9c\xc6~5\xd4\xfd\xc0y\xe0T0PO\x9b6\xa3\x13\x86\xa1\xa1\'\xfc\xa6\x1b{sF\x08\xcdt\xd4:+\xfd\xde\xf9\xbe:\xd4\x9e\xf6\xeb>\rR\xdb\x1d\xec\x9au\xe5\x7f\x0b\x05\xdbP\xf7\x01\x00\x1a\x0e<\x17\xfb\xbd\xaa<\xdc3\xd1N\xe7\xae\xbd65\xffdu+/\x1f\xef\xeb\xbe\xea\x04\xa7\x03\xab\xf7\xac\xc1\xcc\x9e\xee\xd0\nk\xba\x97\x90\xd7\xed\xd0\xae\xcf\xad\xa1]\x1f\xd4\xea\xe80\xd4\xb19Bp(\xc0\xb1\x10\xc2!H\xd8\xc2`d\x84\xb4\xc6\x96D-\xd2\xc30\xc1EQKf\x87@=S\xbb\xf5\x98lv\xac8\x89a\x00g\x95\x01\xe9\xa1\x11\x0fK\x00KQRT\x88\x10\x8c\xc0=\xc0\xb3\xed\xe5ri\x05\x98\x91\xd2\nyj\x03\xda\x0e\xc8,\xe11w\xad<\x8bQ\x95\xcb\x11\xea]8\xa8N\xd2\x08\xb9\xbdK\xd0k\x83\x95\xf1PY\xaelUne8\x85\xd3?B\xea\x0c\xe4\x19\xdc\r\n\xa4}\x8c\x94\xcf\xd5A\xa8\xaf\x08u\xc5\xe8\x15\x8c\xa2\x05NJ\xf8kn*OB\xc3y\x03\xfd/\x94\xcc\x1aT\x15\x1a@\xa1N\xb2\x86\xb0 6\x9a\xed\xd9\xcc\xa8\x10\x94$\x9fs\xc9UtJ\xda\x18P\x93wK\xadzI\xd0\x8ewX\xb1\xf3&\xc5\xab\x84fqEV\xbf\x8fT\x1f\x02Bsh\xe40\xcb\xa3h\xaf\xf4\xc8\x95\xba\xa7<\x88\xa7(\x83\x94I\xa4l\x17ec\xa5}\x87B\x0fT\xec\r\xd8*\x19M\x86\xeawS\x12\xa5\x8b\x0e\'\x0e\xa7#9\xa9nl\xed\xb9"\x14\x10\xe7x\x81\x85\x91\x92>Dw\xeaL>\xbd\xba\xb9zsu3\x99L\xae\xaf^O\xa6\xd7_L\x9f_\xbf\x9a\xbe\x80\xef\xcb\xeb7\x08\xfc\xa8\xd7\xe8\xb5F\xbb\xdeH\xd2\xb3na\xe3s\x9cU\x15w\xfb\xb6\xa4b\xad?\xa6k\xb9\x8e5\xb0\xe0\x02a\xdd\x16UDZSu\xa1\x1d\xff\x0b\xaaR\xe1\t\x1f\x0b\x00\x00
并且,作者尝试了请求五十次,结果如下:
请求地址 | 返回‘乱码’ &使用代理(阿里云) | 返回‘乱码’ &不使用代理 |
http://www.baidu.com/ | 45 | 26 |
http://www.baidu.com | 0 | 9 |
然后作者查看了异常结果的Response.info(),如下:
Server: Apache-Coyote/1.1
Cache-Control:
Content-Type: text/html;charset=UTF-8
Content-Encoding: gzip
Content-Length: 1285
Set-Cookie: fist_user=1;Domain=.baidu.com;Path=/;Max-Age=300
Pragma: no-cache
可以看出,Response可能采用的Gzip编码。使用Gzip对其进行解码,得到的结果与正常结果一样。解码代码如下:
import urllib
import gzip
from StringIO import StringIO
Response= urllib.urlopen("http://www.baidu.com",proxies=proxies)
buf = StringIO(Response)
f = gzip.GzipFile(fileobj=buf)
data = f.read()
print data
然后,作者搜索了Response+gzip的相关内容,发现使用gzip对Request和Response进行压缩是一种很常用的技术(节省流量),至于刚开始为什么一部分成功一部分不成功,估计和网速有关吧,百度服务器的设置。
附录
- Gzip压缩的好处:简单来说, Gzip压缩是在一个文本文件中找出类似的字符串, 并临时替换他们,使整个文件变小。这种形式的压缩对Web来说非常适合, 因为HTML和CSS文件通常包含大量的重复的字符串,例如空格,标签。
- 正常网页的Response.info()如下:
Date: Fri, 26 May 2017 09:47:21 GMT
Content-Type: text/html; charset=utf-8
Connection: Close
Vary: Accept-Encoding
Set-Cookie: BAIDUID=BC372CE9BA2818456F638398397AA396:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=BC372CE9BA2818456F638398397AA396; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1495792041; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=0; path=/
Set-Cookie: H_PS_PSSID=23080_1457_21114_22748_22916_20929; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Cache-Control: private
Cxy_all: baidu+be1deb4364f132ec4f46c09e73d3c3a2
Expires: Fri, 26 May 2017 09:47:00 GMT
X-Powered-By: HPHP
Server: BWS/1.1
X-UA-Compatible: IE=Edge,chrome=1
BDPAGETYPE: 1
BDQID: 0xe2d7aa44000004ed
BDUSERID: 0 - 测试源码
import urllib
# # a=urllib.getproxies()
# # print a
a ='\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x8dVKo\xe36\x10\xfe+*\x8d\xbd\x04\xd6\xcb\x89\x13G\xb2\rl\x1c\x17\xbb\xa7\x16\xc5\x16\xc8.\n\x18\x94H\xc9L$QKQ~\xaca\xa0=\xb7\xb7\x9ezj/\xed\xb9\xbd-\x8a\xb6\xbf&\x8bEO\xfd\x0b\x1dJ\x94-\xc7IQ\x08\x90\xc4\xe1\xc7y|3\x1cr\xf8\xc9\xf5g\x93W\xaf?\x9f\x1as\x99&\xe3\xa1~SL\xc6\xc3\x94J\x0cb\x99\x9b\xf4m\xc9\x16#\x14\xf2L\xd2L\x9ar\x9dSd\xe8\xd1\x08I\xba\x92\xb6Z\xe8\x87s,\n*G\xa5\x8c\xcc\x01zD\xc3\x8d\xf9\xe5ss\xc2\xd3\x1cK\x16$m%/\xa7\xa3)\x89),JXvg\x08\x9a\x8cP1\xe7B\x86\xa54\x18\xc0\x901\x174\x1a!;\xc2\x0b5\xb6\xe0\x85\x0c\xe5\xca\x08\xb1\x14\xc7\xd4^\x99\x15n<\x94L&t\xfc\xf1\x87\xbf>\xfc\xfe\xcb\xfd\xfb\xaf\xef\xdf\x7f\xfb\xcf\x1f\xdf\xdd\xff\xf9\xd3\x87_\x7f\xfb\xf8\xe3\xcf\x7f\x7f\xf3\xfd\xd0\xae!\xc3B\xae\xe1\xa3|\xef\x06\x9c\xac7s\xca\xe2\xb9\xf4\\\xc7y\xb6U\xd2\r_P\x11%|i\xae=\\J\xbe\xadP\x118\xed\xb9\xbd|e`\xc1p\xe2\x078\xbc\x8b\x05/3\xe2u\xa2(\xaa@\xdd\xbc\x1bq\x91v\xcb\xa4\x9b\xb0M\x8aE\xcc2\xcf\xf1sL\x08\xcbb\xf8KX!\xcd\xca\xbe\x97\xf1\x8c\xd6\x8b\xd4\x92M\xce\x0b&\x19\xcf< \x01xZ\xd0-K\xe3M\xc0\x05\xa1\xc2s\xb6x\x13\xf2\x84\x0b\xaf\xe38\xe1\x16{8T\x90F\x16\x9d;[\x96\xe5\xa5\xdc\xe1\xf7&\xb7\x9d\xa5\xc0yN\xc5\xb1\x05\x7f\xb6\x13\xf9)\xcb\xcc6\x0f\x1dU\r\x1b\xad\xc5\x0c\xb8\x94<U3\xf9\xcaW\x997q\xc2\xe2\xcc\x0b!\x8bT\xf8\'\xefL\x96\x11\xba\xf2\xdc\xbd5\xa5p\xc9\x88\x9c{\x03W\xadj)o\x1b;W*\x1bkG\x0e>\xb0\xef\xfc\x0f-\x86\xa5\xde\xb3\xc6\x8d\x83\x98*\xa2uVzU&!\xbb\x86\xe3\xd7~\x9e\x9f\xb9\x87\xd1%4\x92\xfe.4\x07\xa8\xbc[>\x92\'\xab\x98\x052\xdb\xd4J.\xfb\xfbXO\xc1\xc4.\x04\xc9s\x0f\xc6_]\xfa\xaa\x90\xcc\x82\xbd\xa3\x9e{\x06\x80}\x1d\x99:\x9d\x84\x90\xb6tg\xd11\xcc\xb3\x01\xac\x08KQ\x00.\xe7L\xb1\x7fh\xbfNQ\xe3\xc0\xb9BWJ\x97s&i\xdb\xb4\xf23\xa1\x12\x14\x98E\x8eCU+\xee\x817^\xe7\xf4t\xd0\x8f"\xbf\xae\xa9]\r\x00m\x05O\x181:=r1\x88\xce|^J\xd8\xbd\xd4K)ae\xea\x9f\x1c\xe2\x1d\xdf\\\xd2\xe0\x8e\x01\xa9\x90\x10,p\x16\xd6\xb5\xbf\x93k\xbc\xc0\xb0\xbc\x80\x82\xad\xe3\x81\x0c6\x94^\xb4"R\x8c\x11V\xe4\t^{,Sv\xcd \xe1\xe1\xdd\xa3\x84\x99n\x0f\xd8\xd0\xac\x9d\x1c\x97W\x93[\xc7\x87\r/Y\x88\x13\x9dyH\xd6\x91\x1b\xaaV\x1a7\xaa\xff\xa7x\x91\x10#P*`o\x1c\x91\xa1\xb4\xb2\\*\xad\xad\x88\xf6R+\x88\xbb;\xc3j\xd0)J\xf8lZ\xd1Um\xaf\xee\x1e{ez\xdf\xb7\x92\x13\x9c\xab\xa7qRW\xd6E\xa0\x9efr\xff\xad\xe5\x0f[\xda\xe3D\x1fS\xa5\xf7O\xff\xf4\x12h\xae\xb7\x97)\xaa\xe0\x9c\xc6~5\xd4\xfd\xc0y\xe0T0PO\x9b6\xa3\x13\x86\xa1\xa1\'\xfc\xa6\x1b{sF\x08\xcdt\xd4:+\xfd\xde\xf9\xbe:\xd4\x9e\xf6\xeb>\rR\xdb\x1d\xec\x9au\xe5\x7f\x0b\x05\xdbP\xf7\x01\x00\x1a\x0e<\x17\xfb\xbd\xaa<\xdc3\xd1N\xe7\xae\xbd65\xffdu+/\x1f\xef\xeb\xbe\xea\x04\xa7\x03\xab\xf7\xac\xc1\xcc\x9e\xee\xd0\nk\xba\x97\x90\xd7\xed\xd0\xae\xcf\xad\xa1]\x1f\xd4\xea\xe80\xd4\xb19Bp(\xc0\xb1\x10\xc2!H\xd8\xc2`d\x84\xb4\xc6\x96D-\xd2\xc30\xc1EQKf\x87@=S\xbb\xf5\x98lv\xac8\x89a\x00g\x95\x01\xe9\xa1\x11\x0fK\x00KQRT\x88\x10\x8c\xc0=\xc0\xb3\xed\xe5ri\x05\x98\x91\xd2\nyj\x03\xda\x0e\xc8,\xe11w\xad<\x8bQ\x95\xcb\x11\xea]8\xa8N\xd2\x08\xb9\xbdK\xd0k\x83\x95\xf1PY\xaelUne8\x85\xd3?B\xea\x0c\xe4\x19\xdc\r\n\xa4}\x8c\x94\xcf\xd5A\xa8\xaf\x08u\xc5\xe8\x15\x8c\xa2\x05NJ\xf8kn*OB\xc3y\x03\xfd/\x94\xcc\x1aT\x15\x1a@\xa1N\xb2\x86\xb0 6\x9a\xed\xd9\xcc\xa8\x10\x94$\x9fs\xc9UtJ\xda\x18P\x93wK\xadzI\xd0\x8ewX\xb1\xf3&\xc5\xab\x84fqEV\xbf\x8fT\x1f\x02Bsh\xe40\xcb\xa3h\xaf\xf4\xc8\x95\xba\xa7<\x88\xa7(\x83\x94I\xa4l\x17ec\xa5}\x87B\x0fT\xec\r\xd8*\x19M\x86\xeawS\x12\xa5\x8b\x0e\'\x0e\xa7#9\xa9nl\xed\xb9"\x14\x10\xe7x\x81\x85\x91\x92>Dw\xeaL>\xbd\xba\xb9zsu3\x99L\xae\xaf^O\xa6\xd7_L\x9f_\xbf\x9a\xbe\x80\xef\xcb\xeb7\x08\xfc\xa8\xd7\xe8\xb5F\xbb\xdeH\xd2\xb3na\xe3s\x9cU\x15w\xfb\xb6\xa4b\xad?\xa6k\xb9\x8e5\xb0\xe0\x02a\xdd\x16UDZSu\xa1\x1d\xff\x0b\xaaR\xe1\t\x1f\x0b\x00\x00'
file = open(r"C:\Users\wzs\Desktop\baidu",'w')
proxies={'http':'http://120.24.79.140:8118'}
i = 0
j0 = 0
j1 = 0
proxyfiles = []
localfiles = []
while i < 50:
proxyfile = urllib.urlopen("http://www.baidu.com",proxies=proxies).read()
localfile = urllib.urlopen("http://www.baidu.com").read()
if proxyfile==a:
j0+=1
else:
proxyfiles.append(proxyfile)
if localfile==a:
j1+=1
else:
localfiles.append(localfile)
i+=1
file.writelines(proxyfiles)
file.writelines("\n-------------------------------------------------------------\n")
file.writelines(localfiles)
file.close()
print j0
print j1 - 待续
Http协议 压缩的更多相关文章
- thttpd增加gzip压缩响应报文体功能,以减少传输数据量
thttpd thttpd是一个非常小巧的轻量级web server,它非常非常简单,仅仅提供了HTTP/1.1和简单的CGI支持,在其官方网站上有一个与其他web server(如Apache, Z ...
- Tomcat启用GZIP压缩,提升web性能
一.前言 最近做了个项目,遇到这么一个问题:服务器返回给客户端的json数据量太大(大概65M),在客户端加载了1分多钟才渲染完毕,费时耗流量,用户体验极其不好.后来网上搜优化的方法,就是Http压缩 ...
- http gzip压缩功能记录
版权声明:本文为博主原创文章,转载请附上原文出处链接. 本文链接:https://www.cnblogs.com/shaoshuai95928/articles/Tomcat.html 最近在spri ...
- ASP.NET Core如何使用压缩中间件提高Web应用程序性能
前言 压缩可以大大的降低我们Web服务器的响应速度,压缩从而提高我们网页的加载速度,以及节省一定的带宽. 何时使用相应压缩中间件 在IIS,Apache,Nginx中使用基于服务端的响应压缩技术.中间 ...
- TCP/IP详解,卷1:协议--链 路 层
引言 在 T C P / I P 协议族中,链路层主要有三个目的:(1)为 I P 模块发送和 接收 I P 数据报:(2)为 A R P 模块发送 A R P 请求和接收 A R P 应答:(3)为 ...
- 【原创】轻量级移动设备即时通讯技术MobileIMSDK的常见问题解答
申明:MobileIMSDK 目前为个人原创开源工程且已发布,现整理了一些有关MobileIMSDK的常见的问题,希望对需要的人有用,谢谢.如需与作者交流,见文章底部个人签名处,互相学习. Mobil ...
- python 连接 mysql
http://blog.csdn.net/yelbosh/article/details/7498641 数据库的连接 模块引入之后我们就需要和数据库进行连接了,实例代码如下: db = MySQLd ...
- MySQL主从复制技术(纯干货)
1.复制配置 主机一定要开启二进制日志(这里建议配置RBR) 每个主机和每个从机一定要配置一个位移的id,即server-id 每个从机配置一定要包含主机名称,日志名称,和位置 ...
- Python的MySQLdb模块安装,连接,操作,增删改
1. 首先确认python的版本为2.3.4以上,如果不是需要升级python的版本 python -V 检查python版本 2. 安装mysql, 比如安装在/usr/local/my ...
随机推荐
- 论文笔记:(CVPR2017)PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
目录 一. 存在的问题 二. 解决的方案 1.点云特征 2.解决方法 三. 网络结构 四. 理论证明 五.实验效果 1.应用 (1)分类: ModelNet40数据集 (2)部件分割:ShapeNet ...
- js控制单选按钮选中某一项
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...
- Spark的两种核心Shuffle详解
在 MapReduce 框架中, Shuffle 阶段是连接 Map 与 Reduce 之间的桥梁, Map 阶段通过 Shuffle 过程将数据输出到 Reduce 阶段中.由于 Shuffle 涉 ...
- Linux引导过程和服务过程
目录 一.Linux操作系统引导过程 1.1.开机自检 1.2.MBR引导 1.3.GRUB菜单 1.4.加载Linux内核 1.5.init进程初始化 二.系统初始化进程 2.1.init进程 2. ...
- Python3实现Two-Pass算法检测区域连通性
技术背景 连通性检测是图论中常常遇到的一个问题,我们可以用五子棋的思路来理解这个问题五子棋中,横.竖.斜相邻的两个棋子,被认为是相连接的,而一样的道理,在一个二维的图中,只要在横.竖.斜三个方向中的一 ...
- Android消息机制1-Handler(Java层)
一.概述 在整个Android的源码世界里,有两大利剑,其一是Binder IPC机制,,另一个便是消息机制(由Handler/Looper/MessageQueue等构成的). Android有大量 ...
- Python - typing 模块 —— TypeVar 泛型
前言 typing 是在 python 3.5 才有的模块 前置学习 Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html 常用类型提示 ...
- STM32—驱动BT-06蓝牙模块传输数据
文章目录 BT-06简介 数据透传 配置串口 USART1初始化函数 USART2初始化函数 USART2的NVIC配置 USART1串口重映射 BT-06简介 BT06蓝牙模块是专为智能无线数据传输 ...
- Spring中的@Transactional必须要了解的概念
spring中的@Transactional基于动态代理的机制,提供了一种透明的事务管理机制,方便快捷解决在开发中碰到的问题. 一般使用是通过如下代码对方法或接口或类注释: 1 @Transactio ...
- NOIP 模拟 $24\; \rm matrix$
题解 \(by\;zj\varphi\) 发现 \(\rm n,m\) 都很小,考虑分行状压. 但是上一行和下一行的按钮状态会对当前行造成影响,所以再枚举一个上一行的按钮状态. 因为对于两行,只有如下 ...