16.网络爬虫—字体反爬(实战演示)
网络爬虫—字体反爬
- 一·字体反爬原理
- 二·字体反爬模块Fonttools
- TTF文件
- 三·FontCreator 14.0.0.2790
- FontCreatorPortable下载与安装
- 四·实战演示
- 五·后记
前言:
🏘️🏘️个人简介:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证
📝📝第一篇文章《1.认识网络爬虫》获得全站热榜第一,python领域热榜第一
。
🧾 🧾第四篇文章《4.网络爬虫—Post请求(实战演示)》全站热榜第八
。
🧾 🧾第八篇文章《8.网络爬虫—正则表达式RE实战》全站热榜第十二
。
🧾 🧾第十篇文章《10.网络爬虫—MongoDB详讲与实战》全站热榜第八,领域热榜第二
🧾 🧾第十三篇文章《13.网络爬虫—多进程详讲(实战演示)》全站热榜第十二
。
🧾 🧾第十四篇文章《14.网络爬虫—selenium详讲》测试领域热榜第二十
。
🎁🎁《Python网络爬虫》专栏累计发表十五篇文章,上榜六篇。欢迎免费订阅!欢迎大家一起学习,一起成长!!
💕💕悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。
一·字体反爬原理
🧾 🧾 Python字体反爬原理是指爬虫在爬取网站数据时,遇到了基于字体反爬的防护措施。这种反爬措施是通过将网站的文字转换成特定的字体文件,然后在页面上引用该字体文件来显示文字,使得爬虫无法直接获取文字内容。
🧾 具体原理如下:
-
网站将需要显示的文字转换成特定的字体文件,通常是
TrueType
或OpenType
格式的字体文件。 -
网站在页面上引用该字体文件,并使用CSS样式将需要显示的文字的字体设置为该字体文件。
-
爬虫在获取页面源代码时,无法直接获取到需要显示的文字内容,只能获取到字体文件的引用地址。
-
爬虫可以通过下载字体文件并解析其中的映射关系,将字体文件中的编码与对应的文字内容进行匹配,从而获取到需要显示的文字内容。
-
为了增加反爬难度,网站通常会对字体文件进行加密或混淆,使得爬虫无法直接解析。
🧾 为了应对这种反爬措施,爬虫可以采用以下方法:
-
下载字体文件并解析映射关系,从而获取需要显示的文字内容。
-
使用OCR技术对图片中的文字进行识别,从而获取需要显示的文字内容。
-
使用第三方库或工具对字体文件进行解密或混淆,从而获取需要显示的文字内容。
🔔🔔需要注意的是,字体反爬技术是一种比较高级的反爬措施,需要爬虫具备一定的技术水平才能应对。此外,爬虫在使用字体反爬技术时也需要注意遵守相关法律法规和网站的使用规定。
二·字体反爬模块Fonttools
安装Fonttools
pip install fonttools
如图所示,表示安装完成!
FontTools是一个开源的Python库,用于处理和转换字体文件。它可以读取和写入OpenType(OTF)
和TrueType(TTF)
字体文件,以及其他各种字体格式。FontTools可以用于许多用途。
例如:
-
字体编辑
:可以使用FontTools来修改字体文件中的字形、轮廓、度量等属性。 -
字体转换
:可以将字体文件从一种格式转换为另一种格式,例如将TTF文件转换为OTF文件。 -
字体分析
:可以使用FontTools来分析字体文件中的元数据、字符集、度量等属性,以便于字体设计和排版。
TTF文件
🧾 🧾TTF文件是TrueType字体文件,是一种字体文件格式,通常用于在计算机和打印机上显示文本。它是一种可缩放的字体,可以在不失真的情况下进行缩放。TTF文件通常具有.ttf文件扩展名,可以在Windows、Mac和Linux等操作系统中使用。
三·FontCreator 14.0.0.2790
🧾 🧾 FontCreator 14.0.0.2790是一款专业的字体设计软件,由高级字体编辑器、字形插值器、字体转换器等多个工具组成。
- 它可以帮助用户创建自定义的字体,包括TrueType、OpenType、Web字体等多种格式。
- FontCreator14.0.0.2790提供了一个友好的用户界面,使得用户能够轻松地创建、编辑和修复字形、设置字符间距、调整字体度量等。
- 还支持多语言字体设计,用户可以添加和修改各种字符集。
- FontCreator 14.0.0.2790还可以进行字体转换,将不同格式的字体文件相互转换,方便用户在不同场景下使用。
FontCreatorPortable下载与安装
🎁🎁点击FontCreator 14.0.0.2790进入即可下载
提取码:a3e8
下载完成后是这样的:
打开需要查看的ttf文件
如图所示,被编码的文字
每一个编码对应一个图,对,下面这些0,1,2,3,4,5,6,7,这些对不是字体,而是一张图,所以在后续解码操作中,我们需要手动输入这些数据。
四·实战演示
🎯🎯本次实战以某招聘网站为目标,获取其中数据,并对字体加密进行破解操作
如图所示:
🎯我们想要爬取的数据被加密,我们来一步一步对其进行破解。
先按正常方式将数据获取到本地
# coding = utf-8
import crawlesurl = 'https://www.shixiseng.com/app/interns/search/v2'cookies = {'RANGERS_WEB_ID': '7222273943993026082','RANGERS_SAMPLE': '0.797004667731563','adCloseOpen': 'true','utm_source_first': 'PC','Hm_lvt_03465902f492a43ee3eb3543d81eba55': '1681566719,1681626579','adClose': 'true','SXS_XSESSION_ID': '\"2|1:0|10:1681626608|15:SXS_XSESSION_ID|48:ZmIzNDc2MDgtM2MxOS00ZGMzLTg1OWYtZjZmZjliODI3ODBm|e0c74e6e5b304e78720e68feddc1ebc596b09b541b03cab0ad8f542aa7782cf4\"','SXS_XSESSION_ID_EXP': '\"2|1:0|10:1681626608|19:SXS_XSESSION_ID_EXP|16:MTY4MTcxMzAwOA==|f0de0b3a4d7235bb497a86fab85289c792654792ec9114ede5cd4e213074f3ab\"','position': 'pc_search_syss','utm_source': 'PC','utm_campaign': 'PC','Hm_lpvt_03465902f492a43ee3eb3543d81eba55': '1681640297',
}headers = {'authority': 'www.shixiseng.com','accept': 'application/json, text/plain, */*','accept-language': 'zh-CN,zh;q=0.9','cache-control': 'no-cache','content-type': 'application/x-www-form-urlencoded','pragma': 'no-cache','referer': 'https://www.shixiseng.com/interns?page=2&type=intern&keyword=%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98&area&months&days°ree&official&enterprise&salary=-0&publishTime&sortType&city=%E5%85%A8%E5%9B%BD&internExtend','sec-ch-ua': '\"Chromium\";v=\"112\", \"Google Chrome\";v=\"112\", \"Not:A-Brand\";v=\"99\"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '\"Windows\"','sec-fetch-dest': 'empty','sec-fetch-mode': 'cors','sec-fetch-site': 'same-origin','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
}params = {'build_time': '1681640300905','page': '1','type': 'intern','keyword': '数据挖掘','area': '','months': '','days': '','degree': '','official': '','enterprise': '','salary': '-0','publishTime': '','sortType': '','city': '全国','internExtend': '',
}response = crawles.get(url, headers=headers, params=params, cookies=cookies)
response = crawles.get(url, headers=headers, params=params, cookies=cookies)
print(response.text)
for i in response.json['msg']['data']:print(i)
🎯这是我们通过代码获取到本地的数据:
🎯接下来我们需要找到解密用的文件,在这里面找关于font的文件:
@font-face { font-family: myFont; src: url(/interns/iconfonts/file?rand=0.7027418610803815);}
🎯对获取的链接发起请求(获取字体文件,帮助我们对加密文件进行解码)
# font字体文件
# 1,查找相关链接,或者文本
# 2.获取文件(url) @font-face { font-family: myFont; src: url(/interns/iconfonts/file?rand=0.7027418610803815);}
# 3.对获取的链接发起请求(获取字体文件,帮助我们对加密文件进行解码)# 
import requests# 将请求到的数据存放到内存中,以便其他地方直接使用import io
from fontTools.ttLib import TTFontfont_file_uel = 'https://www.shixiseng.com/interns/iconfonts/file'
# 将请求到的数据存放到内存中,以便其他地方直接使用
ttf = TTFont(io.BytesIO(requests.get(font_file_uel).content)) # 将获取的数据保存到ttf文件中ttf.save('sxs.ttf')
🎯然后我们得到一个ttf文件,我们使用上面安装的软件对该文件进行查看。
🎯我们将上述数据换成xml来查看,方便我们对其解码操作:
# font字体文件
# 1,查找相关链接,或者文本
# 2.获取文件(url) @font-face { font-family: myFont; src: url(/interns/iconfonts/file?rand=0.7027418610803815);}
# 3.对获取的链接发起请求(获取字体文件,帮助我们对加密文件进行解码)# 
import requests# 将请求到的数据存放到内存中,以便其他地方直接使用import io
from fontTools.ttLib import TTFontfont_file_uel = 'https://www.shixiseng.com/interns/iconfonts/file'
# 将请求到的数据存放到内存中,以便其他地方直接使用
ttf = TTFont(io.BytesIO(requests.get(font_file_uel).content)) # 将获取的数据保存到ttf文件中# ttf.save('sxs.ttf')ttf.saveXML('sxs.xml')
🎯我们的思路如下,将加密字体一步一步转成我们需要的字体,然后再获取出来:
 -> 0xe283 -> uni30 -> 数据索引 -> 文字
 -> 0xe714 -> uni35 -> 7 -> 5
