搜档网
当前位置:搜档网 › Webkit内核调用细节过程分析

Webkit内核调用细节过程分析

Webkit内核调用细节过程分析
Webkit内核调用细节过程分析

WinLauncher通过WebKitCOMAPI 调用WebKitClassFactory::CreateInstance, 获得WebView的COM实例,通过该实例获得IWebViewPrivate接口,然后将class WinLauncherWebHost : public IWebFrameLoadDelegate作为参数传给WebView。

然后将已经创建的窗口参数传给Webview,并进行Frame初始化IWebFrameLoadDelegate,通过registerWebViewWindowClass()注册消息处理函数WebView::WebViewWndProc,创建m_viewWindow,触发消息处理函数WebView::WebViewWndProc,

注意:之后初始化initWithFrame过程中进行了Settings::setDefaultMinDOMTimerInterval(0.004);

WebFrame* webFrame = WebFrame::createInstance();

RefPtr coreFrame = webFrame->init(this, m_page, 0);

WebKit.dll!WebCore::HTMLDocument::create(WebCore::Frame * frame=0x00e5eb90, const WebCore::KURL & url={...}) 行40 + 0x26 字节C++

WebKit.dll!WebCore::DOMImplementation::createDocument(const WTF::String & type={...}, WebCore::Frame * frame=0x00e5eb90, const WebCore::KURL & url={...}, bool inViewSourceMode=false) 行388 + 0x11 字节C++

WebKit.dll!WebCore::DocumentWriter::createDocument(const WebCore::KURL & url={...}) 行107 + 0x25 字节C++

WebKit.dll!WebCore::DocumentWriter::begin(const WebCore::KURL & urlReference={...}, bool dispatch=false, WebCore::Document * ownerDocument=0x00000000) 行119 + 0x10 字节C++

WebKit.dll!WebCore::FrameLoader::init() 行224 + 0x2c 字节C++

> WebKit.dll!WebCore::Frame::init() 行262 C++

WebKit.dll!WebView::initWithFrame(tagRECT frame={...}, wchar_t * frameName=0x00000000, wchar_t * groupName=0x00000000) 行2723 C++

Webview的初始化中需要缺省的url,其中包括frame实际上是FrameLoader的init,负责利用DocumentWriter调用DOMImplementation生成缺省的HTMLDocument.

HTMLDocument继承Document,和CachedResourceClient,当遇到URL请求时,WinLauncher->loadURL先通过

WebKitCreateInstance(CLSID_WebMutableURLRequest, 0, IID_IWebMutableURLRequest, (void**)&request);获得请求(WebMutableURLRequest)request,然后WebFrame::loadRequest进行处理。WebMutableURLRequest中包含ResourceRequest变量。

WebCore内核本身并不实现http协议,它通过调用不同平台的http库,比如Qt的QnetWorkRequest,gtk的soup,或者curl等,来实现http协议的功能。这里将以curl为例,来理解webcore中的请求信息维护。

http协议的细节,如果希望深入了解的话,可以参考rfc2616,rfc2617。简单介绍下它的原理,http协议遵循的是一个请求à响应的机制。也就是说,一个url,对应一个请求à响应链。而在网页中,任何资源对应的都是一个url。如果客户端想从服务器端申请一个资源,需要发起一个请求,http的请求格式是纯文本格式,如下是一个简单的例子:

https://www.sodocs.net/doc/144282204.html,,中国领先的it技术社区 …………………………….

这样,一个http请求就完成了,流程非常简单明了,所以在互联网上使用特别广泛。由于只是一个简单的请求à响应机制,所以http是没有状态这一个说法的(这同大部分协议基于状态机的机制是不同的),当然,为了在某些情况下,维护一个状态,http加入了cookie的管理机制,利用cookie来实现了一些状态的管理。另外,为了节约网络流量,提高性能,http协议中定义了cache的机制。

http的协议细节实现并不需要WebCore来关注,WebCore要关注的是,如何设置请求的相关头部信息,如何获取服务器返回回来的响应体部数据。

WebKit中同http打交道的类主要是ResourceRequest,ResourceResonse,ResourceHandle*,ResourceHandleManager等,这里先介绍同请求信息维护相关的ResourceRequest. ResourceRequest类的作用比较好理解,基本上就是维护http请求相关的信息(app或者内核都有可能设置这些信息),然后当WebCore发起http请求的时候,可以获取这些信息,调用curl的接口设置对应的http请求字段。在这些信息中,最常用到的是url。

ResourceRequest类继承于ResourceRequestBase类,绝大部分功能在ResourceRequestBase类中实现。

一)ResourceRequest构造:构造一个ResourceRequest对象只需要url参数就够了,这是比较简单的一个类,没有维护其它类的对象或者句柄。

ResourceRequest(const String& url);ResourceRequest(const KURL& url);

二)ResourceRequest对象的创建与维护

1.当用户输入网址,开始一个网页的请求的时候,会调用QwebFrame::load函数,在该函数中,会构造出ResourceRequest对象,并将这个对象作为一个参数,调用FrameLoader 类的load函数,DocumentLoader类中会维护这个ResourceRequest,在调用MainResourceLoader的load接口的时候,也会把ResourceRequest对象传递过去,在MainResourceLoader 中维护相应的信息。当MainResourceLoader类loadNow接口的时候,又会在创建的ResourceHandle的内部数据结构成员(ResourceHandleInternal)d中维护ResourceRequest对象。

2.

点击一个链接的时候,也会通过FrameLoader类的urlSelected发出一个新的请求,在发起请求的时候构造出ResourceRequest对象。同样也会在DocumentLoader、MainResourceLoader 和ResourceHandle类中都维护ResourceRequest对象。

3.

根据资源的种类,除了1和2,请求还可以分为子桢请求(如iframe标签),Css请求,Script请求,Image请求,Object请求,Media请求,Worker请求(HTML5),Prefetch请求等,参考ResourceRequestBase类中的TargetType 枚举。

4.

