据作为新型生产要素,深刻改变着人们的生产生活方式和社会治理方式。作为政务大数据“1+32+N”框架中“N”个部门中的重要一员,税务部门应深入采集应用税收大数据,全面融入全国一体化政务大数据体系,这是税收现代化服务中国式现代化的必然要求。大企业作为国民经济的重要支柱,在税收贡献度、社会影响力、税收遵从示范性等方面发挥着引领作用。率先在大企业强化税收大数据管理,推进税收征管数字化升级和智能化改造,提升大数据服务大企业税收治理的能力,进而推动税收大数据更好服务于国家治理体系和治理能力现代化,具有较强的可行性和必要性。
一、当前大数据服务大企业税收治理面临的挑战
社会各界对大数据具有哪些特征尚无统一的定论,当前被广为认可的有《大数据时代:生活、工作与思维的大变革》一书中提出的大数据4V特征,即大数据至少应具备规模性(Volume)、多样性(Variety)、高速性(Velocity)和价值性(Value)。从大数据4V特征入手,考察大企业涉税数据的采集应用,可以发现税务部门在大企业涉税数据采集体系、采集内容、管理机制、管理成效等方面还存在许多不足,影响了税务部门利用大数据服务大企业从而进行税收治理的能力。
(一)涉税数据采集体系不够完善,税收大数据的规模性仍需加力
一是数据采集规划不够科学。随着税收大数据的不断积累,大企业涉税数据采集体系未能及时进行调整,对税收大数据的量级、维度、渠道、质量、功能等缺少分析,导致税务部门一方面花费过多精力采集了许多重复数据、多余数据,另一方面对重要数据采集投入不足。当前,税务部门在优化大企业涉税数据采集氛围,统一各部门、各领域数据代码等基础性工作方面仍存短板,使大企业涉税大数据采集事倍功半。
二是数据采集要求不够明确。大企业涉税数据申报制度仍较为笼统,缺乏严密的申报规范和申报流程,特别是对财务报表、电子账套等数据采集的要求不严,导致易出现超期报送、数据缺失、逻辑混乱等情况。关联交易信息、发票入账信息等数据报送要求还不够规范,许多大企业和第三方以商业秘密、数据安全等为由不向税务部门提供有关数据或提供的数据还不够完整。
三是数据采集方向存在偏差。当前,大企业涉税数据采集主要关注各类显性数据。税务部门一方面花费过多精力在各类表面数据的采集上,相对忽视了隐性数据的采集和数据的分析应用;另一方面较少关注能够揭示大企业税收治理状态的微小线索,忽视了样本量少但价值性高的大企业个性化数据,比如基层大企业税收管理人员对日常能够采集的大企业个性化数据,在态度上、机制上均未引起足够重视。
(二)涉税数据采集内容不够多元,税收大数据的多样性还需提升
一是数据采集渠道较为单一。大企业相关涉税数据采集虽已达到一定量级,但纳税申报表、财务报表、电子账套、发票数据仍是大企业涉税数据的主要来源,其中除发票数据外,其余数据均由企业自行整理报送,其他政府部门、社会中介机构、金融机构等采集渠道缺失或不畅,导致税务部门可用数据不足。
二是数据采集范围不够全面。一些大企业仅财务报表就多达几百页,但税务部门只能获取其中少部分数据,许多涉税数据尚未纳入采集范围。特别是大企业境外涉税数据采集困难,即使税务部门可通过税收情报交换获取部分数据,但仍难以满足实际需求。
三是数据采集维度不足。税收大数据采集的关键不仅在于量级,更在于维度。然而,除了大企业申报数据与发票数据,目前可供互补验证的数据维度还不够。各级税务机关耗费大量人力物力采集了不少第三方涉税数据,但许多数据与申报数据如出一辙,难以发挥大数据互补验证的作用,特别是可扩展标记语言(XML)、超文本标记语言(HTML)、图像、音频和视频等非结构化数据的采集应用还存在明显滞后。
(三)涉税数据管理机制不够高效,税收大数据的高速性尚需强化
一是数据管理模式较为滞后。一方面,企业纳税申报时间本身就滞后于纳税义务发生时间,且为静态财务资料,导致税务机关对纳税人基本信息变化、财务数据变化缺乏及时的监控。另一方面,企业涉税数据主动披露制度建设相对滞后,税企双方对以数据换服务、以数据换数据的认识不足或存在顾虑,在一定程度上挫伤了企业主动披露数据、寻求事前合作和确定性服务的积极性。
二是数据管理技术不够成熟。大企业涉税数据管理的技术还较为落后,财务报表、电子账套等数据采集方式仍较为传统,数据直连模式尚处于个案探索阶段,导致数据采集耗时长、体量小、速度慢、易受干扰。通过互联网采集大企业涉税数据一般以人工搜索和拷贝网上信息为主,许多外部涉税数据的采集仍然靠单次传输,对网络爬虫等技术的应用还不完善,难以支撑数据实时分析的需要。
三是数据汇集机制不够完善。当前,完善的集团“一户式”数据汇集机制尚未实现,税务系统云化大数据库、数据中心建设滞后,系统云化、数据云化、技术云化、平台云化等尚处于探索阶段,信息系统间快速调用数据较为困难,难以实现数据资源的实时动态交互。外部数据交换缺乏常态化机制,税务部门急需且可交换的数据获取费时费力,影响了数据汇集的时效。
(四)涉税数据管理成效不够显著,税收大数据的价值性亟须挖掘
一是数据分析体系精准性不足。大企业涉税数据在进入税务信息系统过程中,缺乏严格的验证比对,使大企业涉税数据在一致性、完整性、准确性、规范性、逻辑性等方面,还难以符合企业税收管理的需要。大企业涉税数据质量参差不齐、口径不一,许多数据的价值不高,且存在大量干扰项,导致大企业涉税数据分析的精准性受到影响,有时甚至会带来严重误导(邱栋,2022)。
二是数据分析不够深入。部分税务机关基于大数据分析形成的大企业涉税风险疑点不够清晰,风险应对任务不够精准,使大企业税收风险管理常常劳而无功。基层大企业税务管理人员数据管理意识不强,对大数据技术掌握不够,导致许多深层次的病根被掩盖。
三是数据应用不够完善。大数据分析方法、工具应用不足,数据应用缺乏创新,导致税务部门对大企业涉税数据应用仍停留在数据基本利用层面,数据应用的深入性、前瞻性和预测性还不够,在大企业涉税风险防范、个性化纳税服务等方面,大数据应用仍较为薄弱。
二、大数据服务大企业税收治理的国际借鉴
针对当前大数据服务大企业税收治理过程中面临的诸多挑战,本文收集分析了OECD成员国的相关经验,以期对提升我国大企业涉税数据管理水平、强化大企业税收治理提供有益借鉴。
(一)涉税数据采集体系较为完善
一是数据采集规划较为合理。美国政府通过颁布“最小”数据集规则,确保涉税数据相关部门能够按一定规范搜集数据,并汇总到税务部门,从而依托信息共享系统保障了税收大数据的搜集,提升了涉税数据采集的及时性和规范性。许多OECD成员国打通了纳税识别号在社会各领域的应用。德国自2017年起通过标准化战略将大企业标准数字化和工业4.0战略融合,推动了大企业税收治理(张妍 等,2022)。
二是数据采集要求较为明确。OECD成员国对大企业涉税数据申报普遍有较为严格的规定,大企业能够按照税务部门要求主动提供经营管理数据,并积极向全社会公布涉税相关信息。波兰政府还规定大企业须在每个纳税年度编制并向社会公布其各类税收策略执行情况的报告,包括合规治理的方法和程序、重大关联交易,以及避税天堂实体账户信息等(阎传雨,2020),接受来自全社会的监督。
三是数据采集视野较为开阔。许多OECD成员国在大数据理论研究与实践探索中走在世界前列。大企业税收大数据管理作为各国大数据理论研究与实践探索的重要领域,其涉税数据采集与挖掘不局限于显性数据,而是延伸到了大企业经营管理的方方面面。此外,正如林斯特龙在《痛点:挖掘小数据满足用户需求》一书中对“小数据”应用的介绍,美国等OECD成员国通过“小数据”研究与应用揭示了相关企业发展的趋势,拓展了数据采集的视野。
(二)涉税数据采集内容较为全面
一是数据采集渠道多样。OECD成员国普遍通过立法保障税务部门全面及时地采集涉税数据,只要税务部门认为需要,就可以向其他政府部门、银行及企业索要数据,数据拥有方必须配合。美国《海外账户税收合规法案》(FATCA)还规定了全球金融机构的涉税数据协作义务。
二是数据采集内容细致。美国除实行税种分类申报外,在每个税种中还针对不同纳税人和不同税收事项制定申报表,并要求纳税人在纳税申报时附上财务会计报表及其他有关纳税的详细资料。在美国,政府各部门特别是经济相关部门每年必须向美国国内收入局(IRS)提供大量详细的税源信息。
三是数据采集维度多元。OECD成员国广泛采集来自政府部门、行业协会、股票债券市场、中介机构、数据管理公司等多渠道的多维数据。特别是许多OECD成员国通过实施雇主雇员双向申报和多元数据比对,提高了大企业提供涉税数据的自觉性。
(三)涉税数据管理机制较为高效
一是数据披露制度完善。OECD成员国普遍重视针对大企业的“确定性”服务。美国允许大企业为保证纳税申报的安全和准确,在纳税申报前提出裁定要求。澳大利亚纳税申报前服务包括公共裁决、私人裁决、预约定价、年度遵从安排、申报前遵从检查和可报告课税情况等。荷兰则推出了“横向平行监控”,税务部门适时披露对企业税务处理产生的疑问、拟采取的措施,同时要求大企业主动向税务机关全面披露涉税数据。
二是数据管理自动高效。OECD于2021年发布的《税收征管3.0:税收征管的数字化转型》提出了税收征管数字化转型愿景,旨在推动企业信息系统进一步规范化。美国的税务部门与其他政府部门、银行、涉税中介以及大企业积极开展数据直连或紧密沟通,定期获取相关主体及与其发生经济联系纳税人的信息。此外,许多OECD成员国运用技术手段在互联网收集涉税数据,还通过雇佣数据管理公司实现了涉税数据的高效采集。
三是数据汇集入库及时。大数据信息系统及数据库的产生弱化了古老的“拇指法则”。荷兰拥有相对完善的税务执法风险管理系统和庞大的国家风险数据库,长期坚持风险管理数据积累和趋势研究,使涉税风险大数据能够及时汇集(冯优,2017)。澳大利亚则建立了包括海关、银行、土地房产部门、移民局等在内的纳税人基本信息资料库,确保涉税数据应用更加高效。
(四)涉税数据管理成效较为显著
一是数据质量较高。由于会计准则规范执行,大企业内控制度相对完善、信息披露意识较强,涉税中介机构等关键第三方履责相对到位,OECD成员国的涉税数据质量普遍较高。各国税务部门还普遍建立了涉税数据分析梳理机制,在采集、储存、筛选等各环节强化了数据质量监控,进一步保障了数据质量。
二是人才培育有力。OECD成员国税务部门注重明确并更新大企业管理部门、数据管理部门人员的知识技能要求,确保其具备大数据管理的专业技能,如英国皇家税务与海关总署专门设立大企业服务部门,高薪雇佣了数千名专家。各国还积极借助高校、中介机构、科技企业等人才力量,共同推进大数据在大企业税收治理中的应用。
三是数据技术先进。许多OECD成员国已将大数据集群、画像等技术深度引入税务领域。美国将大量先进的科技手段应用于大企业税收管理,对各类复杂的涉税行为进行有效的分析复核,高效定位高风险主体。澳大利亚基于大数据技术推出“税收流失风险指数”,有效排查大企业的涉税风险。
三、大数据服务大企业税收治理的几点建议
随着税收征管数字化升级和智能化改造的进一步推进,大数据在大企业税收治理中的作用将进一步凸显。要着眼大数据的基本特征,深入借鉴OECD成员国相关经验,立足我国实践深刻把握大数据服务大企业税收治理的作用机理,在大企业涉税数据采集体系、采集内容、管理机制、管理成效等方面持续强化探索。
(一)完善涉税数据采集体系,提升税收大数据的规模性
1.优化数据采集规划。一是借鉴美国“最小”数据集规则,定义统一规范的税收元数据,保证税务部门能够按一定量级和维度规范采集、应用数据。二是推进大企业涉税数据标准化战略,整合并统一税收征管数据管理标准,推动涉税基础数据进一步标准化。三是进一步完善商事制度改革,确保纳税识别号在社会经济生活中的通用性与唯一性,助力涉税数据的采集、比对及共享。
2.规范数据申报管理。一是对大企业涉税数据超期报送、数据差错、逻辑混乱、敷衍了事等情况给予更为严格的应对,引导大企业保质保量完成相关数据申报。二是进一步明确大企业涉税数据申报的有关规定,完善涉税数据安全保护措施,凡是根据规定需要大企业提供的涉税数据,大企业应在规定期限内提供。三是要求一定规模的大企业在每个纳税年度编制并向社会公布其税收策略执行情况的报告。
3.开阔数据采集视野。一是制定实施大企业税务控制框架,引导大企业构建更加完善的涉税数据内部管理、统计、报送制度,推动将更多隐藏的涉税数据显性化。二是助力大企业规划统一的税收管理信息系统,促进集团内部税收业务的沟通交流、经验分享和疑难解答,推动产生更多的涉税数据。三是完善大企业首席联络员制度,通过将税收管理融入企业经营全过程,确保税务管理人员对大企业经营业务、经营过程有较为全面的了解,通过探索“小数据”进一步挖掘大企业的税收治理趋势。
(二)扩大涉税数据采集内容,提升税收大数据的多样性
1.拓展数据采集渠道。一是突出电子税务局作为大企业涉税数据采集的主渠道作用,完善专用数据接口,并通过互联网等渠道不断拓展数据采集触角。二是通过修订《税收征管法》,进一步明确各方涉税数据所有者向税务机关及时准确地提供涉税数据的法律义务,以便顺利采集散落在全社会的涉税数据。三是借助全国一体化政务大数据体系建设的有利契机,通过将税收大数据融入政务大数据体系,扩大涉税数据采集面。
2.扩展数据采集范围。一是率先在大企业探索全税种合并申报或要素关联申报,最大限度减少纳税申报表的重复内容,通过申报预填服务减少大企业申报数据项,为扩大数据采集范围奠定基础。二是完善财务报表、电子账套的采集内容,尽可能扩大采集范围,包括强化对大企业境外经营数据的采集。三是制定国家层面的“涉税信息保障条例”,在涉税信息保障的规范性和力度大幅提升的基础上,进一步明确各类相关主体提供涉税数据的范围、内容、程序、方式和时限,确保涉税数据采集完整可用。
3.增强数据采集维度。一是扩大涉税数据采集的时空维度,采集的大企业内部数据要涵盖财务税务数据、经营数据等,外部数据要尽可能覆盖各类监管、监测数据,还要注重采集大企业的历史数据与当期数据。二是扩大涉税数据采集的主体维度,探索雇主雇员双向申报机制,引入第三方平台、各类中介机构和其他第三方的关联申报制度。三是扩大涉税数据采集的结构维度,依托企业资源计划系统(ERP)、数据库、文字处理等平台,加强对半结构化数据、非结构化数据的采集与管理。
(三)优化涉税数据管理机制,提升税收大数据的高速性
1.完善数据披露机制。一是构建完善“总对总”管理模式,强化税企双方在数据收集、分析、利用等方面的合作,实现快速高效的信息沟通,降低大企业税收数据管理成本。二是制定大企业税收数据管理评价办法,完善涉税数据主动披露激励机制,根据大企业数据管理、内控机制、信息披露等方面的表现,运用声誉效应实施差异化管理。三是强化以数据换服务、以数据换数据,通过税务部门更为精准、有效的数据赋能服务,引导大企业积极主动向税务部门提供数据。
2.优化数据采集手段。一是整合研发涉税数据终端接收系统,及时采集大企业涉税数据,并依托全面数字化的电子发票与“乐企”服务优势,推进与大企业业务系统的直连。二是在全国一体化政务大数据体系框架下,搭建完善跨部门涉税数据共享平台,推动跨部门数据对接,加速涉税数据共享。三是引入网络爬虫、搜索引擎、图形识别等先进技术,在互联网上收集、筛选、捕捉大企业涉税信息,实现对大企业经营活动的跟踪监控。
3.加强数据汇集管理。一是在全国一体化政务数据全部纳入目录管理过程中,梳理跨部门涉税数据标签,按重要性分类,整合形成全国统一的税收数据仓库。二是强化涉税数据的加工,将非数字化标准文件进行光学字符识别(OCR),通过“自动+人工”拆解为颗粒度更细的涉税结构化数据或非结构化数据标签。三是按照“一户式”管理、“各系统”整合、系统云化的要求,实现集团“一户式”数据集中,推动对大企业涉税数据的集中存储、处理、分析和应用。
(四)保障涉税数据管理成效,提升税收大数据的价值性
1.提高数据质量。一是制定税收大数据扎口采集管理办法,形成各层级、各部门、各岗位数据采集规程,确保涉税数据采集专业化。二是由数据管理部门牵头对采集数据进行分类加工,及时发现异常数据,删除错误数据,保留有用数据,避免垃圾数据进入系统。三是完善数据质量控管体系,设立数据审计规则,制定涉税数据管理、考核和数据变更等管理制度,构建对涉税数据增量、质量逐级负责的责任机制。
2.强化数据人才保障。一是强化大数据管理机构的数据管理主责,减少其他业务的干扰,使现有大数据管理人才能够将主要工作精力投入到数据分析应用中,确保在大企业税收风险分析应对、个性化服务中按需而应。二是制定数据管理人才培养计划,构建开放、对等、共享、全局运作的实训平台,团队化培养税务数据管理人才,强化人才保障。三是借助大型互联网公司的实力和技术,依托高校、社会中介、科研机构和研究智库智力支撑,构建强大的智能化涉税数据分析网络。
3.夯实数据应用成效。一是构建功能强大的智能数据分析平台和决策辅助平台,充分使用大数据分析工具,不断丰富涉税数据相关性的分析成果。二是运用数字孪生、流式分析、数据预处理等新技术强化涉税数据创新研究,从行业特点、经营特点、组织结构特点等整体把握大企业的经营、纳税状况。三是通过大企业“办税痕迹”“行为指纹”等对大企业遵从行为与服务需求进行大数据预测,并通过资源整合、智能提取数据,推动报表预填、确定性服务等服务监管措施落地。
来源:税务研究
Java是一个支持并发、基于类和面向对象的计算机编程语言。
下面列出了面向对象软件开发的优点:
代码开发模块化,更易维护和修改。代码复用。增强代码的可靠性和灵活性。增加代码的可理解性。面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象。下面的章节我们会逐个分析这些特性。
封装
封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在Java当中,有3种修饰符:public,private和protected。每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。
下面列出了使用封装的一些好处:
通过隐藏对象的属性来保护对象内部的状态。提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。禁止对象之间的不良交互提高模块化。参考这个文档获取更多关于封装的细节和示例。
多态
多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作可以应用到其他类型的值上面。
继承
继承给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。
抽象
抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。Java支持创建只暴漏接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。
抽象和封装的不同点
抽象和封装是互补的概念。一方面,抽象关注对象的行为。另一方面,封装关注对象行为的细节。一般是通过隐藏对象内部状态信息做到封装,因此,封装可以看成是用来提供抽象的一种策略。
常见的Java问题
1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。
Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
2.JDK和JRE的区别是什么?
Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。
3.”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。
4.是否可以在static环境中访问非static变量?
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
5.Java支持的数据类型有哪些?什么是自动拆装箱?
Java语言支持的8中基本数据类型是:
byteshortintlongfloatdoublebooleanchar自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int转化成Integer,double转化成double,等等。反之就是自动拆箱。
6.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。
7.Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。
Java中构造函数重载和方法重载很相似。可以为一个类创建多个构造函数。每一个构造函数必须有它自己唯一的参数列表。
Java不支持像C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java不会创建默认的复制构造函数。
8.Java支持多继承么?
不支持,Java不支持多继承。每个类都只能继承一个类,但是可以实现多个接口。
9.接口和抽象类的区别是什么?
Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。类可以实现很多个接口,但是只能继承一个抽象类类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。抽象类可以在不提供接口方法实现的情况下实现接口。Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。也可以参考JDK8中抽象类和接口的区别
10.什么是值传递和引用传递?
对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。
对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。
Java线程
11.进程和线程的区别是什么?
进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。
12.创建线程有几种不同的方式?你喜欢哪一种?为什么?
有三种方式可以用来创建线程:
继承Thread类实现Runnable接口应用程序可以使用Executor框架来创建线程池实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。
13.概括的解释下线程的几种可用状态。
线程在执行过程中,可以处于下面几种状态:
就绪(Runnable):线程准备运行,不一定立马就能开始执行。运行中(Running):进程正在执行线程的代码。等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。睡眠中(Sleeping):线程被强制睡眠。I/O阻塞(Blocked on I/O):等待I/O操作完成。同步阻塞(Blocked on Synchronization):等待获取锁。死亡(Dead):线程完成了执行。14.同步方法和同步代码块的区别是什么?
在Java语言中,每一个对象有一把锁。线程可以使用synchronized关键字来获取对象上的锁。synchronized关键字可应用在方法级别(粗粒度锁)或者是代码块级别(细粒度锁)。
15.在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
监视器和锁在Java虚拟机中是一块使用的。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。每一个监视器都和一个对象引用相关联。线程在获取锁之前不允许执行同步代码。
16.什么是死锁(deadlock)?
两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。
17.如何确保N个线程可以访问N个资源同时又不导致死锁?
使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。
Java集合类
18.Java集合类框架的基本接口有哪些?
集合类接口指定了一组叫做元素的对象。集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序。有的集合类允许重复的键,有些不允许。
Java集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java集合类里面最基本的接口有:
Collection:代表一组对象,每一个对象都是它的子元素。Set:不包含重复元素的Collection。List:有顺序的collection,并且可以包含重复元素。Map:可以把键(key)映射到值(value)的对象,键不能重复。19.为什么集合类没有实现Cloneable和Serializable接口?
克隆(cloning)或者是序列化(serialization)的语义和含义是跟具体的实现相关的。因此,应该由集合类的具体实现来决定如何被克隆或者是序列化。
20.什么是迭代器(Iterator)?
Iterator接口提供了很多对集合元素进行迭代的方法。每一个集合类都包含了可以返回迭代器实例的
迭代方法。迭代器可以在迭代的过程中删除底层集合的元素。
21.Iterator和ListIterator的区别是什么?
下面列出了他们的区别:
Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。22.快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
Iterator的安全失败是基于对底层集合做拷贝,因此,它不受源集合上修改的影响。java.util包下面的所有的集合类都是快速失败的,而java.util.concurrent包下面的所有的类都是安全失败的。快速失败的迭代器会抛出
ConcurrentModificationException异常,而安全失败的迭代器永远不会抛出这样的异常。
23.Java中的HashMap的工作原理是什么?
Java中的HashMap是以键值对(key-value)的形式存储元素的。HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。
HashMap的一些重要的特性是它的容量(capacity),负载因子(load factor)和扩容极限(threshold resizing)。
24.hashCode()和equals()方法的重要性体现在什么地方?
Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。如果没有正确的实现这两个方法,两个不同的键可能会有相同的hash值,因此,可能会被集合认为是相等的。而且,这两个方法也用来发现重复元素。所以这两个方法的实现对HashMap的精确性和正确性是至关重要的。
25.HashMap和Hashtable有什么区别?
HashMap和Hashtable都实现了Map接口,因此很多特性非常相似。但是,他们有以下不同点:
HashMap允许键和值是null,而Hashtable不允许键或者值是null。Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。一般认为Hashtable是一个遗留的类。26.数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
下面列出了Array和ArrayList的不同点:
Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。Array大小是固定的,ArrayList的大小是动态变化的。ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。27.ArrayList和LinkedList有什么区别?
ArrayList和LinkedList都实现了List接口,他们有以下的不同点:
ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。也可以参考ArrayList vs. LinkedList。
28.Comparable和Comparator接口是干什么的?列出它们的区别。
Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。
Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。
29.什么是Java优先级队列(Priority Queue)?
PriorityQueue是一个基于优先级堆的无界队列,它的元素是按照自然顺序(natural order)排序的。在创建的时候,我们可以给它提供一个负责给元素排序的比较器。PriorityQueue不允许null值,因为他们没有自然顺序,或者说他们没有任何的相关联的比较器。最后,PriorityQueue不是线程安全的,入队和出队的时间复杂度是O(log(n))。
30.你了解大O符号(big-O notation)么?你能给出不同数据结构的例子么?
大O符号描述了当数据结构里面的元素增加的时候,算法的规模或者是性能在最坏的场景下有多么好。
大O符号也可用来描述其他的行为,比如:内存消耗。因为集合类实际上是数据结构,我们一般使用大O符号基于时间,内存和性能来选择最好的实现。大O符号可以对大量数据的性能给出一个很好的说明。
31.如何权衡是使用无序的数组还是有序的数组?
有序数组最大的好处在于查找的时间复杂度是O(log n),而无序数组是O(n)。有序数组的缺点是插入操作的时间复杂度是O(n),因为值大的元素需要往后移动来给新元素腾位置。相反,无序数组的插入时间复杂度是常量O(1)。
32.Java集合类框架的最佳实践有哪些?
根据应用的需要正确选择要使用的集合的类型对性能非常重要,比如:假如元素的大小是固定的,而且能事先知道,我们就应该用Array而不是ArrayList。
有些集合类允许指定初始容量。因此,如果我们能估计出存储的元素的数目,我们可以设置初始容量来避免重新计算hash值或者是扩容。
为了类型安全,可读性和健壮性的原因总是要使用泛型。同时,使用泛型还可以避免运行时的ClassCastException。
使用JDK提供的不变类(immutable class)作为Map的键可以避免为我们自己的类实现hashCode()和equals()方法。
编程的时候接口优于实现。
底层的集合实际上是空的情况下,返回长度是0的集合或者是数组,不要返回null。
33.Enumeration接口和Iterator接口的区别有哪些?
Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。
34.HashSet和TreeSet有什么区别?
HashSet是由一个hash表来实现的,因此,它的元素是无序的。add(),remove(),contains()方法的时间复杂度是O(1)。
另一方面,TreeSet是由一个树形的结构来实现的,它里面的元素是有序的。因此,add(),remove(),contains()方法的时间复杂度是O(logn)。
垃圾收集器(Garbage Collectors)
35.Java中垃圾回收有什么目的?什么时候进行垃圾回收?
垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源。
36.System.gc()和Runtime.gc()会做什么事情?
这两个方法用来提示JVM要进行垃圾回收。但是,立即开始还是延迟进行垃圾回收是取决于JVM的。
37.finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?
在释放对象占用的内存之前,垃圾收集器会调用对象的finalize()方法。一般建议在该方法中释放对象持有的资源。
38.如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?
不会,在下一个垃圾回收周期中,这个对象将是可被回收的。
39.Java堆的结构是什么样子的?什么是堆中的永久代(Perm Gen space)?
JVM的堆是运行时数据区,所有类的实例和数组都是在堆上分配内存。它在JVM启动的时候被创建。对象所占的堆内存是由自动内存管理系统也就是垃圾收集器回收。
堆内存是由存活和死亡的对象组成的。存活的对象是应用可以访问的,不会被垃圾回收。死亡的对象是应用不可访问尚且还没有被垃圾收集器回收掉的对象。一直到垃圾收集器把这些对象回收掉之前,他们会一直占据堆内存空间。
40.串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等规模和大规模数据的应用程序。而串行收集器对大多数的小应用(在现代处理器上需要大概100M左右的内存)就足够了。
41.在Java中,对象什么时候可以被垃圾回收?
当对象对当前使用这个对象的应用程序变得不可触及的时候,这个对象就可以被回收了。
42.JVM的永久代中会发生垃圾回收么?
垃圾回收不会发生在永久代,如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)。如果你仔细查看垃圾收集器的输出信息,就会发现永久代也是被回收的。这就是为什么正确的永久代大小对避免Full GC是非常重要的原因。请参考下Java8:从永久代到元数据区
(译者注:Java8中已经移除了永久代,新加了一个叫做元数据区的native内存区)
异常处理
43.Java中的两种异常类型是什么?他们有什么区别?
Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。这里有Java异常处理的一些小建议。
44.Java中Exception和Error有什么区别?
Exception和Error都是Throwable的子类。Exception用于用户程序可以捕获的异常情况。Error定义了不期望被用户程序捕获的异常。
45.throw和throws有什么区别?
throw关键字用来在程序中明确的抛出异常,相反,throws语句用来表明方法不能处理的异常。每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能够确保处理可能发生的异常,多个异常是用逗号分隔的。
45.异常处理的时候,finally代码块的重要性是什么?(译者注:作者标题的序号弄错了)
无论是否抛出异常,finally代码块总是会被执行。就算是没有catch语句同时又抛出异常的情况下,finally代码块仍然会被执行。最后要说的是,finally代码块主要用来释放资源,比如:I/O缓冲区,数据库连接。
46.异常处理完成以后,Exception对象会发生什么变化?
Exception对象会在下一个垃圾回收过程中被回收掉。
47.finally代码块和finalize()方法有什么区别?
无论是否抛出异常,finally代码块都会执行,它主要是用来释放应用占用的资源。finalize()方法是Object类的一个protected方法,它是在对象被垃圾回收之前由Java虚拟机来调用的。
Java小应用程序(Applet)
48.什么是Applet?
java applet是能够被包含在HTML页面中并且能被启用了java的客户端浏览器执行的程序。Applet主要用来创建动态交互的web应用程序。
49.解释一下Applet的生命周期
applet可以经历下面的状态:
Init:每次被载入的时候都会被初始化。Start:开始执行applet。Stop:结束执行applet。Destroy:卸载applet之前,做最后的清理工作。50.当applet被载入的时候会发生什么?
首先,创建applet控制类的实例,然后初始化applet,最后开始运行。
51.Applet和普通的Java应用程序有什么区别?
applet是运行在启用了java的浏览器中,Java应用程序是可以在浏览器之外运行的独立的Java程序。但是,它们都需要有Java虚拟机。
进一步来说,Java应用程序需要一个有特定方法签名的main函数来开始执行。Java applet不需要这样的函数来开始执行。
最后,Java applet一般会使用很严格的安全策略,Java应用一般使用比较宽松的安全策略。
52.Java applet有哪些限制条件?
主要是由于安全的原因,给applet施加了以下的限制:
applet不能够载入类库或者定义本地方法。applet不能在宿主机上读写文件。applet不能读取特定的系统属性。applet不能发起网络连接,除非是跟宿主机。applet不能够开启宿主机上其他任何的程序。53.什么是不受信任的applet?
不受信任的applet是不能访问或是执行本地系统文件的Java applet,默认情况下,所有下载的applet都是不受信任的。
54.从网络上加载的applet和从本地文件系统加载的applet有什么区别?
当applet是从网络上加载的时候,applet是由applet类加载器载入的,它受applet安全管理器的限制。
当applet是从客户端的本地磁盘载入的时候,applet是由文件系统加载器载入的。
从文件系统载入的applet允许在客户端读文件,写文件,加载类库,并且也允许执行其他程序,但是,却通不过字节码校验。
55.applet类加载器是什么?它会做哪些工作?
当applet是从网络上加载的时候,它是由applet类加载器载入的。类加载器有自己的java名称空间等级结构。类加载器会保证来自文件系统的类有唯一的名称空间,来自网络资源的类有唯一的名称空间。
当浏览器通过网络载入applet的时候,applet的类被放置于和applet的源相关联的私有的名称空间中。然后,那些被类加载器载入进来的类都是通过了验证器验证的。验证器会检查类文件格式是否遵守Java语言规范,确保不会出现堆栈溢出(stack overflow)或者下溢(underflow),传递给字节码指令的参数是正确的。
56.applet安全管理器是什么?它会做哪些工作?
applet安全管理器是给applet施加限制条件的一种机制。浏览器可以只有一个安全管理器。安全管理器在启动的时候被创建,之后不能被替换覆盖或者是扩展。
Swing
57.弹出式选择菜单(Choice)和列表(List)有什么区别
Choice是以一种紧凑的形式展示的,需要下拉才能看到所有的选项。Choice中一次只能选中一个选项。List同时可以有多个元素可见,支持选中一个或者多个元素。
58.什么是布局管理器?
布局管理器用来在容器中组织组件。
59.滚动条(Scrollbar)和滚动面板(JScrollPane)有什么区别?
Scrollbar是一个组件,不是容器。而ScrollPane是容器。ScrollPane自己处理滚动事件。
60.哪些Swing的方法是线程安全的?
只有3个线程安全的方法: repaint(), revalidate(), and invalidate()。
61.说出三种支持重绘(painting)的组件。
Canvas, Frame, Panel,和Applet支持重绘。
62.什么是裁剪(clipping)?
限制在一个给定的区域或者形状的绘图操作就做裁剪。
63.MenuItem和CheckboxMenuItem的区别是什么?
CheckboxMenuItem类继承自MenuItem类,支持菜单选项可以选中或者不选中。
64.边缘布局(BorderLayout)里面的元素是如何布局的?
BorderLayout里面的元素是按照容器的东西南北中进行布局的。
65.网格包布局(GridBagLayout)里面的元素是如何布局的?
GridBagLayout里面的元素是按照网格进行布局的。不同大小的元素可能会占据网格的多于1行或一列。因此,行数和列数可以有不同的大小。
66.Window和Frame有什么区别?
Frame类继承了Window类,它定义了一个可以有菜单栏的主应用窗口。
67.裁剪(clipping)和重绘(repainting)有什么联系?
当窗口被AWT重绘线程进行重绘的时候,它会把裁剪区域设置成需要重绘的窗口的区域。
68.事件监听器接口(event-listener interface)和事件适配器(event-adapter)有什么关系?
事件监听器接口定义了对特定的事件,事件处理器必须要实现的方法。事件适配器给事件监听器接口提供了默认的实现。
69.GUI组件如何来处理它自己的事件?
GUI组件可以处理它自己的事件,只要它实现相对应的事件监听器接口,并且把自己作为事件监听器。
70.Java的布局管理器比传统的窗口系统有哪些优势?
Java使用布局管理器以一种一致的方式在所有的窗口平台上摆放组件。因为布局管理器不会和组件的绝对大小和位置相绑定,所以他们能够适应跨窗口系统的特定平台的不同。
71.Java的Swing组件使用了哪种设计模式?
Java中的Swing组件使用了MVC(视图-模型-控制器)设计模式。
JDBC
72.什么是JDBC?
JDBC是允许用户在不同数据库之间做选择的一个抽象层。JDBC允许开发者用JAVA写数据库应用程序,而不需要关心底层特定数据库的细节。
73.解释下驱动(Driver)在JDBC中的角色。
JDBC驱动提供了特定厂商对JDBC API接口类的实现,驱动必须要提供java.sql包下面这些类的实现:Connection, Statement, PreparedStatement,CallableStatement, ResultSet和Driver。
74.Class.forName()方法有什么作用?
这个方法用来载入跟数据库建立连接的驱动。
75.PreparedStatement比Statement有什么优势?
PreparedStatements是预编译的,因此,性能会更好。同时,不同的查询参数值,PreparedStatement可以重用。
76.什么时候使用CallableStatement?用来准备CallableStatement的方法是什么?
CallableStatement用来执行存储过程。存储过程是由数据库存储和提供的。存储过程可以接受输入参数,也可以有返回结果。非常鼓励使用存储过程,因为它提供了安全性和模块化。准备一个CallableStatement的方法是:
1CallableStament.prepareCall();
77.数据库连接池是什么意思?
像打开关闭数据库连接这种和数据库的交互可能是很费时的,尤其是当客户端数量增加的时候,会消耗大量的资源,成本是非常高的。可以在应用服务器启动的时候建立很多个数据库连接并维护在一个池中。连接请求由池中的连接提供。在连接使用完毕以后,把连接归还到池中,以用于满足将来更多的请求。
远程方法调用(RMI)
78.什么是RMI?
Java远程方法调用(Java RMI)是Java API对远程过程调用(RPC)提供的面向对象的等价形式,支持直接传输序列化的Java对象和分布式垃圾回收。远程方法调用可以看做是激活远程正在运行的对象上的方法的步骤。RMI对调用者是位置透明的,因为调用者感觉方法是执行在本地运行的对象上的。看下RMI的一些注意事项。
79.RMI体系结构的基本原则是什么?
RMI体系结构是基于一个非常重要的行为定义和行为实现相分离的原则。RMI允许定义行为的代码和实现行为的代码相分离,并且运行在不同的JVM上。
80.RMI体系结构分哪几层?
RMI体系结构分以下几层:
存根和骨架层(Stub and Skeleton layer):这一层对程序员是透明的,它主要负责拦截客户端发出的方法调用请求,然后把请求重定向给远程的RMI服务。
远程引用层(Remote Reference Layer):RMI体系结构的第二层用来解析客户端对服务端远程对象的引用。这一层解析并管理客户端对服务端远程对象的引用。连接是点到点的。
传输层(Transport layer):这一层负责连接参与服务的两个JVM。这一层是建立在网络上机器间的TCP/IP连接之上的。它提供了基本的连接服务,还有一些防火墙穿透策略。
81.RMI中的远程接口(Remote Interface)扮演了什么样的角色?
远程接口用来标识哪些方法是可以被非本地虚拟机调用的接口。远程对象必须要直接或者是间接实现远程接口。实现了远程接口的类应该声明被实现的远程接口,给每一个远程对象定义构造函数,给所有远程接口的方法提供实现。
82.java.rmi.Naming类扮演了什么样的角色?
java.rmi.Naming类用来存储和获取在远程对象注册表里面的远程对象的引用。Naming类的每一个方法接收一个URL格式的String对象作为它的参数。
83.RMI的绑定(Binding)是什么意思?
绑定是为了查询找远程对象而给远程对象关联或者是注册以后会用到的名称的过程。远程对象可以使用Naming类的bind()或者rebind()方法跟名称相关联。
84.Naming类的bind()和rebind()方法有什么区别?
bind()方法负责把指定名称绑定给远程对象,rebind()方法负责把指定名称重新绑定到一个新的远程对象。如果那个名称已经绑定过了,先前的绑定会被替换掉。
85.让RMI程序能正确运行有哪些步骤?
为了让RMI程序能正确运行必须要包含以下几个步骤:
编译所有的源文件。使用rmic生成stub。启动rmiregistry。启动RMI服务器。运行客户端程序。
86.RMI的stub扮演了什么样的角色?
远程对象的stub扮演了远程对象的代表或者代理的角色。调用者在本地stub上调用方法,它负责在远程对象上执行方法。当stub的方法被调用的时候,会经历以下几个步骤:
初始化到包含了远程对象的JVM的连接。序列化参数到远程的JVM。等待方法调用和执行的结果。反序列化返回的值或者是方法没有执行成功情况下的异常。把值返回给调用者。87.什么是分布式垃圾回收(DGC)?它是如何工作的?
DGC叫做分布式垃圾回收。RMI使用DGC来做自动垃圾回收。因为RMI包含了跨虚拟机的远程对象的引用,垃圾回收是很困难的。DGC使用引用计数算法来给远程对象提供自动内存管理。
88.RMI中使用RMI安全管理器(RMISecurityManager)的目的是什么?
RMISecurityManager使用下载好的代码提供可被RMI应用程序使用的安全管理器。如果没有设置安全管理器,RMI的类加载器就不会从远程下载任何的类。
89.解释下Marshalling和demarshalling。
当应用程序希望把内存对象跨网络传递到另一台主机或者是持久化到存储的时候,就必须要把对象在内存里面的表示转化成合适的格式。这个过程就叫做Marshalling,反之就是demarshalling。
90.解释下Serialization和Deserialization。
Java提供了一种叫做对象序列化的机制,他把对象表示成一连串的字节,里面包含了对象的数据,对象的类型信息,对象内部的数据的类型信息等等。因此,序列化可以看成是为了把对象存储在磁盘上或者是从磁盘上读出来并重建对象而把对象扁平化的一种方式。反序列化是把对象从扁平状态转化成活动对象的相反的步骤。
Servlet
91.什么是Servlet?
Servlet是用来处理客户端请求并产生动态网页内容的Java类。Servlet主要是用来处理或者是存储HTML表单提交的数据,产生动态内容,在无状态的HTTP协议下管理状态信息。
92.说一下Servlet的体系结构。
所有的Servlet都必须要实现的核心的接口是javax.servlet.Servlet。每一个Servlet都必须要直接或者是间接实现这个接口,或者是继承javax.servlet.GenericServlet或者javax.servlet.http.HTTPServlet。最后,Servlet使用多线程可以并行的为多个请求服务。
93.Applet和Servlet有什么区别?
Applet是运行在客户端主机的浏览器上的客户端Java程序。而Servlet是运行在web服务器上的服务端的组件。applet可以使用用户界面类,而Servlet没有用户界面,相反,Servlet是等待客户端的HTTP请求,然后为请求产生响应。
94.GenericServlet和HttpServlet有什么区别?
GenericServlet是一个通用的协议无关的Servlet,它实现了Servlet和ServletConfig接口。继承自GenericServlet的Servlet应该要覆盖service()方法。最后,为了开发一个能用在网页上服务于使用HTTP协议请求的Servlet,你的Servlet必须要继承自HttpServlet。这里有Servlet的例子。
95.解释下Servlet的生命周期。
对每一个客户端的请求,Servlet引擎载入Servlet,调用它的init()方法,完成Servlet的初始化。然后,Servlet对象通过为每一个请求单独调用service()方法来处理所有随后来自客户端的请求,最后,调用Servlet(译者注:这里应该是Servlet而不是server)的destroy()方法把Servlet删除掉。
96.doGet()方法和doPost()方法有什么区别?
doGet:GET方法会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。
doPOST:POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过POST请求传递的敏感信息对外部客户端是不可见的。
97.什么是Web应用程序?
Web应用程序是对Web或者是应用服务器的动态扩展。有两种类型的Web应用:面向表现的和面向服务的。面向表现的Web应用程序会产生包含了很多种标记语言和动态内容的交互的web页面作为对请求的响应。而面向服务的Web应用实现了Web服务的端点(endpoint)。一般来说,一个Web应用可以看成是一组安装在服务器URL名称空间的特定子集下面的Servlet的集合。
98.什么是服务端包含(Server Side Include)?
服务端包含(SSI)是一种简单的解释型服务端脚本语言,大多数时候仅用在Web上,用servlet标签嵌入进来。SSI最常用的场景把一个或多个文件包含到Web服务器的一个Web页面中。当浏览器访问Web页面的时候,Web服务器会用对应的servlet产生的文本来替换Web页面中的servlet标签。
99.什么是Servlet链(Servlet Chaining)?
Servlet链是把一个Servlet的输出发送给另一个Servlet的方法。第二个Servlet的输出可以发送给第三个Servlet,依次类推。链条上最后一个Servlet负责把响应发送给客户端。
100.如何知道是哪一个客户端的机器正在请求你的Servlet?
ServletRequest类可以找出客户端机器的IP地址或者是主机名。getRemoteAddr()方法获取客户端主机的IP地址,getRemoteHost()可以获取主机名。看下这里的例子。
101.HTTP响应的结构是怎么样的?
HTTP响应由三个部分组成:
状态码(Status Code):描述了响应的状态。可以用来检查是否成功的完成了请求。请求失败的情况下,状态码可用来找出失败的原因。如果Servlet没有返回状态码,默认会返回成功的状态码HttpServletResponse.SC_OK。
HTTP头部(HTTP Header):它们包含了更多关于响应的信息。比如:头部可以指定认为响应过期的过期日期,或者是指定用来给用户安全的传输实体内容的编码格式。如何在Serlet中检索HTTP的头部看这里。
主体(Body):它包含了响应的内容。它可以包含HTML代码,图片,等等。主体是由传输在HTTP消息中紧跟在头部后面的数据字节组成的。
102.什么是cookie?session和cookie有什么区别?
cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。下面列出了session和cookie的区别:
无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用cookie,但是,session仍然是能够工作的,因为客户端无法禁用服务端的session。在存储的数据量方面session和cookies也是不一样的。session能够存储任意的Java对象,cookie只能存储String类型的对象。103.浏览器和Servlet通信使用的是什么协议?
浏览器和Servlet通信使用的是HTTP协议。
104.什么是HTTP隧道?
HTTP隧道是一种利用HTTP或者是HTTPS把多种网络协议封装起来进行通信的技术。因此,HTTP协议扮演了一个打通用于通信的网络协议的管道的包装器的角色。把其他协议的请求掩盖成HTTP的请求就是HTTP隧道。
105.sendRedirect()和forward()方法有什么区别?
sendRedirect()方法会创建一个新的请求,而forward()方法只是把请求转发到一个新的目标上。重定向(redirect)以后,之前请求作用域范围以内的对象就失效了,因为会产生一个新的请求,而转发(forwarding)以后,之前请求作用域范围以内的对象还是能访问的。一般认为sendRedirect()比forward()要慢。
106.什么是URL编码和URL解码?
URL编码是负责把URL里面的空格和其他的特殊字符替换成对应的十六进制表示,反之就是解码。
JSP
107.什么是JSP页面?
JSP页面是一种包含了静态数据和JSP元素两种类型的文本的文本文档。静态数据可以用任何基于文本的格式来表示,比如:HTML或者XML。JSP是一种混合了静态内容和动态产生的内容的技术。这里看下JSP的例子。
108.JSP请求是如何被处理的?
浏览器首先要请求一个以.jsp扩展名结尾的页面,发起JSP请求,然后,Web服务器读取这个请求,使用JSP编译器把JSP页面转化成一个Servlet类。需要注意的是,只有当第一次请求页面或者是JSP文件发生改变的时候JSP文件才会被编译,然后服务器调用servlet类,处理浏览器的请求。一旦请求执行结束,servlet会把响应发送给客户端。这里看下如何在JSP中获取请求参数。
109.JSP有什么优点?
下面列出了使用JSP的优点:
JSP页面是被动态编译成Servlet的,因此,开发者可以很容易的更新展现代码。JSP页面可以被预编译。JSP页面可以很容易的和静态模板结合,包括:HTML或者XML,也可以很容易的和产生动态内容的代码结合起来。开发者可以提供让页面设计者以类XML格式来访问的自定义的JSP标签库。开发者可以在组件层做逻辑上的改变,而不需要编辑单独使用了应用层逻辑的页面。110.什么是JSP指令(Directive)?JSP中有哪些不同类型的指令?
Directive是当JSP页面被编译成Servlet的时候,JSP引擎要处理的指令。Directive用来设置页面级别的指令,从外部文件插入数据,指定自定义的标签库。Directive是定义在 <%@ 和 %>之间的。下面列出了不同类型的Directive:
包含指令(Include directive):用来包含文件和合并文件内容到当前的页面。页面指令(Page directive):用来定义JSP页面中特定的属性,比如错误页面和缓冲区。Taglib指令: 用来声明页面中使用的自定义的标签库。111.什么是JSP动作(JSP action)?
JSP动作以XML语法的结构来控制Servlet引擎的行为。当JSP页面被请求的时候,JSP动作会被执行。它们可以被动态的插入到文件中,重用JavaBean组件,转发用户到其他的页面,或者是给Java插件产生HTML代码。下面列出了可用的动作:
jsp:include-当JSP页面被请求的时候包含一个文件。jsp:useBean-找出或者是初始化Javabean。jsp:setProperty-设置JavaBean的属性。jsp:getProperty-获取JavaBean的属性。jsp:forward-把请求转发到新的页面。jsp:plugin-产生特定浏览器的代码。112.什么是Scriptlets?
JSP技术中,scriptlet是嵌入在JSP页面中的一段Java代码。scriptlet是位于标签内部的所有的东西,在标签与标签之间,用户可以添加任意有效的scriplet。
113.声明(Decalaration)在哪里?
声明跟Java中的变量声明很相似,它用来声明随后要被表达式或者scriptlet使用的变量。添加的声明必须要用开始和结束标签包起来。
114.什么是表达式(Expression)?
【列表很长,可以分上、中、下发布】
JSP表达式是Web服务器把脚本语言表达式的值转化成一个String对象,插入到返回给客户端的数据流中。表达式是在<%=和%>这两个标签之间定义的。
115.隐含对象是什么意思?有哪些隐含对象?
JSP隐含对象是页面中的一些Java对象,JSP容器让这些Java对象可以为开发者所使用。开发者不用明确的声明就可以直接使用他们。JSP隐含对象也叫做预定义变量。
EO入门教学一:SEO基础入门前言
作为一个SEO新手,在学习SEO的过程中,肯定会遇到很多问题,诠网科技在这里给大家总结一些注意事项。
SEO新手常见的三个问题:
1、我是小白能学会SEO吗?
很多人在刚开始接触SEO的时候会有这样的疑问?其实任何所谓的高手也都是从小白走过来的,通过系统的学习和操作,才能成为高手,从而为自己的团队带来价值。关键是要有信心,并且能够坚持学习。即使是对互联网一点不了解的人都没问题。
2、网站多久能获得排名?
网站的排名是有周期的,然而我们在网上也经常会看到三天上首页这样的广告,这是不可能的,百度又不是你家的,这大多是采用作弊的手法来排上去的,只是暂时的,无法稳定。只要从基础一步步去优化,把所有细节都做好,竞争力不大的话,一周能有排名。但是如果你不去执行,总是投机取巧,几年排名都上不来。所以慢就是快,快就是慢。
3、迷茫不懂怎么优化了?
这就是一个心态以及学习的掌握问题。我们在学习的过程中,要始终抱着空杯的心态,有些人稍微学了点技能,就觉得自己掌握了,杯子满了是无法再装进任何东西的。西安SEO特别提示:遇到自己不能解决的问题,就会产生迷茫。所以要时刻保持空杯心态,坚持学习和操作。
SEO学习成长阶段
1、新手入门期
刚开始,很有激情,觉得通过自己SEO学习可以为网站带来用户、创造价值,很有干劲。
2、学习成长期
经过一两个月的学习,不断执行,会有一个比较大的收获,处于不断成长的过程中。
3、迷茫混沌期
随着学习的东西越来越多,会发现以前做的存在很多误区,心中就会疑惑:到底该怎么做呢?或者自己觉得都学会了,实际操作的时候,又不知道怎么做了。这些都是很容易让你感到迷茫。处于这个时期其实很正常,不要抱怨,否则很容易放弃甚至脱离SEO界。
4、高手突破期
如果在迷茫期的时候能够保持了空杯心态,继续学习,就一定能够进入高手突破期。但是即使进入这个时期,也不能松懈,因为SEO的更新很快,还要坚持学习,这样才能达到真正的突破。
SEO入门教学二:百度搜索引擎及工作原理研究
诠网科技从本节开始我们正式接触搜索引擎优化,那么要从SEO新手蜕变为SEO大神,就必须要对搜索引擎的工作原理进行了解,这样才能做到知己知彼,百战不殆。目前国内主流的搜索引擎就是百度,那么本节就来研究下百度搜索引擎的工作原理进行研究。其他搜索引擎的原理也都差不多,所以做好百度优化,其他像360等搜索引擎的排名也都会顺带着获取比较好的排名的。
一、什么是搜索引擎优化
搜索引擎优化,就是通过一系列的操作,让我们的网站在搜索引擎中有良好的表现,从而获取更多用户的针对性的访问,提供网站的曝光率,让用户通过关键词主动进入网站。
二、搜索引擎的工作流程
<一>抓取
第一步,搜索引擎抓取程序也就是我们经常会听到的蜘蛛,爬取互联网上的大量页面,放入数据库中。
那么我们怎么利用这一步来应用到我们的优化过程中呢?
我们就要想办法让蜘蛛尽量多的来到我们的网站,如果连蜘蛛都不来的话,就无法对我们的网站的页面进行收录。
提高蜘蛛的抓取的办法有:
1、外部链接:通过外部链接将蜘蛛引入我们的网页。
2、提交链接:主动向搜索引擎提交链接。
3、蜘蛛自己:蜘蛛自己也是能抓取到我们网站的链接的,新站的话抓取的频率会比较少。
怎么知道蜘蛛有没有来到网站进行抓取呢?
1、可以通过百度站长平台的抓取频次就行查看。
2、通过服务器日志查看。
那么影响搜索引擎的抓取的因素又有哪些呢?
1、页面的路径过长
2、存在中文路径
<二>筛选过滤
第二步,搜索引擎安装自己建立的规则,对抓取到的网页进行筛选,将它认为是重复的、质量度低的页面过滤掉,剩下好的就放入数据库中,建立索引进行收录。
那么搜索引擎为什么要过滤呢?
1、互联网上存在大量无价值的页面、死链接、欺骗页面,所以必须将这些劣质内容筛选掉。
2、节省搜索引擎的工作时间、服务器资源。
影响筛选过滤的因素有哪些?
1、识别:蜘蛛在抓取的时候,对于不认识的东西是不会要的,即使收回去了,过段时间也会过滤掉。所以对于像js、flash、iframe等无法识别的代码就可以尽量少用或者精简。对于图片、视频等无法识别的内容做好相关描述方面的优化。
2、页面质量:搜索引擎是以用户为中心的,所以对于不能解决用户问题的页面用户是不喜欢的,那么同样搜索引擎也是不喜欢的,也同样会筛选掉,所以我们在做内容的时候要充分去解决用户的问题。
<三>收录
搜索引擎会把没有筛选掉的页面内容放入数据库中,进行收录。如何查看页面有没有被收录:
1、site:域名
2、直接把链接放入百度搜索框,如果能够看到页面的快照内容就代表被百度收录了。
3、通过百度站长工具后台进行查看。
<四>排名
对于没有被百度筛选掉的,百度就会根据自己的一套排序算法进行排名展示到搜索结果中。
所以我们就要研究如何才能让页面获得更好的排名进行,获得更多的展示。
影响排名的因素:
1、相关度。页面的标题与用户搜索的关键词的相关程度;页面的内容与标题的相关程度。
2、识别度。搜索引擎对于页面的识别程度。
3、数据。页面的停留时间、跳出率、pv、老用户的回访率。
以上就是百度搜素引擎的工作流程,了解百度的这样一个原理,应用到优化过程中去,对于排名是有很大帮助的。
SEO入门教学三:如何进行网站代码的优化及网页修改
网站代码优化是西安SEO小吴优化过程中非常重要的一个环节,可是很多人看到代码就非常头疼,会问为什么要做代码的优化呢?因为搜索引擎看到的网站内容并不像用户前台展现的那样,蜘蛛抓取识别的是网页的代码内容,那么我们想要搜索引擎能够更好的认识网站内容,就必须要对代码进行优化。
一、html的了解既然代码优化在优化中非常重要,可是很多SEOer对于代码都是一窍不通,在这里我们首页对于html代码做一个简单的了解。我们在网页中通过鼠标右键—查看网页源代码,所能看到的内容就是html代码,它是由大量标签组成的。我们就来对html网页的主要构成进行认识:
1、网页声明:在源代码中的第一行,所能看到的灰色字体的代码就是一个网页的声明。
类似于: 。这个一般不用管它。
2、... :紧接着我们会看到开始标签,同时在网页最下面可以看到一个结束标签,html标签通常都是由开始标签和结束标签成对出现的, 与 之间的文本描述网页。
3、 ...:网页的头部标签,这里面通常会存放meta说明标签以及网页的css、js调用代码。
其中这里面就会涉及到SEO中非常重要的title、keywords、deion也就是TKD三大标签。title内容是直接决定网站的定位以及优化方向的,而deion搜索引擎也是可以抓取到并展示在快照中,也是会影响到网站排名的,而keywords并不影响网站排名,不过为了标签的完整性,也会书写该内容。
4、...:这里面就会存放网页的主体部分,用户能看到的页面内容也就是这里面的内容。这里面存在大量各种类型的标签以及文本内容
5、:该标签没有闭合标签,用来定义图像的,例如:西安SEO网站优化,这里面属性src中的url地址就是用来说明图像存放的路径,alt 属性用来为图像定义可替换的文本,这在优化过程中是非常重要的,因为搜素引擎无法识别图片的内容,只能通过alt中的替换文本来进行识别,大多数网站都是有大量图片的,所以一定要对图片做好alt优化。
6、...:a标签是用来创建链接的,例如:,href 属性用于定位需要链接的页面地址,开始标签和结束标签之间的文字被作为超级链接来显示,也就是我们通常所说的锚文本。
7、DIV和CSS:我们在body主体中会看到大量的div,
标签把网页分割为独立的、不同的部分。而CSS(层叠样式表),用于定义HTML元素的显示形式。我们可以简单理解为:div用于显示内容的,css是修饰内容的,通过css可以对div里面的文字大小、颜色等等内容进行修饰。
二、优化标签下面介绍几个优化中非常重要的标签:
1、h标签, 六种形式,用来定义标题的。定义最大的标题。 定义最小的标题。我们在优化过程中需要重视的就是标签。蜘蛛来到网站首先识别的是title标签,这是网站的核心标签,是网站最重要的标签,而h1标签也同样是告诉搜索引擎该网页的主要核心内容的一个重要标签,通常在文章页详情页里,文章标题都会使用h1标签。在优化中一定需要注意的是一个页面中只能出现一对h1标签,要么可以不出现。如果出现多对的话,搜素引擎就无法判断到底哪个h1里面的内容是重要内容。2、rel="nofollow",是放在a标签中的,例如:,一般是添加在出站链接上,告诉搜索引擎不要向该链接页面进行权重的传递。尤其是一些淘宝客网站,会有大量链接指向淘宝,这些淘宝链接是不需要进行权重的传递的,所以可以进行nofollow。3、alt标签,这在上面也简单介绍了,就是对搜索引擎无法识别的图片进行文本说明,便于蜘蛛识别。
三、注意事项
1、标签完整性,html标签大多是成对出现的,所以有开头标签就要有结束标签。当然也有些标签是单标记标签,比如
,它是一个换行符。
2、代码精简。尽量用div写,不用table 。
3、减少不能识别的东西。像iframe框架、flash、js、视频等内容,搜索引擎是不能识别的,所以这些内容要尽量减少。
SEO入门教学四:网站首页关键词的核心定位
关键词到底该怎么定位这对于很多新手SEOer来说还是比较模糊的,西安SEO以首页的关键词定位来做详细分析,首页关键词的定位也就是网站的标题title,这对于网站是非常核心的,如果前期定位不对,后期怎么优化都会偏离跑道,只会越走越远。
一、关键词分析想要把网站首页关键词做到精准定位,就必须进行关键词分析,关键词分析可以从流量分析、需求分析、竞争度分析这三个最基本方面来进行。
1、流量分析我们要分析这个行业里哪些词是有流量的,流量的指数是多少,可以借助一些工具来辅助分析。百度指数:可以知道关键词每天的平均流量,也就决定了今后这些能够为你的网站带来多少的流量。
百度推广:另外一个能够精准查询关键词流量的工具就是百度推广,可以注册一个百度推广账号,进入网页版或者百度推广助手客户端版,进入搜索推广—下方的关键词规划师,就可以查询行业内的关键词流量。可以尽量的多找些有流量的词,整合到一起进行分析。
2、需求分析要分析用户有哪些需求?这些可以通过下拉以及相关搜索来了解有什么样的需求。另外还可以借助百度指数的需求图谱来进行挖掘。
3、竞争度分析想要让自己的网站定位更加有优势,还需要对同行网站的数量、首页竞争网站等进行竞争度分析。如果前两页大量竞争对手主网站在优化,那么说明这个词的竞争度就比较激烈了,优化的成本也就比较大。
二、关键词选取在第一步中对关键词进行分析了以后,就可以对标题中的关键词进行选择了,在选择的时候要满足:流量词、转化词以及搜索词这三方面的要求,也就是说你选择的词要是有用户搜索的流量词,同时还能够带来订单形成转化。三、关键词定制规范那么怎么去定制一个优秀的标题呢?
1、建议
(1)多少词:一般标题的保持在60个字节也就是30个汉字,这样能够完整的展示在搜索结果中,大概在3—5个关键词。
(2)同时要标题中要包含品牌词(3)虽然关键词是不参与网站排名的,但是为了TKD三大标签的完整性同时为了方便工具的查询分析,关键词keywords还是要写的,每个关键词之间用英文逗号隔开。
2、不建议不要带有与主题无关的垃圾词、不要进行关键词的堆砌、避免法律风险、避免过度承诺、夸张等。通过以上几步就可以对网站首页标题中需要做的关键词进行准确定位,为网站带来更好的排名。
SEO入门教学五:海量关键词挖掘选取归类
关键词的研究挖掘在优化过程中是非常重要的一步,通过对关键词的研究就是对一个行业的研究,用户的需求都是可以通过关键词来透漏出来,从而在网站中进行针对性的解决用户的需求。这里从以下几个方面来介绍下海量关键词的挖掘选取归类。
一、关键词的概念首页我们来了解下西安SEO中几种常见的关于关键词的概念:
1、核心词(目标关键词)
a,任何一个页面,不管是首页、栏目页、还是详情页,都会有一个核心词,也就是客户可能用来搜索的关键词,首页的核心词也就是代表着整个网站是做什么的。
b,目标关键词每天都会有稳定的搜索量。
c,网站的主要内容都是围绕核心词来展开的。
2、长尾需求词(由核心词拓展出来的长尾词)
a,虽然网站的大部分流量都是来自于核心词的,但是长尾词累积起来也是会带来大量的流量的。
b,特征:相对比较长,存在于内页上,搜索相对不稳定,同时也相对比较精准,数量大。
3、品牌词:这个就很好理解了,就是你网站的品牌词,当然不一定非要是你的公司名。
二、关键词的挖掘
1、确定关键词的范围一个行业的关键词有很多,但是如果我们采集了太多与自己网站不相关的关键词,就很容易造成网站内容与主题不相关,当这种内容堆积到一定量的时候,就很容易被百度降权。
2、关键词的挖掘工具和方法可以通过以下几种方式来进行关键词的挖掘,并进行整理分析
a,百度下拉框
b,百度相关搜索
c,百度指数
d,百度推广助手、金花追词工具PS:通过不同形式将关键词整理出来,并进行分析整理,帮助确定网站的关键词。
3、注意事项a,关键词一定要符合用户搜索习惯b,整理出来关键词,重复的过滤掉c,明显不在范围内关键词过滤掉
三、关键词归类为了能够更好的了解用户需求,以及网站的关键词定位布局,还可以将关键词按照横向和纵向进行归类
1、横向归类:可以将关键词按照:产品词、知识类词、问答类、评价类、产品属性类等等进行分类,这样在网站内布局的时候会更加清晰,整个网站的内容会非常精准。
2、纵向归类:还可以将关键词按照上下级的关系进行归类,这样布局关键词,网站层次、逻辑结构会更加明确。四、关键词分布在进行关键词的分布的时候可以按照站内以及站外两大类:
1、站内a,首页:一般企业类网站的首页会布局产品中心、案例、产品相关的资讯等关键词。
b,产品中心:布局产品类型的关键词
c,资讯中心:可以布局知识型词、问答词
2、站外:站外主要是进行评价类词的覆盖。
SEO入门教学六:利于优化的网站标题设置
网站的标题设置对于西安SEO的重要性不言而喻,直接决定网站以后的钱途。本节就来具体探讨下如何设置一个利于优化的网站标题。
一、选关键词首页要确定网站的关键词
1、确定核心关键词一个页面不管是首页还是内页,都要有一个核心关键词,一个页面只要确定一个核心词就行,可以使产品词、服务词等用户搜索词。2、核心词分布对于挖掘出来的核心词,可以按照上下级以及同等级的关系进行分布:
(1)核心词是上下等级的关系:首页做高等级的关键词,栏目页页做低等级的关键词。
(2)核心词是同一等级关系:如果关键词是非常相关的话,可以都做;如果同一等级不相关的话,可以首页做重要的核心词,次要的分布在内页。
二、写标题
1、方式(模子)组合关键词:A+B+C+品牌词,将几个关键词直接组合在一起包含关键词:比如:安徽SEO网站优化 包含关键词:西安SEO、西安网站建设,西安网站优化各种标题形式:网站每个页面的标题要独立不要重复、鲜明、包含关键词和品牌词,这些是一个优秀的标题所具有的特点。
2、步骤
(1)初步确定(合适标题):A+B+C+品牌词 即:核心词+需求词+品牌词
(2)研究核心词需求:挖掘核心词的需求(主要通过百度下拉、相关搜索、百度指数)eg:浴室柜(关键词) 浴室柜尺寸、浴室柜材质、浴室柜图片(需求词) 艾特品牌
(3)寻找需求词的共性:将所有核心词的需求放在一起,筛选出共性。
(4)确保组合基本通顺(良好标题):将核心词、需求词以及品牌词组合成简短的一句话eg:艾特品牌浴室柜—提供各种尺寸、材质浴室柜和浴室柜图片
(5)加入吸引点(优秀标题):可以在标题中加入一些时间词(2016、最新等)、信任词(专业、专家等)eg:艾特品牌浴室柜—专业提供2016各种尺寸、材质浴室柜和最新浴室柜图片
3、注意事项
(1)关键词不能堆砌,除了品牌词外,首页标题中可以再设置1—3个核心词
(2)符合说明:标题中的符号是不参与排名的,但要是英文状态下。
(3)长度:大于4个汉字,小于30个汉字
(4)标题关键词的顺序:靠前的关键词获得的权重越高
(5)匹配原则:完全匹配(字数、顺序完全一致)全部匹配(字数一致但可以分开)部分匹配(只能匹配到关键词中的一部分)
(6)从排名效果上:完全匹配>全部匹配>部分匹配
(7)修改原则:原则上标题设置好以后尽量不要修改,所以在上线前一定要确定好;即使修改,也尽量不要改变标题的原有匹配原则。 PS:修改标题一定会扣分,但如果不足以达到排名下降的值的情况下,排名也不会下降。三、内页标题设置前面主要是通过首页标题设置来进行讲解的,其实内页也都类似:栏目页:相对于首页核心词次要的一些核心词—品牌词详情页:产品名-品牌词文章标题-品牌词四、描述的写法在前面两节讲到关键词的挖掘归类方面的知识、本节是关于标题的详细介绍,那么在西安SEO中的三大标签只有deion描述没有讲到了,这里顺便介绍下描述的写法:就是用一段话,简述网站或者页面的主题,字数在50到70之间。这里需要注意两个核心点:
1、描述中包含核心产品、服务等关键词,突出核心。
2、在描述中体现网站的优势,在快照中展示以后可以起到吸引用户点击的作用。
SEO入门教学七:网站内容发展方向
西安SEO在本节中所要讲的网站内容发展方向是在昨天的基础上进行拓展的,网站的总体内容的添加方向的拓展。通过这两节的学习不但可以对一篇文章的内容进行优劣的评估而且可以清楚的知道接下来网站内容的方向如何去发展。
一、网站结构类型为了能够更好的理解网站的内容发展方向,首页我们来了解下网站的结构类型,一个网站是由首页、栏目页以及详情页组成的。
1、首页内容:栏目链接、详情页链接、图片、文字组成。注意点:首页的内容要注意与页面的核心匹配,而首页的核心就是标题所要表达的内容。
2、栏目页形式:栏目页有文字列表(纯粹的文字)、图文结合(图片加文字的列表形式)以及栏目封面(专门经过设计的封面)三种形式内容:不管是哪种形式栏目页的内容是具体详情页的链接组成的,那么栏目页的内容链接同样要与栏目的核心匹配。
3、详情页详情页一般会分为产品详请页和资讯详情页:
a,产品详请页:一般产品或者某项服务的详情页一般都是转化页面,所以在内容安排上要对产品的属性、特点、优势进行说明,突出产品本身的优势或者服务的优势。注意点:优先放用户对该产品最想关注的内容,忌讳什么都做。
b,资讯详情页:资讯详情页内容主要是针对一些问答、行业资讯的,是流量入口页面,引导用户进入产品转化页面。(可以配合图片来进行引导)详情页的元素要有文字配上图片说明,同时层次结构要清晰。
c,推荐链接:这在详情页中也是非常重要的,可以推荐一些相关或者互补的信息,降低网站的跳出率以及提高转化。
二、内容添加方向
1、一次性操作主要是指公司简介(要注意解决用户的信任的问题)、联系我们等添加一次基本不用修改的信息。
2、可以持续添加页面内容的更新:某个页面上可能会持续增加一些产品等信息。页面数量的更新
3、添加的优先顺序那么一个网站会持续添加内容,但不是没有顺序的乱添加,要遵循一定的优先顺序:首页:首页上所有链接的内容质量都要高,如果首页上推荐的这些内容质量不高,对网站的整体影响是比较大的。栏目页:如果产品栏目比较多的时候,可以根据公司的业务以及网站的核心来更新主要的产品栏目。详情页:产品以及服务页面优先更新;用户关心的内容优先(可以根据下拉、相关搜索等来挖掘);最后是进行长尾词的拓展。当然在更新的时候还要考虑当前的一些时效性比较强的相关热门话题的更新。
SEO入门教学八:网站结构的优化
1、代码结构:精简
对于搜索引擎来说,爬取的都是网站的代码,所以代码结构越精简,蜘蛛爬取就越高效,怎样精简代码?CSS与JS进行封装调用,不要写进源代码中。另外网站尽量少使用JS,采用DIV+CSS结构,抛弃table结构等。不过现在无论是成品的博客模板、CMS模板,还是企业建站,在代码精简上都做得非常不错了。
2、网址结构:url静态化 url静态化到底对西安SEO有多重要呢?其实根据之前的一些研究表明,静态化与动态url并没有明显的优势,一般来说,静态化网址是 //www.案例.com/reed/123.html,而动态化网址就是http://www.案例.com/view?123,其实两者差不多,但如果你的动态网址是http://www.案例.com/view&6548mm&id?3658 这样子的话,那就很不好了。加之又考虑到用户体验,所以url静态化是最好的选择。
3、目录逻辑结构:进出有路,三级目录 一般来说,我们建议网站的目录层次不超过3级,而前辈的众多经验是采用树状结构,也就是首页——目录——文章这样子的结构。
树状结构使得整个网站结构逻辑清晰,便于用户快速找到自己想要的内容,再加上合理的使用内链,对于蜘蛛来说,就形成了一张四通八达的爬取道路系统,想要富,想修路,路修好了,还怕蜘蛛不来爬取么?
SEO入门教学九:网站小工具的优化:
1、404页面制作:一个网站难免会有曾经的页面被删除,或者用户错误引用导致点击到根本没有过的页面,这时候没有一个404页面的引导,做为一个追求完美,追求卓越的西安SEO站长来说,是不应该的。
2、网站robots.txt制作:robots.txt是是搜索引擎爬取协议,也就是说你可以通过这个文件告诉搜索引擎,哪些目录不要爬去,一个网站的源码中包含了很多系统文件,而这些文件是不需要展示给用户看的,自然也不需要展示给搜索引擎看,如果你不进行引导,会让搜索引擎的蜘蛛把精力浪费在那些系统文件上,造成资源浪费。
3、网站地图制作:网站地图一般指xml地图与html地图,对于个人站长来说,成品的博客系统与cms系统都有功能或插件来实现这两个地图,网站地图会让搜索引擎更高效的抓取网站内容。
4、网站移动化制作:这是个移动互联网时代,所以网站移动化也是必须的,首选是自适应结构,像理想青年工作室的,次选是M站的制作。
西安SEO入门教学十:网站内容的优化
当网站结构与促进用户体验与搜索引擎抓取的小工具都制作好后,西安SEO就得开始进行内容优化了。
1、优质内容:对于一个网站来说,优质的内容是根本,我见过太多内容优质,但结构,外链方面都不太好的网站仍然拥的好的排名,这就说明在SEO排名中,如果是100分满分的话,内容应该占了90分。所以在为网站更新内容时,一定要确保内容优质,有价值,而不要为了更新而写一些莫名其妙,无关痛痒,毫无营养的一些文章。
2、持续更新:持续更新不单是搜索引擎的一个要求,更是对网站访客也起着至关重要的作用,持续更新能让访客经常访问你的网站,从而不至于流失用户,用户的流失会使得搜索引擎觉得你的网站正在被用户所抛弃,所以就会在排名打分系统中为你减分。试想一个用户连续三天来你的网站都没见到有新内容,他第四天来的可能性还有多大呢?
3、持续挖掘用户需求:在为网站创造内容这件事情上,一个优秀的SEO人员应该通过挖掘用户需求,通过长尾关键词来写文章,长尾关键词就代表了用户需求,所以要为断地去挖掘长尾关键词,满足用户需求。
4、与用户互动:开放评论、增加用户投稿渠道等,让用户参与到网站内容建设中来。
西安SEO入门教学十一:网站外链的优化
内容篇结束,就该到外链篇,目前虽然说外链不好做,但外链依旧有用。那么怎样做外链的优化呢?
1、友情链接交换:同行业友情链接交换最常见,也是比较优质的外链,建议每周增加1-2个新的友情链接,如果首页友情链接已经过多,可以做一些目录页面的友情链接。
2、行业网站投稿:行业网站投稿不单可以增加外链,在一定程度上还能增强品牌影响力。但并不是每个网站定位的行业都有行业网站可投稿,而在这方面,大家也可以去门户网站付费发布一些软文推广。
3、门户博客发文章:门户博客主要是新浪、网易、天涯等,但部分门户博客放外链的话会自动带nofollow标签,目前新浪和天涯还可以做外链。
4、自媒体平台发文章:自媒体平台目前也是可以做外链的,像、百家号、搜狐自媒体等,但只能做文本外链。
SEO入门教学十二:网站品牌优化
品牌优化似乎于网站优化无关,其实也不然,品牌做得越好,用户们自发去搜索我们网站的概率就越大,这样子会让搜索引擎认为我们是一个受欢迎的网站,从而在排名的时候加分。
1、建立QQ群便于用户交流:有微信群也可以,在用户交流中,你可以发现更多的用户需求,而一些用户的建议,会对你的网站有意想不到的帮助。
2、建立微信公众号:一个网站也应该拥有一个微信公众号,要知道在手机上打开你的网站,远不如微信上看你的公众号文章方便哦。不要让有的用户不愿意麻烦的打开你的网站而流失了。
SEO入门教学十三:教你如何正确优化自己的网站
西安SEO网站优化是一件技术,也是一门学问,并不是一天两天就可以完成的,这里所说的完成就是在搜索引擎中以一个好的排名展现,也是网站优化的效果。如果你想在短期时间有排名,我相信大家都知道是什么技术了,只有黑帽SEO技术才能快递获取排名,但是这个排名不会长久,只要被搜索引擎认为作弊,就会受到相应的惩罚。我们优化自己的网站,都是希望长久稳定的获取排名,所以是不建议大家使用这种作弊的技术。
那我们该如何正确的优化自己的网站呢?在这里我就给大家分享一下网站前期优化的思路吧,希望能给大家带来帮助!
网站前期优化,什么时候算前期优化呢?也就是网站上线到关键词进入前二十名的这段时间就是前期优化,这里的关键词是网站的核心词,那我们该如何正确的优化呢?在这里给大家总结三个点:
1.从搜索引擎内容识别性来讲,必须让搜索引擎能完整的识别整个网站内容,这样才能建立信任度,这是网站前期优化首先要操作的,主要是网站路径,越短越好,必须给一个非常顺畅的路径让蜘蛛来抓取你的内容;我们都知道蜘蛛爬取的是代码,看不到网站界面,所以代码层次要非常清晰,尽量少放搜索引擎不能识别的内容,,把不能识别的剔除,比如:js,falsh,视屏,音频,多层嵌套表格等。对于代码的识别也是在前期优化中完成的,比如,H标签,链出(QQ联系就是链出),其它小图标之类主要是关于模板方面的,这些都是一次性优化好的。
2.网站程序内容优化:一个网站能在前期很平稳的度过,获取特殊权重,这一点非常重要。一个新网站放在互联网上,各方面都没有优势,比如权重,链接投票,站龄,即使有内容没有获取用户点击,那么内容权重也没有,如何去跟一些基础权重,做了很久的网站竞争呢。首先我们要把网站提交给搜索引擎,让他跑来抓取网站内容从而收录,这里关系到一个简单的代码优化,也就是能识别就做识别,不能识别就做文字介绍,尽量不让蜘蛛不能识别的内容出现在网站上,那它只是抓取一个内容吗?不是的,网站想要获得最基础的权重,他要很顺畅的爬取所有的页面转一圈,那么我们的程序需要有哪些东西呢?才能让他很好的转一圈,需要:路径,内链,地图,robots.txt。
3.网站优化手段(主要指差异性的东西),优化一个网站或优化一个关键词,采用的是什么方法?每一个人所采用的方法都是一样,先写一个标题,然后做几个外链,让蜘蛛爬到我们的网站;锚文本外链提升关键词排名,然后给网站加内容,大多数的流程是这样,其实我们可以换一种方法,就是能够获取到稳定长期的点击,这样的一种优化手段。那该如何获取呢?使用资源站,用301权重转移到新站去,重定向是可以传递权重的,还可以转移用户,只要是行业相关,关键词相关才可以,不相关会认为作弊。
更多SEO优化排名资讯请关注:杭州诠网科技有限公司 www.hzik.cn
*请认真填写需求信息,我们会在24小时内与您取得联系。