import ref = open('sxs.xml', 'r', encoding='utf-8') # 将数据读取出来
file_data = f.read()
f.close()x = re.findall('<map code="0x(.*?)" name="(.*?)"/>', file_data)
glyph = re.findall('<GlyphID id="(.*?)" name="(.*?)"/>', file_data)glyph_dict = {k: v for v, k in glyph}str_data = '0123456789一师x会四计财场DHLPT聘招工d周L端p年hx设程二五天tXG前KO网SWcgkosw广市月个BF告NRVZ作bfjnrvz三互生人政AJEI件M行QUYaeim软qu银y联'
str_list = [' ', ''] + [i for i in str_data]x_dict = {f'&#x{k}': str_list[int(glyph_dict[v])] for k, v in x}
print(x_dict)
🎯如上图所示,我们解密了一部分字体来展示如何操作,现在对整个网页的加密数据进行字体解密操作,解密后的数据如图所示,我们对有用的数据进行整理:
🎯整理后的数据如下:
🎁🎁完整代码:
import crawles
import json
import re
import requests
import io
from fontTools.ttLib import TTFont # pip install fonttoolsurl = 'https://www.shixiseng.com/app/interns/search/v2'cookies = {'RANGERS_WEB_ID': '7222273943993026082','RANGERS_SAMPLE': '0.797004667731563','adCloseOpen': 'true','utm_source_first': 'PC','Hm_lvt_03465902f492a43ee3eb3543d81eba55': '1681566719,1681626579','adClose': 'true','SXS_XSESSION_ID': '\"2|1:0|10:1681626608|15:SXS_XSESSION_ID|48:ZmIzNDc2MDgtM2MxOS00ZGMzLTg1OWYtZjZmZjliODI3ODBm|e0c74e6e5b304e78720e68feddc1ebc596b09b541b03cab0ad8f542aa7782cf4\"','SXS_XSESSION_ID_EXP': '\"2|1:0|10:1681626608|19:SXS_XSESSION_ID_EXP|16:MTY4MTcxMzAwOA==|f0de0b3a4d7235bb497a86fab85289c792654792ec9114ede5cd4e213074f3ab\"','position': 'pc_search_syss','utm_source': 'PC','utm_campaign': 'PC','Hm_lpvt_03465902f492a43ee3eb3543d81eba55': '1681640297',
}headers = {'authority': 'www.shixiseng.com','accept': 'application/json, text/plain, */*','accept-language': 'zh-CN,zh;q=0.9','cache-control': 'no-cache','content-type': 'application/x-www-form-urlencoded','pragma': 'no-cache','referer': 'https://www.shixiseng.com/interns?page=2&type=intern&keyword=%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98&area&months&days°ree&official&enterprise&salary=-0&publishTime&sortType&city=%E5%85%A8%E5%9B%BD&internExtend','sec-ch-ua': '\"Chromium\";v=\"112\", \"Google Chrome\";v=\"112\", \"Not:A-Brand\";v=\"99\"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '\"Windows\"','sec-fetch-dest': 'empty','sec-fetch-mode': 'cors','sec-fetch-site': 'same-origin','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
}params = {'build_time': '1681640300905','page': '1','type': 'intern','keyword': '数据挖掘','area': '','months': '','days': '','degree': '','official': '','enterprise': '','salary': '-0','publishTime': '','sortType': '','city': '全国','internExtend': '',
}response = crawles.get(url, headers=headers, params=params, cookies=cookies)
text = response.text
# 存储ttf文件 用于分析和后续操作
font_file_uel = 'https://www.shixiseng.com/interns/iconfonts/file'
# 将请求到的数据存放到内存中,以便其他地方直接使用
ttf = TTFont(io.BytesIO(requests.get(font_file_uel).content))
# ttf.save('sxs.ttf')
ttf.saveXML('sxs.xml')# 读取xml文件
f = open('sxs.xml', 'r', encoding='utf-8')
file_data = f.read()
f.close()x = re.findall('<map code="0x(.*?)" name="(.*?)"/>', file_data)glyph = re.findall('<GlyphID id="(.*?)" name="(.*?)"/>', file_data)
glyph_dict = {k: v for v, k in glyph}str_data = '0123456789一师x会四计财场DHLPT聘招工d周L端p年hx设程二五天tXG前KO网SWcgkosw广市月个BF告NRVZ作bfjnrvz三互生人政AJEI件M行QUYaeim软qu银y联'
str_list = [' ', ''] + [i for i in str_data]x_dict = {f'&#x{k}': str_list[int(glyph_dict[v])] for k, v in x}
# print(x_dict)# 对整个文本数据进行替换解码操作
for k, v in x_dict.items():text = text.replace(k, v)# 将数据转化回方便使用的格式
text_1 = json.loads(text)for item in text_1['msg']['data']:max_salary = item['maxsal'] + '元/天' # 最高薪资min_salary = item['minsal'] + '元/天' # 最低薪资city = item['city'] # 所在城市scale = item['scale'] # 公司规模degree = item['degree'] # 学历要求c_tags = item['c_tags'] # 公司标签i_tags = item['i_tags'] # 实习标签name = item['name'] # 职位名称industry = item['industry'] # 所属行业print('最高薪资:', max_salary)print('最低薪资:', min_salary)print('所在城市:', city)print('公司规模:', scale)print('学历要求:', degree)print('公司标签:', c_tags)print('实习标签:', i_tags)print('职位名称:', name)print('所属行业:', industry)print(text_1)
五·后记
👉👉本专栏所有文章是博主学习笔记,仅供学习使用,爬虫只是一种技术,希望学习过的人能正确使用它。
博主也会定时一周三更爬虫相关技术更大家系统学习,如有问题,可以私信我,没有回,那我可能在上课或者睡觉,写作不易,感谢大家的支持!!🌹🌹🌹
相关文章:
16.网络爬虫—字体反爬(实战演示)
网络爬虫—字体反爬 一字体反爬原理二字体反爬模块FonttoolsTTF文件 三FontCreator 14.0.0.2790FontCreatorPortable下载与安装 四实战演示五后记 前言: 🏘️🏘️个人简介:以山河作礼。 🎖️🎖️:Python领域…...
BOM概述
目录 什么是BOM 浏览器对象模型(Browser Object Model (BOM)) Window对象 一些常用方法 JavaScript Window Screen Window Screen Window Screen 高度 Window Screen 可用宽度 Window Screen 可用高度 Window Screen 色深 Window Screen 像素深…...
3.Docker实用技术
Docker实用篇 0.学习目标 1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署…...
群体无人机:协同作战的未来
摘要:本文将探讨群体无人机技术的发展及其在多个领域的应用,特别是在军事作战、救援任务和物流方面的潜力。我们将分析群体无人机在协同作战中的优势,以及如何通过协同控制和通信技术实现更高效的任务完成。 内容: 引言 简要介绍…...
如何在Windows AD域中驻留ACL后门
前言 当拿下域控权限时,为了维持权限,常常需要驻留一些后门,从而达到长期控制的目的。Windows AD域后门五花八门,除了常规的的添加隐藏用户、启动项、计划任务、抓取登录时的密码,还有一些基于ACL的后门。 ACL介绍 …...
LVGL移植——stm32f4
LVGL移植说明 移植LVGL版本:8.3.6 主控:STM32F407ZGT6 github链接:https://github.com/lvgl/lvgl.git 文章目录 LVGL移植说明STM32移植LVGL①需要的依赖文件②移植显示驱动文件③将文件加入工程当中④配置心跳④修改栈堆的空间⑤编译链接 STM…...
ASEMI代理ADP5054ACPZ-R7原装ADI车规级ADP5054ACPZ-R7
编辑:ll ASEMI代理ADP5054ACPZ-R7原装ADI车规级ADP5054ACPZ-R7 型号:ADP5054ACPZ-R7 品牌:ADI/亚德诺 封装:LFCSP-48 批号:2023 引脚数量:48 工作温度:-40C~125C 安装类型:表…...
TCP/IP相关面试题
1. 什么是TCP/IP协议?它的作用是什么? TCP/IP(Transmission Control Protocol/Internet Protocol)互联网中最常用的协议,是计算机网络通信的基础。由TCP协议和IP协议两部分组成。IP协议负责数据的传输和路由选择&#…...
MySQL数据库——MySQL存储过程是什么?
我们前面所学习的 MySQL 语句都是针对一个表或几个表的单条 SQL 语句,但是在数据库的实际操作中,经常会有需要多条 SQL 语句处理多个表才能完成的操作。 例如,为了确认学生能否毕业,需要同时查询学生档案表、成绩表和综合表&…...
消息队列中的事务消息
大家好,我是易安!今天我们谈一谈消息队列中的事务消息这个话题。 一说起事务,你可能自然会联想到数据库。我们日常使用事务的场景,绝大部分都是在操作数据库的时候。像MySQL、Oracle这些主流的关系型数据库,也都提供了…...
03. 路由参数.重定向.视图
学习要点: 1.路由参数 2.路由重定向 3.路由视图 本节课我们来开始进入学习路由的参数设置、重定向和路由的视图。 一.路由参数 1. 上一节课,我们已经学习了部分路由参数的功能,比如动态传递{id}; 2. 那么,有…...
Flowable入门
Flowable初体验 Flowable是什么 Flowable 是一个使用 Java 编写的轻量级业务流程引擎,常用于需要人工审批相关的业务,比如请假、报销、采购等业务。 为什么要使用工作流呢? 对于复杂的业务流程,通过数据库的状态字段难以控制和…...
Scala Option类型,异常处理,IO,高阶函数
Option类型 实际开发中, 在返回一些数据时, 难免会遇到空指针异常(NullPointerException), 遇到一次就处理一次相对来讲还是比较繁琐的. 在Scala中, 我们返回某些数据时,可以返回一个Option类型的对象来封装具体的数据,从而实现有效的避免空指针异常。S…...
unity进阶学习笔记:单例模式
游戏框架: 游戏框架一般包括消息框架,状态机,管理器,工具类。 消息框架指游戏物体之的通信框架,虽然unity引擎自带一套消息框架,但该框架只能用于父子物体之间通信,无法实现大部分非父子关系的…...
软件测试——性能指标
登录功能示例: 并发用户数500; 响应时间2S; TPS到500; CPU不得超过75%; 性能指标有哪些? 响应时间 并发用户数 TPS CPU 内存 磁盘吞吐量 网络吞吐量 移动端FPS 移动端耗电量 APP启动时间 性能…...
leetcode 405. 数字转换为十六进制数
题目描述解题思路执行结果 leetcode 405. 数字转换为十六进制数. 题目描述 数字转换为十六进制数 给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制…...
部门来了个软件测试,听说是00后,上来一顿操作给我看呆了...
前段时间公司新来了个同事,听说大学是学的广告专业,因为喜欢IT行业就找了个培训班,后来在一家小公司干了三年,现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍,服务器缩减一半,性能反而提升4倍!给…...
使用篇丨链路追踪(Tracing)很简单:链路拓扑
作者:涯海 最近一年,小玉所在的业务部门发起了轰轰烈烈的微服务化运动,大量业务中台应用被拆分成更细粒度的微服务应用。为了迎接即将到来的双十一大促重保活动,小玉的主管让她在一周内梳理出订单中心的全局关键上下游依赖&#…...
2023年厦门等保二级备案办理流程
根据规定,已运营/运行或新建的第二级以上信息系统的企业,事业单位/行政机关/民办非企业单位/社团组织/其他组织必须办理等保备案。 2023年厦门等保二级备案办理流程 办理机构:公安局 办结时限:受理后10个工作日 办理方式:网上…...
提高开发效率,从这些小技巧开始——5个让你爱上IDEA的增加体验小技巧
前言 如果你是一名Java开发人员,那么你一定会使用IntelliJ IDEA这个IDE。IntelliJ IDEA作为目前最受欢迎的Java IDE之一,已经成为了众多Java开发人员必备的工具之一。但是,你是否知道如何利用IDEA中的一些小技巧来提高你的开发效率和体验呢&a…...
Python基础合集 练习22 (错误与异常处理语句2)
‘’’ try: 语句块 except: 语句块2 else ‘’’ class Mobe1(): def init(self) -> None: pass def mob1(self):while True:try:num int(input(请输入一个数: ))result 50 / numprint(result)print(50/{0}{1}.format(num, result))except (ZeroDivisionError, ValueEr…...
ELK -- kibana 用nginx代理后无法访问
背景: 本地搭建好elk后,一切正常,后面改成用nginx代理kibana的5601端口,发现代理后无法正常访问(未代理的地址可正常访问),花了很多时间去查问题,报错基本都是http://ip:port/spaces…...
什么是分布式事务
目录 分布式事务基础 事务 本地事务 分布式事务 分布式事务的场景 分布式事务解决方案 全局事务 优点 缺点 可靠消息服务 第一步 :消息由系统A投递到中间件 超时访问机制 最大努力通知 第一步:消息由系统A投递到中间件 第二步:消息…...
在 Python 中将整数转换为罗马数字
罗马数字使用以下七个符号书写。 Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000这些符号用于表示数以千计的数字。 罗马写20,可以用两个X拼成XX。 但是 XXXX 不…...
HashTable,Properties,TreeSet源码分析
目录 HashTable基本介绍 Hashtable和HashMap对比 Properties Properties基本介绍 应该如何选择集合 TreeSet源码分析 HashTable基本介绍 1)存放的元素是键值对:即K-V 2)hashtable的键和值都不能为null,否则会抛出NullPointerException 3)hashTab…...
多维图像去噪方法研究
一、背景介绍 由于传感器技术的快速发展,高光谱(HS)遥感(RS)成像为飞机等数据采集设备远距离观测和分析地球表面提供了大量的空间和光谱信息,航天器和卫星。 HS RS 技术的最新进展甚至革命为实现各种应用的…...
托福口语考察内容和形式
首先我们来简单介绍一下托福口语考试的构成和task1的任务形式。 目录 TOEFL Speaking Test Format Independent Task 1 Task 1 Test Format Task 1 Testing Interface(考试界面) Task 1 Question Type...
【地铁上的设计模式】--结构型模式:代理模式
什么是代理模式 代理模式是一种结构型设计模式,通过代理对象控制对原始对象的访问。代理对象充当客户端和实际对象之间的中介,隐藏了实际对象的复杂性,并提供了一些额外的控制。 在软件系统中,代理模式可以有多种应用。例如&…...
Oracle 体系结构
文章目录 Oracle体系结构Oracle的内存结构Oracle的进程结构服务器进程后台进程可选后台进程 物理存储结构逻辑存储结构 概念: Oracle server由Oracle instance和Oracle database组成,Oracle instance由后台进程和共享内存组成,Oracle的实例包…...
java手写日历系统(亲测)
package com.test.test02;import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Scanner;public class Test08 {//这是一个main方法,是程序的入口public static void main(String[] args) {//录入日期的StringScanner sc new Scanner…...
云服务器做网站一般配置/龙岗网站建设
一在搭建开发板前先看一下STC单片机的用户手册。 看完这些应该对该款单片机有所了解,对初次接触单片机的人,可能还是有点云里雾里的感觉,这没关系,很正常。 再看下管脚图: 手册中还提供了最小系统原理图,如…...
专业网站开发费用/链接点击量软件
前面学习了 at 命令,此命令在指定的时间仅能执行一次任务,但在实际工作中,系统的定时任务一般是需要重复执行的。而 at 命令显然无法满足需求,这是就需要使用 crontab 命令来执行循环定时任务。在介绍 crontab 命令之前࿰…...
南宁网站建设怎么样/跨境电商平台排行榜前十名
/* reference http://nehe.gamedev.net/article/using_gluunproject/16013/ */#include <windows.h> // windows系统要加这个。因为下面2个头文件的一些宏是在这个文件中定义的 #include <gl/Gl.h> #include <gl/glut.h> //这两个头文件在OpenGL程序中…...
具有价值的专业网站建设平台/品牌运营
提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就是转账,你要给朋友小王转100块钱,而此时你的银行卡只有 100 块钱。 转账过程具体到程序里有一系列的操作,比如查询余额、做…...
免费做三级网站/百度学术论文查重免费
循环扇在美国是一个比较常见的家电产品,它的作用是通过循环空气来改善室内空气流通,使室内温度更加舒适。对于循环扇,美国人关注的主要点是性能、价格、耐用性和使用便捷性。 在性能方面,美国人更加关注循环扇的效率和噪音水平。他…...
bae wordpress 3.8/新浪舆情通
版本:myeclipse6.5 设置项目默认编码1.myEclipse默认的新项目的编码是GBK变为UTF-8:Window->Preferences->General->Workspace->Text file encoding 将其改为UFT-8即可.js和jsp统一UTF-8:优化myEclipse启动速度 1.禁用myeclipse updating indexes ,用…...