ResourceHandleManager(/curl)类的initializeHandle函数中,会通过ResourceHandle类来访问ResourceRequest对象,获取之前设置过的ResourceRequest的信息(比如url,method,user- agent,referer等),调用curl_easy_setopt接口,设置到curl里面。

5.FrameLoader

类的addExtraFieldsToRequest接口会设置一些请求头的信息。

6.DocumentLoader

对应的请求是不停地在变化的(比如发生重定向),所以结构中维护了多个ResourceRequest对象,这些对象可能不一样

三)其它

在这个类中,还可以通过cachePolicy,setCachePolicy,allowCookies,setAllowCookies在WebKit和http之间建立起控制的通道

浏览器简介

浏览器简介 浏览器是最经常使用到的客户端程序. 浏览器最核心的部分是渲染引擎(Rendering Engine),我们一般习惯称之为“浏览器内核”,其负责解析网页语法(如标准通用标记语言的子集HTML、JavaScript)并渲染、展示网页。因此,所谓的浏览器内核通常也就是指浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解析也有所不同,因此同一网页在不同的内核浏览器里的渲染、展示效果也可能不同。 一、内核区分 1. IE内核。包括360安全浏览器、IE、 Green browser、 Maxthon2、世界之窗、刚开始的搜狗浏览器。 2. Chrome内核。如 Chrome浏览器。 3. Firefox。火狐浏览器,适合开发人员调试,但一般人平时用比较慢,打开浏览器就超过1分钟。 4. 双核(IE和chrome/web kit内核)。双核的意思是一般网页用chrome内核(即web kit或高速模式)打开,网银等指定的网页用IE内核打开。如360高速浏览器,搜狗高速浏览器,并不是1个网页同时用2个内核处理。 二、IE内核浏览器相对于非IE内核浏览器(如chrome,firefox,双核浏览器)有如下区别点: 1、只有IE内核才能打开所有网页 在中国,只有IE内核浏览器才能兼容所有网页(正常打开所有网页), 因为在中国,IE市场份额最大,所有网站开发者及其老板,都会做到其网站在IE浏览器下正常显示, 在网站最下面会写上: 推荐用IE浏览器浏览本网页, 意思就是兼容IE内核的浏览器. 由于开发时间及测试人力,时间的限制,很多网站并没有兼容非IE内核的浏览器, 所以在chrome内核及双核浏览器(一般用chrome内核浏

四川大学编译原理期末复习总结

一、简答题 1.什么是编译程序 答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序。 将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。 2.请写出文法的形式定义 答:一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S) –其中Vn表示非终结符号 –Vt表示终结符号,Vn∪Vt=V(字母表),Vn∩Vt=φ –S是开始符号, –P是产生式,形如:α→β(α∈V+且至少含有一个非终结符号,β∈V*) 3.语法分析阶段的功能是什么 答:在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:程序、语句、表达式)。确定整个输入串是否构成语法上正确的程序。 4.局部优化有哪些常用的技术 答:优化技术1—删除公共子表达式 优化技术2—复写传播 优化技术3—删除无用代码 优化技术4—对程序进行代数恒等变换(降低运算强度) 优化技术5—代码外提 优化技术6—强度削弱 优化技术7—删除归纳变量 优化技术简介——对程序进行代数恒等变换(代数简化) 优化技术简介——对程序进行代数恒等变换(合并已知量) 5.编译过程分哪几个阶段 答:逻辑上分五个阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成。每个阶段把源程序从一种表示变换成另一种表示。 6. 什么是文法 答:文法是描述语言的语法结构的形式规则。是一种工具,它可用于严格定义句子的结构; 用有穷的规则刻划无穷的集合;文法是被用来精确而无歧义地描述语言的句子的构成方式;文法描述语言的时候不考虑语言的含义。 7. 语义分析阶段的功能是什么 答:对语法分析所识别出的各类语法范畴分析其含义,进行初步的翻译(翻译成中间代码); 并对静态语义进行审查。 8.代码优化须遵循哪些原则 答:等价原则:不改变运行结果 有效原则:优化后时间更短,占用空间更少 合算原则:应用较低的代价取得较好的优化效果 9.词法分析阶段的功能是什么 答:

android课程设计报告(数独游戏)讲解

河南科技学院 《物联网移动应用开发》课程设计报告 设计题目:基于android的数独游戏设计 班级:物联网131 学号:2013156555 姓名:胡建刚 指导教师:许睿 成绩:

信息工程学院 课程设计报告说明 一、写报告前,请认真阅读《课程设计报告说明》。 二、打印装订要求 1、一律用A4纸,双面打印,并左侧装订。报告正文部分均 采用宋体小四。《课程设计报告说明》页也打印。 2、课程设计概述部分占一页;课程设计内容长度根据实际需要填写;结论和指导教师评语及成绩单独占一页。保证打印格式工整。 3、指导教师评语及成绩部分由指导教师填写。 三、报告内容要求 1、课程设计目的结合实际自己写,不要雷同。 2、课程设计原理简要说明所完成课程设计项目所涉及的理论 知识。 3、课程设计内容这是课程设计报告极其重要的内容。概括整个课程设计过程。(最好在上述内容基础上画出相应的流图、 设计思路和设计方法,再配以相应的文字进行说明。)

一、课程设计概述 1、课程设计目的 通过对android的学习,编写除了这个数独游戏,掌握android的控件知识的使用,和界面的制作。对java知识的应用。这样不仅对自身android的学习可以更上一层楼,而且这个游戏可以锻炼智力,游戏简单,适合多人群游戏,健康,益智的 游戏。 2、课程设计要求 1. 熟悉eclipse开发软件,熟练使用java和xml。 2. 学习和掌握android的四大组件的使用。 3. 熟练掌握Android 游戏开发多线程技术、Android 游戏开发的图形处理技术等。 4. 完成程序的编写工作。 5. 完成程序在模拟器上的实现,以及在安卓手机上的功能实现,并完成优化。 3、课程设计原理 基于数独游戏规则,通过java建立一系列的算法。然后利用android的控件知识建立一系列的界面。包括背景的制作。

浏览器核心对照及浏览器选择标准

浏览器核心对照及浏览器选择标准浏浏浏浏浏浏浏浏浏浏浏浏器核心照及器准 本文介绍绍绍器核心知绍及绍绍器绍绍中的注意事绍~源起在易上看到绍于巨绍火几个网拼 “核”绍绍器一文~由衷的佩服某些人吹牛造绍的本事~居然绍拿绍老掉牙的绍绍做双个 宣绍~殊不知绍在的绍用绍除了“行”的免疫用绍就是“不太行”被安用绍网懂懂装~Firefox早就有绍似的很IE核模绍绍展。但不管绍绍~看看绍白金的告效果就知道~怎广 国内真会来绍境正需要的就是要利用无知~但绍不能明绍~否绍就招漫绍。一、绍绍器核心做知多少 任何绍绍器绍绍~都不绍绍绍器核心或者叫引擎都可以~然绍所绍的核心只是人绍定离当个划 的;绍绍可以降低模绍之绍的合度,~就像是包绍子~可以使用绍成的绍子绍也可以自耦你 己做绍~如果是自己做绍也可以直接绍拌到一起去做成肉绍~照绍也是绍绍器。除了早期的绍绍器核心“绍家”之初~核念需要持绍修改完善之外~目前绍绍器核心内概 已绍日绍成熟~有商绍核也有非商绍核~绍有绍用核等等~最流行的是绍四绍绍绍器核内内内 心,Trident核、内WebKit核、内Gecko核和内Presto核。内 绍四绍核流行也是大家绍始接款主流绍绍器才绍始的。大家常用的绍绍器乎都是内从触几几

在绍核心接口上绍绍的~绍再绍回~每核绍是有其原始的娘家~那就是,来个内 Trident核内——Internet Explorer~绍核也不是微绍的原绍~而是在个内NACA MOSAIC基绍上绍绍而~绍来Trident核心而言~微绍是最大的绍者;献更多,。WebKit核内——Safari~WebKit核心本源于KDE下的KHTML和KJS~果注的苹册商绍~按照GPL绍绍WebKit也绍源~绍WebKit而言果公司是最大绍者;苹献更多,。Gecko核内——Firefox~Gecko核心原由景公司绍绍~绍在由网Mozilla 基金及全世界会粉绍绍工绍绍~Mozilla是最大绍者;献更多,。 Presto核内——Opera~Opera是绍件公司~在个90年代~微绍和景是绍绍器市绍的三跟网 大主力~所以Opera是Presto核心的最大绍者;献更多,。 其绍有些核心要绍是果系绍绍用~要绍是非主流~不再介绍~有绍趣的绍者可以考,它苹参 所以除此上述提到的绍绍器之外~其绍绍器全是追者~下面绍绍源于绍基百科。它随插来 二、主流绍绍器核心绍照下面看一下主流绍绍器核心情~绍照表如下绍,况 Internet Explorer、游遨(Maxthon)、绍绍TT、世界之窗(The 基于Trident 核内world)、 360 绍绍器、Green Browser Safari、Google Chrome、Midori基于WebKit核内Mozilla Firefox、Camino 基于Gecko核内 基于Presto核;商内Opera绍核,内 上表中~除了IE、Safari、Firefox、Opera是正宗核心派外~其余的全是追者随;Presto由于是商绍核~所以追者比绍少也正常,~包括内随很Google chrome。最磨的绍蹭属Trident核;俗内称IE核心,~天绍绍绍微绍一直

编译原理课程设计心得体会范文(单片机)

编译原理课程设计心得体会范文(单片机)经过一个星期的编译原理课程设计,本人在刘贞老师的指导下,顺利完成该课程设计。通过该课程设计,收获颇多。 一、对实验原理有更深的理解 通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解,课本上的知识师机械的,表面的。通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。 二、对该理论在实践中的应用有深刻的理解 通过把该算法的内容,算法的执行顺序在计算机上实现,知道和理解了该理论在计算机中是怎样执行的,对该理论在实践中的应用有深刻的理解。 三、激发了学习的积极性 通过该课程设计,全面系统的理解了编译原理程序构造的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。以前对与计算机操 作系统的认识是模糊的,概念上的,现在通过自己动手做实验,

从实践上认识了操作系统是如何处理命令的,如何协调计算机内部各个部件运行,对计算机编译原理的认识更加深刻。课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。 在这次课程设计中,我就是按照实验指导的思想来完成。加深了理解文件系统的内部功能及内部实现,培养实践动手能力和程序开发能力的目的。 四、理解了该知识点以及学科之间的融合渗透 本次课程设计程序部分是用c语言编写的,把《计算机操作系统》,《编译原理》,《算法分析与设计》《c语言》四门学科联系起来,把 各个学科之间的知识融合起来,把各门课程的知识联系起来,对计算机整体的认识更加深刻。使我加深了对《计算机操作系统》,《编译原理》,《算法分析与设计》《c语言》四门课程的认识。 嵌入式课程设计心得体会 本学期为期一周的嵌入式课程设计在不知不觉中结束了,虽说这次课程设计时间不是很长,但是感觉自己收获颇丰,不仅学习到了一些新知识,回顾了以前的一些快要遗忘的知识点,而且使自己的学习目标更加明确,学习方法更加完善,也体会到软件开发的趣味,更加清楚地认识到了自己在软件开发及学习上的一些不足之处。下面就来详细写一下我关于此次课程设计的心得体会: 此次课程设计的实训的是由上海杰普公司的楚老师带我们完成的。楚老师看上去比较年轻,给我们很有亲和力,技术上也很强,而

编译原理学习心得

编译原理学习心得 编译原理学习心得1 编译程序在计算机科学与技术的发展历史中发挥了巨大作用,是计算机系统的核心支撑软件。而“编译原理”这门课程一直以来是国内外大学计算机相关专业的重要课程。因为它的知识结构贯穿程序设计语言、系统环境以及体系结构,能以相对的视角体现从软件到硬件以及软硬件协同的整机概念。其理论基础又涉及形式语言与自动机、数据结构与算法等计算机学科的许多重要方面,为联系计算机科学理论和计算机系统的典范。 虽然编译原理这门课程在大多数的人里认为枯燥无味,学起来就像看天书一样。然而学习这门课程还是有一定的好处的。比如可以更加容易的理解在一个语言种哪些写法是等价的,哪些是有差异的,可以更加客观的比较不同语言的差异,并且学习新的语言的效率也会更加高,语言转换也会更加游刃有余。 不学“编译原理”这门课程的话,自己的编程思想会很浅显。而且编程也只仅仅停留在编程上,无法深入理解其中的原理。 学习编译原理的话,从文法、正规式、NFA与DFA的定义,下手,要用心动脑去体会 编译原理学习心得2

从联系最紧密的操作系统来说吧,你写多线程/多进程的程序就得和操作系统的知识打交道。写多线程得加锁吧,临界区、死锁的四个条件之类的标准的操作系统的内容吧(不得不吐槽一下,某国内一线电商干了三年的程序猿,写多线程居然不知道加锁,也是醉了)。进程间通信的几种方式什么管道、socket、共享内存等,这也是操作系统的内容吧。文件系统,这也是经常要打交道的东西。还有内存什么的,你做Android 开发,这些里边有很多东西都在系统层面被封装好了,但是你要是不知道原理,一旦出了错根本无从调试,况且你该不会打算写一辈子写Android 就是填逻辑吧。 然后,是编译原理,普通的程序猿是接触不到编译器或者虚拟机的开发的。但是这并不意味着编译原理就用不到。说个最常见的读取配置文件,只要你的配置文件有自定义的语法,你就要用编译原理的东西。还有类似于自动生成代码啦、正则表达式啦这些都算是编译原理的内容。你既然是写Java 的不了解虚拟机怎么可以,最基本的字节码总是需要能看懂的吧,分析一些疑难杂症的时候字节码还是很有用的。 最后,是计算机原理,如果只是做应用开发的话计算机原理其实不必要掌握的多深入,但是一些基本的概念还是要清楚的。比如寄存器、缓存、中断什么的,关键的时候可以帮助你调试。在一些对性能要求非常高的场合,也是很有作用的。此外,学了

Android系统调研报告

Android系统调研报告 摘要:Android手机操作系统自Google公司推出以来,经过两年的发展,已经成长为仅次于Aymbian的巨头,成为众多移动终端生产商和应用程序开发者青睐的选择。这次调研分析了Android系统的特点,介绍了Android系统构架、市场占有率、各版本的更新,以及对硬件的要求。简单分析了Android能取得成功的原因,以及Android的发展面临的困难和问题。 关键字:Android、智能手机系统、Android系统构架、Android版本、Android 发展问题 一、Android简介 Android 是Google历经数年和投资数亿美元开发出来的智能手机系统,是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。Google也发起了围绕Android的组织——开放手机联盟,其英文全称为“Open Handset Alliance”。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。 随着各大移动终端生产商大力开发和生产基于Android的移动智能设备,Android迅速得到业界和社会的认可,并成为整个产业的热点,基于Android平台的各类人才逐渐成为各大企业竞相争夺的焦点。而且Android是一个开放的系统,不管是企业还是个人都可以参与来表达自己的创意和想法。

二、Android发展历程

三、Android特点 Android手机操作系统的推出,大大受到广大编程人员的喜爱。那么它究竟有什么出色的特点吸引着人们的眼光呢这里总结了一些Android特点,以供对此有兴趣的朋友参考学习。 1. Android是什么 Android是一个平台,主要包括Linux微内核,中间件(SQLite等),关键应用(电话本、邮件、短消息、GoogleMap、浏览器等),提供的Java框架,以及Android中的JVM。 特点之关键类 视图,ContentProviders(应用交互管理类)、ResourceManager非编码资源管理类、NotificationManager(通告管理类)、ActivityManager(生命周期管理类)。 特点之界面开发

蓝光浏览器:真正好用的IE内核浏览器

蓝光浏览器:真正好用的IE内核浏览器蓝光浏览器:真正好用的IE内核浏览器 很多人一谈到浏览器就会想到 Internet Explorer,我们简称它为IE。确实在生活中用到最多的就是这个浏览器了,很多人只用这个浏览器,甚至有些人在意识里只有这个浏览器。今天分享给大家一款IE内核的浏览器-----蓝光浏览器。 从字面上来看双核浏览器,似乎比IE浏览器更快。其不然,浏览器的双核是一般网页用chrome内核打开,网银等指定的网页用IE内核打开。并不是一个网页同时用2个内核进行处理,和双核CPU根本不是一个概念;IE内核浏览器只要打好IE升级补丁就具备了安全防护或性能优化,而双核浏览器在chrome内核升级后, 必须拿到chrome内核源码, 重新编译测试其浏览器,然后升级双核浏览器本身, 才能升级chrome内核。这个过程就有很长的一个时间差, 如果双核浏览器原先就修改了chrome内核源码, 要做到同步升级就更加不可能了,所以相对来说IE内核比双核更安全;在中国,只有IE内核浏览器才能兼容所有网页,所以蓝光浏览器采用全球兼容性最佳的Trident引擎,无插件,具备最小体积和最快启动速度的同时拥有先进的崩溃恢复和防假死技术,保证良好兼容性的同时极大提升网页浏览速度。蓝光浏览器可以一键解决上不了网,上网崩溃,访问慢,看不了视频,没有声音等一系列的问题。在网页工具栏中用户可以自由选择要清除的项目用户也可以设置成在关闭蓝光浏览器时自动清除这些数据。 蓝光团队就是要为用户打造真正好用的IE内核浏览器、绿色浏览器:小巧、快速、稳定,彻底解决用户的上网问题。2秒下载,1秒安装,0.1秒启动,大小只有1.7M,并且使用起来极其简单。

编译原理课程设计心得体会

编译原理课程设计心得体会 假期期间我参加了由高平市教育局组织的构建高效课堂的培训,课题是三环节问题导学课课堂教学模式,张艳红老师论述了课堂是教学的主要阵地之一,是教师传授知识、学生学习知识的场所,教师和学生交往互动的空间,是教师引导学生发展、探究知识的主渠道,也是实现高效教学的主战场。要提高英语教学质量,就必须重视英语课堂教学,实现有效课堂教学。教师如何优化课堂教学,激发学生学习英语的兴趣,培养学生良好的英语学习习惯,通过这次理论学习和培训,使我对课堂有效教学有了更深刻的认知: 经过一个星期的编译原理课程设计,本人在老师的指导下,顺利完成该课程设计。通过该课程设计,收获颇多。 一、对实验原理有更深的理解 通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解,课本上的知识师机械的,表面的。通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。 二、对该理论在实践中的应用有深刻的理解 要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。 通过把该算法的内容,算法的执行顺序在计算机上实现,知道和理解了该理论在计算机中是怎样执行的,对该理论在实践中的应用有深刻的理解。 自1987年就和程永革一起共事的歌舞话剧团演唱队队长骆汉泉含泪说道:“永革是我的好兄弟,这么多年,我们一起排练、演出,他的敬业精神一直留在我的脑海中,他的艺术才华和人品都给我们留下了深刻的印象。作为艺术人才,他尽职尽责,用自己的生命演绎出人生的追求。虽然他已经离我们而去,但是他难能可贵的责任担当和执着敬业的奉献精神一直感染着我们,我们也将在今后的工作中,以他为榜样,演好戏、做好人。” 月27日,全县《科学》教研会在城内小学召开。与其它学科教研会不同的是,《科学》教研会不是对新课标进行培训,而是科学课高效课堂的培训。原因是新拟定的《科学课程标准》还没有正式颁布。这次会议,全县专兼职老师一共100多人,观摩了三节高效课堂教学,聆听了龚主任所作的“构建自主探究式的高效课堂”专题讲座。

Python网络爬虫实习报告

Python网络爬虫实习报告

目录 一、选题背景.................................................................................... - 1 - 二、爬虫原理.................................................................................... - 1 - 三、爬虫历史和分类......................................................................... - 1 - 四、常用爬虫框架比较..................................................................... - 1 - 五、数据爬取实战(豆瓣网爬取电影数据)................................... - 2 -1分析网页 .. (2) 2爬取数据 (2) 3数据整理、转换 (3) 4数据保存、展示 (8) 5技术难点关键点 (9) 六、总结 ......................................................................................... - 12 -

一、选题背景 二、爬虫原理 三、爬虫历史和分类 四、常用爬虫框架比较 Scrapy框架:Scrapy框架是一套比较成熟的Python爬虫框架,是使用Python开发的快速、高层次的信息爬取框架,可以高效的爬取web页面并提取出结构化数据。Scrapy应用范围很广,爬虫开发、数据挖掘、数据监测、自动化测试等。 Crawley框架:Crawley也是Python开发出的爬虫框架,该框架致力于改变人们从互联网中提取数据的方式。 Portia框架:Portia框架是一款允许没有任何编程基础的用户可视化地爬取网页的爬虫框架。 newspaper框架:newspaper框架是一个用来提取新闻、文章以及内容分析的Python爬虫框架。 Python-goose框架:Python-goose框架可提取的信息包括:<1>文章主体内容;<2>文章主要图片;<3>文章中嵌入的任heYoutube/Vimeo视频;<4>元描述;<5>元标签

深入了解浏览器加载渲染及内核原理

浏览器加载和渲染网页的过程 2009-07-20 20:26 关于网页加载和渲染的过程,在网络上的讨论并不多。可能是因为这个过程比较复杂,而且浏览器执行的速度太快,目前还没有发现什么比较好的工具可以清楚的看到浏览器解析网页的每一个过程。通过firedug和httpWatch可以看到浏览器的http请求,但是对于浏览器如何paint和flow处理html元素,我们仍然是不得而知。“flow”这个词借鉴于reflow,表示浏览器第一次加载网页的过程。在网络上搜索了一下,学习如下。 关于浏览器加载网页过程的有趣视频 可以参见:https://www.sodocs.net/doc/144282204.html,/blog/2008/05/reflow/(形象化的reflow)。这个视频展现了网页加载的过程,看着比较有趣。要是可以更加形象化,就更好了,可以帮助我们书写更好的提高网页加载速度的代码。 浏览器内核 不同的浏览器内核,对于网页的解析过程肯定也不尽相同。 https://www.sodocs.net/doc/144282204.html,/post/Trident-Gecko-WebKit-Presto.php一文对各种浏览器的页面渲染引擎进行了简介。目前主要有基于 (1)Trident页面渲染引擎–> IE系列浏览器; (2)Gecko页面渲染引擎–> Mozilla Firefox; (3)KHTML页面渲染引擎或WebKit框架–> Safafi和Google Chrome; (4)Presto页面渲染引擎–> Opera 详细的介绍可以参见原文。 浏览器解析网页的过程 https://www.sodocs.net/doc/144282204.html,/seosky/blog/item/78d3394c130f86ffd72afc56.html浏览器加载 和渲染原理分析一文中通过一定的方法,推断了浏览器加载解析网页的顺序大致如下: 1. IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的; 2. 在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完); 3. 在下载过程中,如果遇到某一标签是嵌入文件,并且文件是具有语义解释性的(例如:JS脚本,CSS样式),那么此时IE的下载过程会启用单独连接进行下载,并且在下载后进行解析,解析(JS、CSS中如有重定义,后定义函数将覆盖前定义函数)过程中,停止页面所有往下元素的下载; 4. 样式表文件比较特殊,在其下载完成后,将和以前下载的所有样式表一起进行解析,解析完成后,将对此前所有元素(含以前已经渲染的)重新进行样

网页浏览器内核与外壳的是是非非

网页浏览器"内核"与"外壳"的是是非非 自从网页浏览器诞生之日起,各公司间的竞争、各"派别"拥护者之间的争吵,就从未停止过。直至今日,包括Internet Explorer、Firefox、Safari、Opera、Maxthon等各式各样的网页浏览器在市场上争奇斗艳,好不热闹。当然这其中也少不了恶意垄断、枪手炒作、网友争论等等。 事实上,还有很多人对浏览器的一些特性还不甚了解,所以就会有诸如"MT再好也只是一个壳""有本事像FF那样自己弄内核去""FF比IE的安全性高多了"这样的言论。起初,我对这些也不甚了解,也不愿参与这些争论。后来我慢慢地接触到了一些关于浏览器的东西,不敢独享,整理出来以FAQ的形式和大家分享,希望能提高大家对网页浏览器这种软件的认知度。 ※本文文本为大眼夹原创,其中部分资料来自于Wikipedia等网络媒体,力争保持自己的言论的中立性。 Q1:经常听人家说什么浏览器"内核"和"外壳",它们都是什么意思? A1:"内核"只是一个通俗的说法,其英文名称为"Layout engine",翻译过来就是"排版引擎",也被称为"页面渲染引擎"(下文中各种说法通用)。它负责取得网页的内容(HTML、XML、图像等等)、整理信息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要排版引擎。 而浏览器的"外壳"便很好理解了,它是一个面向用户的界面,也就是网页浏览器为我们实现的各种功能。 Q2:浏览器的内核有哪些? A2:事实上,有很多种(废话!),但是常见的有Trident、Gecko、WebCore、Presto 等。 Q3:Trident是什么内核? A3:Trident(又称为MSHTML),是微软开发的一种排版引擎。它的第一个版本随着1997年10月Internet Explorer第四版的发布而发布。随后,Trident不断地被更新和完善:

编译原理概念总结

第一章 引论 ? 为什么要用编译器 ? 与编译器相关的程序 ? 翻译步骤 ? 编译器中的主要数据结构 1、语言处理器 1、简单的说,一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成一个等价的、用另一种语言(目标语言)编写的程序。 2、编译器的重要任务之一就是报告它在翻译过程中发现的源程序中的错误。 3、使用编译器是为了提高编程的速度和准确度。 4、与编译器相关的程序:解释程序(interpreter )、汇编程序(assembler )、连接程序(linker )、装入程序(loader )、预处理器(preprocessor )、编辑器(editor )、调试程序(debugger )、描述器(profiler )、项目管理程序(project manager )。 5、解释器是另一种常见的语言处理器。它并不通过翻译的方法生成目标程序。从用户的角度来看,解释器直接利用用户提供的输入执行源程序中指定的操作。 6、一个源程序可能被分割成多个模块,并存放于独立的文件中。把源程序聚合在 一起的任务有时会由一个被称为预处理器(preprocessor )的程序独立完成。预处理器还负责把那些称为宏的缩写形式转换为源语言的语句。 7、连接器(linker )能够解决外部内存地址的问题。 8、加载器(loader )把所有的可执行目标文件放到内存中执行。 2、一个编译器的结构 Output Source Program Front end Back end Object

1、将编译器看成黑盒,则源程序映射为在语义上等价的目标程序,而这个映射由两部分组成:分析部分和综合部分。 2、分析部分把源程序分解成多个组成要素,并在这些要素之上加上语法结构。 3、综合部分根据中间表示和符号表中的信息来构造用户期待的目标程序。 4、编译器的第一个步骤:词法分析(lexical)或扫描(scanning)。词法分析器读入组成源程序的字符流,并且将它们组成有意义的词素(lexeme)的序列。词法分析器产生词法单元(token)。 5、分隔词素的空格会被词法分析器忽略掉。 6、编译器的第二个步骤:语法分析(syntax)或解析(parsing)。语法分析器使用由词法分析器生成的各个词法单元的第一个分量来创建树形的中间表示。 7、语义分析(static semantic analysis):语义分析器使用语法树和符号表中的信息 来检查源程序是否和语言定义的语义一致。它同时也收集类型信息,并把这些信息存放在语法树或符号表中,以便在随后的中间代码生成过程中使用。语义分析的一个重要部分是类型检查(type checking)。编译器检查每个运算符是否具有匹配的运算分量。 8、总的说,编译器的翻译步骤是:扫描程序----语法分析程序----语义分析程序---- 源代码优化程序----代码生成器----目标代码优化程序。 3、编译器结构中的主要数据结构 1、记号(token) 2、语法树(syntax tree) 3、符号表(symbol table) 4、常数表(literal table) 5、中间代码(intermediate code) 6、临时文件(temporary file) 4、将编译器分成了只依赖于源语言(前端( front end))的操作和只依赖于目 标语言(后端( back end))的操作两部分。 第二章词法分析 ? 扫描处理 ? 正则表达式 ? 有穷自动机 ? 从正则表达式到D FA ? 利用L e x自动生成扫描程序 1、Tokens记号标记:identifiers、keywords、integers、floating-point、symbols、strings、comments 1、使用正则表达式去描述程序语言tokens 2、一个正则表达式是归纳确定 3、一个正则表达式R描述一组字符串集合L(R) 4、L(R) = the language defined by R 5、所有的token都能用正则表达式表示 2、正则表达式: 1、基本正则表达式:他们是字母比哦啊中的单个字符且自身匹配

编译原理知识点总结

考试题型:填空24%简答4*4=16%+解答4*15=6 Chapter 1 重要概念 1?什么编译程序?P3 答:编译程序的主要功能是把用高级语言编写的源程序翻译为等 价的目标程序。 2. 编译程序的工作过程?(6个阶段)P4 1、词法分析程序2、语法分析程序3、语义分析程序4、中间代码生成5、代码优化程序6、目标代码生成 (不做优化是4个阶段,5、6不要) 4. 执行高级语言编写的程序:(编译执行、解释执行) 1)按编译方式在计算机上执行用高级语言编写的程序,一般须 经过两个阶段。第一个阶段称为编译阶段,其任务是由编译程序将源程序编译为目标程序,若目标程序不是机器代码,而是汇编语言程序,则尚需汇编程序再行汇编为机器代码程序;第二阶段称为运行阶段,其任务是在目标计算机上执行编译阶段所得到的

目标程序。 2)用高级语言编写的程序也可以通过解释程序来执行。解释程序也以源程序作为它的输入,它与编译程序的主要区别是在解释程序的执行过程中不产生目标程序,而是解释执行源程序本身。缺点:这种边翻译边执行的方式工作效率很低,但由于解释程序 的结构比编译程序简单,且占用内存较少,在执行过程中也易于在源程序一级对程序进行修改,因此一些规模较小的语言,如BASIC,也常采用此种方式。 5. P11第一段 编译程序的各部分之间的关系,是指他们之间的逻辑关系,而不一定是执行时间上的先后顺序,事实上,可按不同的执行流程来组织上述各部分的工作,这在很大程度上依赖与编译过程中对源程序扫描的遍数,以及如何划分各遍扫描所进行的工作。此处所说的“遍”,是指对源程序或其内部表示从头到尾扫视一次,并进行有关的加工处理工作。 (执行过程:单遍扫描、多遍扫描(大多数)) Chapter 2前后文无关文法和语言 1. 文法和语言的形式定义 产生语言就是制定出有限个规则(文法),借助于它们,就能产生出此语言的全部句子。 2. 文法规则四要素:

QT调研报告

QT调研报告

目录 Qt简介 (3) 发行版本 (3) 平台支持 (3) QT的开发工具 (4) Qt库 (6) Qt模块 (6) QT各平台内存要求 (3) QT开发体验 (6) 优势 (7) 劣势 (8) QT能提高什么? (8) QT的应用领域 (8) 总结 (9) QT术语 (9) 参考资料 (9)

Qt简介 Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。能提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是面向对象语言,易于扩展,并且允许组件编程。使用 Qt,只需一次性开发应用程序和用户界面,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。 发行版本 Qt商业版:提供给商业软件开发。它们提供传统商业软件发行版并且提供在协议有效期内的免费升级和技术支持服务。Qt专业版和企业版是Qt的商业版本。 Qt开源版:仅仅为了开发自由和开放源码软件,提供了和商业版本同样的功能。GNU通用公共许可证下,它是免费的。 QT已经升级到5.0了。 平台支持 Qt支持下述平台: MS/Windows - 95、98、NT 4.0、ME、2000、XP 、 Vista和Win7 Unix/X11 - Linux、Sun Solaris、HP-UX、CompaqTru64 UNIX、IBM AIX、SGI IRIX、 FreeBSD、BSD/OS和其它很多X11平台 Macintosh - Mac OS X Embedded - 有帧缓冲(framebuffer)支持的嵌入式Linux平台,Windows CE Android平台 - QT框架包在android的移植才刚起步,应用不多,还不支持中文。 QT各平台内存要求 Qt for Embedded Linux Requirements

最全的编译原理知识点-完美总结

第一章 1. 程序设计语言是人与计算机联系的工具,通过程序设计语言指挥计算机按照自己的意志 进行运算和操作显示信息和输出运算结果。 2. 最早的计算机程序设计语言是机器语言(指令系统)。机器语言中的指令都是用二进制代码 直接表示的。 3. 机器语言和符号语言以及汇编语言都是低级程序设计语言。 4. 1954年FORTRAN I语言的问世标志计算机高级程序设计语言的诞生。 5. 计算机高级程序设计语言独立于机器,比较接近于自然语言,容易学习掌握,编写程序效 率高,编写的程序易读易理解易移植。 6. 翻译程序:将高级语言编写的程序翻译成机器语言。 7. 编译程序的工作过程:编译程序这要功能是将源程序翻译成等价的目标程序,这个翻译 过程分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。 8. 编译程序的重要意义在于它使高级语言独立于机器语言,使程序员用高级语言编写程序 时不必考虑那些直接与机器有关的琐碎的环节,这些细节由编译程序区处理。 9. 编译程序包括:词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序和目标代码生成程序以及表格处理程序和出错处理程序。 10.编译程序的组织方式:编译过程分为六个阶段,改划分是编译程序的逻辑组织方式。编译 过程分为前端和后端。前端包括词法分析、语法分析、语义分析、中间代码生成、代码优化。后端包括目标代码生成,依赖于计算机的硬件系统和机器指令系统。这种组织方式便于编译程序的移植,如果移植到不同类型的机器上只需修改编译程序的后端即可。 11.翻译方式:编译方式和解释方式。 12.源程序:用高级语言编写的程序。源程序是编译程序加工的对象。 13.编译方式:先将源程序翻译成汇编语言程序或机器语言程序(目标程序),然后再执行。 这个翻译程序为编译程序. 14.编译方式中源程序的编译和目标程序的运行时分成两个阶段完成的。编译所的目标程序计算机暂时不能执行,必须由连接装配程序将目标程序和编译程序及系统子程序连接成一个可执行程序,这个可执行程序可直接被计算机执行。例如FORTRAN,ALGOL,PASCAL,C,C++等等。 15.解释方式:对源程序边翻译边执行,按解释方式进行翻译的翻译程序为解释程序。优点 在于便于对源程序调试和修改,加工处理过程慢。 16.解释程序:按解释方式进行翻译的翻译程序. 17.词法分析:词法分析是编译过程的基础,任务是扫描源程序,根据语言的词法规则分解 和识别出每个单词,并把单词翻译成相应的机内表示。在识别单词的过程中同时也做词法检查。 18.语法分析:语法分析师在词法分析的基础上进行的。任务是根据语言的语法规则把单词 符号串分解成格内语法单位,如表达式、语句等。通过语法分析确定整个输入符号串是否构成一个语法正确的程序。 19.语义分析:任务是对源程序进行语义检查,其目的是保证标识符和常数的正确使用,把 必要的信息收集保存到符表或中间代码程序中,并进行相应的处理。 20.中间代码生成:是必不可少的阶段,任务是在语法分析和语义分析基础上把语法成分的 语义对其继续翻译,翻译的结果是某种中间代码形式,这种中间代码的结果简单,接近计算机的指令形式,能够很容易被翻译成计算机指令,常用的中间代码有三元式,四元式和逆波兰式。 21.目标代码生成:任务:将中间代码或优化之后的中间代码转换为等价的目标代码,即机器指

中国程序员人才调查报告

中国程序员人才调查报告 篇一:XX年中国程序员调查报告 XX 年第四季度《中国程序员调查报告》。报告里对程序员的 年龄分布,地区分布,性别比例,使用浏览器种类,使用的编程语言等进行了调查、统计和分析。对从业人员及其他相关人员有很好的参考作用。本调查集中对全国 100 万程序员互联网行为的调查,分析以及投票统计。 它清楚的显示出在程序员这个特殊的群体中,男性比例高达 80%,女性仅占 20%,他们具有明显的极客精神,喜欢使用 Chrome 浏览器(%),Android 移动操作系统和设备(%),最喜欢C++(%),C (%),Java(%),C#(%)编程语言。近半数的程序员来自广东(%)、北京(%)、江苏(%)、上海(%)。他们主要使用 PC(%)而不是移动设备(%)进行工作。下面是详细的分类统计结果。 一、年龄分布: 超过 80% 的程序员年龄在 20-40 岁之间。对于程序员这个职业来说,需要大量精力和体力的投入。20-40 岁是程序员工作的黄金时期。根据统计数据,仍

然有 10% 左右的程序员年龄在 40-49 岁之间,这部分人基本上都是已经在管理岗位上,但是,依然对编程有着浓厚的兴趣,会做部分实际的编程工作。从上图中还可以看到,有4% 的程序员,年龄在 10-19 岁。这说明程序员的工作,对于人行年龄基本没有什么限制,有些程序员从中学时期就开始动手写程序,并且做得相当不错。 图中我们也对比了普通网民的年龄分布(黄颜色部分)。程序员的年龄分布与普通网民的年龄分布趋势基本一致,差别比较大的是,在 10-19 岁的年龄段,网民数量很高,占了总数的四分之一还多,这或许与网络游戏对青少年的影响是有密切关系的。 二、性别比例 在中国,男程序员占了绝大多数,达到了近 80%,只有 20% 左右的女性从事程序员的工作。程序员这个行业还是有很明显的性别差异。这与程序员的工作特点有很大的关系(工作时间长,加班多,生活不规律等)。程序员的性别比例与普通网民的性别比例形成了鲜明的对比:普通网民的男女比例基本相同,与自然人口的男女比例基本一致。这说明,互联网真正做到了男女平等,没有性别歧视。而程序员这个职业,基本上是男人的天下。这大概也是播妞这个萌妹子能在程序员心目中有一席之地的主要原因。

谷歌浏览器使用技巧详解

谷歌浏览器(chrome)的一些使用技巧分享(来自六维空间作者cicaday)

说在前面: 六维上可能有不少用谷歌浏览器的朋友,我冒昧在这里开一贴,分享一下自己使用chrome的一些心得,目的就是为了抛砖引玉,希望能激起点点浪花。 ---------------------------------------------- 内容可能还会增加,目前本贴目录大致如下: 1、前言--一些废话 2、操作技巧--和dz的兼容(使用即见即得编辑器,使用论坛表情,以及其它功能) 3、操作技巧--文本域的自由拉伸功能 4、操作技巧--拖放移动下载文件位置 5、操作技巧--后退与历史记录(撤消刚关闭的页面) 6、操作技巧--新建IE内核标签/隐身窗口 7、操作技巧--任务管理器的使用 8、操作技巧--拖放tab新建标签页 9、操作技巧--地址栏的站内搜索功能 10、快捷键一览 11、点缀--地址栏的计算器功能 12、点缀--一些有意思的命令 13、关于谷歌浏览器版本的说明以及选择 ------------------------------------------------- 好,现在正文开始。我首先要说的当然是目前很多人提到的谷歌浏览器和六维的兼容问题,其实这是一个广泛性的问题,这里涉及到浏览器核心对js和css的处理方式的区别问题,我尽量把问题简单通俗化。 关于浏览器内核:浏览器的内核其实可以分为Trident、Gecko,Presto、Webkit等几种,这几种内核和目前常见的浏览器的对应关系是: Trident ==>IE,以及使用IE内核的浏览器,比如世界之窗,傲游2.x,搜狗,TT,GB 等 Gecko ==>Firefox所有版本 Presto ==>Opera,目前好像就这一个孤儿 Webkit ==>Chrome,Safari,傲游3.x也采用webkit内核,用过测试版的同学应该知道。 内核相当于浏览器的引擎,用于解释网页的行为和特性,主要包括DOM、插件、Layout和JavaScript几个模块。我们现在不讨论各个内核的优劣,我只想让大家理解一下有内核这么一回事。可以这样理解,假如把浏览网页当成快递公司给你送东西,各个快递公司处理快件的方式是有区别的(可以理解为模块),它们送货的速度也是有区别的(可以理解为处理或者解释网页的速度),最后送给用户面前的快件可能都是一样的(可以理解为网页内容),但有些可能会把快件包装或者零件搞坏了(网页的框架,表现形式),最后,他们的服务态度和收费也是不同的^^ 如果你能理解浏览器的内核是怎么一回事,那么关于前面提到问题就很好解释了。六维是基于discuz!构架的一个论坛,现在的问题主要是发贴时的编辑器标签不响应(表情标签或者主文件框)以及元素错位的问题,为什么会这样呢?因为各个内核对网页元素处理的方式不同,dz的即见即得编辑器是(也必须是)用JavaScript和css写的,而内核对js和css的解

相关主题