精华内容
下载资源
问答
  • html常用标记

    2011-12-15 15:14:44
    包含最全面的HTML常用标记机器用法,对HTML标签进行详细分类,如结构性定义,与外观相关的标签,连结与图形,分隔,列举,背景与颜色,特殊字元,表单,表格,视框,杂项等
  • 3、常用html标记

    2018-11-23 22:02:35
    1、掌握HTML常用标记 2、在实践中灵活使用HTML的标记 学习过程: 这节课我们就列举几个比较常用html标签 1、内容分隔<HR>标签 <hr width="80%" size="2" color=&...

    学习目标:

    1、掌握HTML的常用标记

    2、在实践中灵活使用HTML的标记

    学习过程:

    这节课我们就列举几个比较常用html标签

    1、内容分隔<HR>标签

     <hr width="80%" size="2" color="blue"/>

    效果:

    2、项目列表和编号

    (1)有序列表<OL>

      <OL type="1">
    		<LI>填 写信息</LI>
    		<LI>收电子邮件</LI>
    		<LI>注册成功</LI>
    		<li>asdasdfas</li>
    	</OL>

    效果:

    (2)无序列表<UL>

    	<UL type="circle">
    		<LI>如何激活会员名?</LI>
    		<LI>如何注册淘宝会员?</LI>
    		<LI>注册时密码设置有什么要求?</LI>
    		<LI>支付宝认证</LI>
    	</UL>

    效果:

     

    3、预格式文本<PRE>标签

    HTML中代码格式与浏览器中显示效果一样

    	<pre>
        hello
            你好
             圣大非省的
        </pre>

    效果:

     

    4、页面链接<A>标签

    (1)连接到新页面

    在同一个文件夹下有两个html文件,从一个文件超链接到另一个文件的路径有2种方式

    • 相对路径:指定相对于当前文件的文件位置
    • 绝对路径:指定从根目录到文件的完整路径
    	<a href="second.jsp">第二个页面</a>
    	<a href="http://www.baidu.com">百度</a>
    	<a href="second.jsp" target="_blank">在新的窗口打开第二个页面</a>
    
    	<a href="first.jsp#hhh">在本页面跳转--锚点</a>
    
    	<a href="second.jsp#footer">第二个页面跳转--锚点</a>
    
    	<a href="mailto:598610033@qq.com">启动发送邮件的客户端</a>
    
    	<a href="#">空连接</a>

    (2)链接到页面的指定位置,锚点的使用。

    第一步:定义锚点,在你想要连接的位置定义一个锚点

    <a name="head" />

    第二步:连接到锚点,在锚点前面加个#符号。

    <a href="#name">在本页面跳转--锚点</a>

    5、滚动<MARQUEE>标签

    	<MARQUEE scrolldelay="80" direction="right" onmouseover="this.stop()"
    		onmouseout="this.start()"> <a href="second.jsp"> hello</a> </MARQUEE>

    pscrolldelay:表示滚动延迟时间,默认值为90毫秒。 pdirection:表示滚动的方向,默认为从右向左。

    展开全文
  • HTML头部标记 标记 描述 HTML5标准 <base> 定义页面中所有链接的基准URL <title> 设定显示在浏览器左上方的标题内容 <isindex> 表明该文档是一个可用于检索的网关脚本 不支持 <meta&...
  • HTML标记大全

    2008-05-21 00:27:16
    详细的列举了在html 中一些常用标记!有如一小手册,方便你的查阅
  • HTML头部标记 标记 描述 HTML5标准 <base> 定义页面中所有链接的基准URL <title> 设定显示在浏览器左上方的标题内容 <isindex> 表明该文档是一个可用于检索的网关...

    HTML头部标记

    标记 描述 HTML5标准
    <base> 定义页面中所有链接的基准URL
    <title> 设定显示在浏览器左上方的标题内容
    <isindex> 表明该文档是一个可用于检索的网关脚本 不支持
    <meta> 文档本身的元信息,例如查询关键词,有效期等
    <style> 设定CSS层叠样式表内容
    <link> 设定外部资源的链接
    <script> 页面脚本内容

     

    元信息标记<meta>属性

    标记 描述 HTML5标准
    http-equiv

    生成一个HTTP标准域,把Content属性关联到HTTP头部

    content-type / expires / refresh / set-cookie

    name

    把content属性关联到一个名称

    author / description / keywords / generator /revised /others

    content 定义与http-equiv 或 name属性相关的元信息 关键字/值内容
    charset 文档的字符编码 新增属性

     

    注:HTML5中不支持scheme属性,新增charset属性,具体查看:HTML5 <meta>标签

     

    HTML 主体标记<body>属性

    属性 描述 HTML5标准
    text 设定页面文字颜色 删除
    bgcolor 设定页面背景颜色 删除
    background 设定页面背景图像 删除
    bgproperties 设定页面的背景图像为固定,不随页面的滚动而滚动 删除
    link 设定页面默认的链接颜色 删除
    alink   设定鼠标正在单击时候的链接颜色   删除
    vlink   设定访问过后的链接颜色   删除
    topmargin   设定页面的上边距   删除
    leftmargin   设定页面的左边距 删除

     

    注: 在 HTML 5 中,删除了所有 <body> 的特殊属性。具体查看:HTML5 <body>标签

     

      

    特殊符号

    特殊符号 符号码
    "   &quot;
    & &amp;
    < &lt;
    > &gt;
    © &copy;
    ® &reg;
    ± &plusmn;
    × &times;
    § &sect;
    ¢ &cent;
    ¥ &yen;
    · &middot;
    &euro;
    £ &pound;
    &trade;

     

     

    标题字标记

    标记 描述
    <h1>.....</h1> 一级标题
    <h2>.....</h2> 二级标题
    <h3>.....</h3> 三级标题
    <h4>.....</h4> 四级标题
    <h5>.....</h5> 五级标题
    <h6>.....</h6> 六级标题

     

    注: 具体查看 HTML5 <h1> 至 <h6> 标签

    在 HTML 4.01 中,h1 - h6 元素的 "align" 属性不被赞成使用。

    在 HTML 5 中,h1 - h6 元素的 "align" 属性不被支持。

     

    文字的修饰标记

    标记 描述 HTML5标准
    <b> 粗体
    <strong> 粗体
    <i> 斜体
    <em> 斜体
    <cite> 斜体
    <sup> 上标
    <sub> 下标
    <big> 大字号 不支持
    <small> 小字号 不支持
    <u> 下划线 不支持
    <s> 删除线 不支持
    <strike> 删除线 不支持
    <address> 地址
    <tt> 打字机文字 不支持
    <blink> 闪烁文字(只适用Netscape浏览器) 不支持
    <code> 等宽
    <samp> 等宽
    <kbd> 键盘输入文字
    <var> 声明变量

     

     

    字体标记<font>属性

    属性 描述 HTML5标准
    face 字体 不支持
    size 字号 不支持
    color 颜色 不支持

     

    注:请查看  HTML 5 <font> 标签

    在 HTML 4.01 中,不赞成使用该元素。

    在 HTML 5 中,不支持该元素,但是允许由所见即所得的编辑器来插入该元素 。

    在 HTML 5 中,仅支持 style 属性。

     

    列表标记

    标记 描述 HTML5标准
    <ul> 无序列表
    <ol> 有序列表
    <dir> 目录列表 不支持
    <dl> 定义列表
    <menu> 菜单列表 重新定义;使用用于排列表单控件

    <dt>、<dd>

    定义列表的标记
    <li> 列表项目的标记

     

    超链接标记

    属性 描述 HTML5标准
    href 指定链接地址
    name 给链接命名 命名一个锚,不支持,使用id代替
    title 给链接提示文字
    target 指定链接的目标窗口

    链接目标窗口属性target

    属性值 描述
    _parent 在上一级窗口中打开.一般使用框架页会经常使用
    _blank 在新窗口中打开
    _self 在同一个帧或窗口中打开,默认
    _top 在浏览器的整个窗口中打开,忽略任何框架

     

     

    图片标记<img>属性

    属性 描述 HTML5标准
    src 图像的源文件
    alt 提示文字
    width、height 宽度、高度
    border 边框 不支持
    vspace 垂直间距 不支持
    hspace 水平间距 不支持
    align 排列 不支持

    图片排列align属性值

    属性值 描述 HTML5标准
    top 文字的中间线在图片上方  
    middle 文字的中间线在图片中间  
    bottom 文字的中间线在图片底部  
    left 图片在文字的左侧  
    right 图片在文字的右侧
    absbottom 文字的底线在图片底部
    absmiddle 文字的底线在图片中间
    baseline 英文文字基准线对齐
    texttop 英文文字上边线对齐

     

    注:请查看  HTML 5 <img> 标签

     

    表格标记

    标记 描述
    <table>...</table> 表格标记
    <tr>...</tr> 行标记
    <td>...</td>   单元格标记

    注:在 HTML 5 中,

    不支持 <table> 标签的任何属性。

    不支持 <tr> 标签的任何属性。

    仅支持<td><th>标签 "colspan" 和 "rowspan" 属性。

       

    表单标记<form>属性

    注:

    在 HTML 5 中有一个新属性:replace。它定义表单被提交后所做的事情。


    表单标记<form>元素

    标记 描述 HTML5标准
    <input> 表单输入标记 type 属性有很多新的值。
    <select> 菜单和列表标记 新的属性
    <option> 菜单和列表项目标记 可用于新元素 <datalist>中
    <textarea> 文字域标记 新属性

     

     

    输入标记<input>标记属性Type的值

    <input Type="属性值"/> 描述 HTML5标准
    text 文字域
    password 密码域
    file 文件域
    checkbox 复选框
    radio 单选框
    button 普通按钮
    submit 提交按钮
    reset 重置按钮
    hidden 隐藏域
    image 图像域(图像提交按钮)

     

    框架标记

    框架标记 描述   HTML5标准
    <frameset> 框架集 不支持
    <frame> 框架 不支持
    <iframe> 内联框架 仅仅支持 src 属性
    <noframe> 无框架 不支持

     注: 请查看 HTML 5 <frameset> 标签

    由于该标签对网页可用性的负面影响,在 HTML 5 中 <frameset> 标签没有得到支持。

     

    转载于:https://www.cnblogs.com/tweet/archive/2010/01/25/1655976.html

    展开全文
  • 哪些CSS和HTML快速开发工具最常用

    千次阅读 2012-04-14 22:39:41
    本文列举了多个最常用的CSS和HTML快速开发工具,供编程开发者们学习与参考,一起来看下吧。 1.CleverCSS CleverCSS是个为CSS开发而产生的小型的标记语言,它的设计灵感来自Python,使得能够以一种简洁、结构化...
    工欲善其事,必先利其器。对于广大的开发者们来说,有一个好的开发工具往往事半功倍。本文列举了多个最常用的CSS和HTML快速开发工具,供编程开发者们学习与参考,一起来看下吧。

    1.CleverCSS

    CleverCSS是个为CSS开发而产生的小型的标记语言,它的设计灵感来自Python,使得能够以一种简洁、结构化的方式构建样式表。在很多方面,它比CSS2更加爱简洁和强大。

    它与CSS最明显的不同之处在于语法:基于缩进而不是flat,很明显这有违Python指导,但这也不失为构建结构化样式的好点子。

    2.Sass

    Sass令CSS又有趣起来,它对CSS3进行了扩展,增加了嵌套规则、变量、混入、选择器继承等语法,可以使用命令行工具或网络框架插件,将其转化为良好格式的标准CSS。

    3.Sajax

    Sajax是一种使用Ajax framework来构建网站的开源工具,它使得通过JavaScript调用PHP,Perl或Python函数更加简便,而不产生页面刷新。该工具为你做了99%的工作,没有理由不用用。

    4.Komodo Edit for Perl,Python,Tcl,PHP,Ruby,Javascript

    Komodo Edit一个小型快速开源编辑器,要替换你信任已久的代码编辑器很难,但若给Komodo Edit一个机会,它一定不会让你失望的。

    它支持Windows、Mac、Linux,支持PHP, Python, Ruby, JavaScript, Perl, Tcl, XML, HTML 5, CSS3语法着色、代码折叠、后台语法检查、超强的自动补全和calltips。

    5.CSSTidy

    CSSTidy是一个开源CSS转化和优化工具,它能在Windows、Linux、OSX下执行,可以像PHP脚本一样由每行代码来控制行为。

    与其他大多数CSS转换工具相反,它不实用任何常规的表达式,从而CSSTidy能够对CSS2完美支持并提供高可靠性。
    展开全文
  • 常用技术总结与选型

    2019-12-24 16:39:11
    本文的目的是列举一些常用的技术,然后讲解一下不同技术的特点,进而延展出来如何选型 前端 界面展示 HTML HTML称为超文本标记语言,是一种标识性的语言,他主要的功能是定义文件的结构,通常和CSS以及JS一起...

    本文的目的是列举一些常用的技术,然后讲解一下不同技术的特点,进而延展出来如何选型

    前端

    界面展示

    HTML

    HTML称为超文本标记语言,是一种标识性的语言,他主要的功能是定义文件的结构,通常和CSS以及JS一起使用。HTML定义了网页内容的含义和结构,这里需要强调一点,HTML、CSS和JS本身的目的并不相同,CSS描述一个网页的表现与展示效果,JavaScript描述功能与行为。

    HTML5

    1 HTML5推出的理由

    解决Web上存在的问题:

    **Web浏览器间的兼容性低:**在一个浏览器中可以运行的HTML、Css、Javascript,在另一个浏览器中不能运行。

    原因:各浏览器规范不统一,没有被标准化。

    解决方案:使各浏览器的功能符合通用标准。

    **文档结构不够明确:**HTML4中元素不能把文档结构表示清楚。

    解决方案:增加与结构相关的元素。

    Web应用程序的功能受到限制:HTMLL4对Web应用程序的贡献很小,比如:不允许同时上传多个文件。

    解决方案:提供供Web应用程序使用的API。

    2 HTML5语法的改变

    内容类型不变

    HTML5的文件扩展符(html或.htm)与内容类型(text/html)保持不变。

    DOCTYPE声明变化

    HTML4中需要指明是HTML的哪个版本,HTML5不需要,只使用即可。

    指定字符编码变化

    HTML4:<meta http-equiv="content-type" content="text/html; charset=UTF-8">
    HTML5:<meta charset="UTF-8">
    

    可以省略元素的标记

    HTML5中很多元素标记可以省略

    具有boolean值的属性调整

    不指定属性值、属性名设定为属性值、字符串设为空时表示属性值为true;

    不写该属性表示属性值为false。

    例如:

    <input type=‶checkbox″ checked>                          表示checked值为true
    <input type=‶checkbox″ checked=‶checked″>          表示checked值为true
    <input type=‶checkbox″ checked=‶″>                      表示checked值为true
    <input type=‶checkbox″>                                       表示checked值为false
    

    可省略引号

    HTML5可省略指定属性值时的引号。

    3 新增的元素和废除的元素

    新增元素

    新增的结构元素

    section:表示页面中内容块,比如章节、页眉、页脚或页面中的其他部分

    article:表示页面中一块与上下文不相关的独立内容,比如博客中的一篇文章或报纸中的一篇文章。

    aside:表示article内容之外,与article内容相关的辅助信息。

    header:表示页面中的区域块,通常用它表示标题。

    hgroup:用于对整个页面或页面中标题进行整合。

    footer:表示页面中的区域块,通常表示区域快的脚部或底部,用于承载作者姓名、创作日期等与作者的元素。

    nav:表示页面中导航部分。

    figure:表示一段独立的流内容,一般表示主体流内容的一个独立单元。

    新增的其他元素

    video:定义电影片段、视频流等视频。

    audio:定义音乐或音频流。

    canvas:画布,本身没有行为,仅提供一块画布,但它的API展现给JavaScript及脚本,能够把想绘制的东西绘制在canvas上。

    embed mark progress meter time ruby rt rp wbr command details detalist

    datagrid keygen output source menu

    新增的input元素的类型

    email:表示必须输的email地址

    url:表示文本框输入的一个地址

    number:表示数字

    range:表示数字范围值

    DataPickers:表示日历的日期、时间

    废除的元素

    能使用css代替的元素

    basefont big center font s tt u等

    不再使用frame框架

    由于frame框架对网页可用性存在负面影响,HTML5中已不支持frame框架,只支持iframe框架或者用服务器方式创建的由多个页面组成的复合页面的形式,同时将frameset元素、frame元素、noframes元素废除。

    只有部分浏览器支持的元素

    其他被废除的元素

    4 新增的属性和废除的属性

    新增的属性

    表单相关的属性

    链接相关的属性

    其他属性

    废除的属性

    5 全局属性

    HTML5中新增全局属性的概念,全局属性指可以对任何元素都使用的属性。

    contentEditable属性

    允许用户编辑元素中内容,使用该属性的元素必须为可以获得鼠标焦点的元素,而且在点击鼠标后向用户提供一个插入符号,提示用户该元素允许进行编辑。

    是boolean值类型,可以设为true、false或继承状态。其中,true代表可编辑,false代表不可编辑,当未指定true或false时与父元素的继承状态相同。

    designMode属性

    用来指定整个页面是否可编辑,当页面可编辑时,页面中所有支持contentEditable属性的元素都变为可编辑状况。designMode属性只能在JavaScript脚本中被修改、编辑。属性值可取on(可编辑)或off(不可编辑)。

    hidden属性

    HTML5中所有元素都允许使用hidden属性,该属性类似于input元素中hidden元素,boolean值,可设为true(不可见)、false(可见)。当某元素的hidden属性值为true时,浏览器不渲染该元素,使该元素处于不可见状态,但浏览器创建该元素内容,即页面加载后允许使用JavaScript脚本将该属性值取消,使该元素可见。

    spellcheck属性

    针对input(type=text)与textarea这两个文本输入框提供的一个新属性,主要对用户输入内容进行拼写与语法检查。属性值为boolean值,可取true或false。

    tableindex属性

    当点击Tab键时,让窗口或页面中可获得焦点的链接元素或表单元素进行遍历,tableindex表示该元素第几个被访问到。

    若tableindex值为"-1"时表示无法获取该元素.

    CSS

    层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

    CSS描述一个网页的表现与展示效果,CSS的目的是为了网页丰富展示效果,和动态没关系,所有动态改变样式靠的是JS。

    CSS1提供有关字体、颜色、位置和文本属性的基本信息,该版本已经得到了目前解析HTML和XML的浏览器的广泛支持。

    但自从CSS1的版本之后,又在1998年5月发布了CSS2版本,样式单得到了更多的充实。

    CSS2.0提供给我们了一个机制,让程序员开发时可以不考虑显示和界面就可以制作表单和界面,显示问题可由美工或是程序员后期再来编写相应的 CSS2.0样式来解决。

    CSS2.0是一套全新的样式表结构,是由W3C推行的,同以往的CSS1.0或CSS1.2完全不一样,CSS2.0推荐的是一套内容和表现效果分离的方式,HTML元素可以通过CSS2.0的样式控制显示效果,可完全不使用以往HTML中的table和td来定位表单的外观和样式,只需使用div和 Li此类HTML标签来分割元素,之后即可通过CSS2.0样式来定义表单界面的外观。

    CSS3语言开发是朝着模块化发展的。以前的规范作为一个模块实在是太庞大而且比较复杂,所以,把它分解为一些小的模块,更多新的模块也被加入进来。

    简单来说就是css2有的属性css3都有,但是css3有的属性css2不一定有。 CSS3是最新的版本,效果上CSS2是比不了的,css3可以说是css2的进阶,因为css3是在css2的基础上增加了一些新的属性。比如定义圆角、背景颜色渐变、背景图片大小控制和定义多个背景图片等很多,这个是CSS2上没有的效果,现在新版本的浏览器基本都支持CSS3,比如IE9、FF4+、chrome11+,但是要用CSS3开发网站的话,要考虑的是还在用低版本浏览器的用户。

    JavaScript

    JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。
    JavaScript描述功能与行为,他主要赋予了动态改变网页的能力,Html本身并不能动态改变结构。由于原生JS实现某些功能或者界面效果过于复杂等一系列原因,所以后来出现了一大堆JS框架,比较有名的例如早先的JQUERY、DOJO等,现在的react、Vue、Angular。

    es等相关知识

    ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。

    ES6 主要是为了解决 ES5 的先天不足,比如 JavaScript 里并没有类的概念。

    JavaScript 是大家所了解的语言名称,但是这个语言名称是商标( Oracle 公司注册的商标)。因此,JavaScript 的正式名称是 ECMAScript 。1996年11月,JavaScript 的创造者网景公司将 JS 提交给国际化标准组织 ECMA(European computer manufactures association,欧洲计算机制造联合会),希望这种语言能够成为国际标准,随后 ECMA 发布了规定浏览器脚本语言的标准,即 ECMAScript。这也有利于这门语言的开放和中立。

    通用框架

    React

    如果你打算构建一个大型应用程序,请选择React
    如果你想要***的生态系统,请选择React
    更适合大型应用和更好的可测试性Web端和移动端原生APP通吃更大的生态系统,更多的支持和好用的工具。

    Vue

    如果你喜欢用模板搭建应用(或者有这个想法),请选择Vue
    如果你喜欢简单和“能用就行”的东西,请选择Vue
    模板和渲染函数的弹性选择简单的语法和项目配置更快的渲染速度和更小的体积

    Angular

    服务端

    语言

    现在的编程语言比较多,其实从基本功能角度讲,使用何种语言的区别只是语法区别,但是既然出现了多种语言,那么肯定有多种语言的出现的原因,下面就讲讲语言时如何发展的。
    程序的出现主要是因为基础科学的发展,早期的操作人员是通过带有孔的纸带将程序输入电脑进行编译(对纸条打点),但是由于打点是一个比较痛苦的工作,而且效率低下,所以需要一种其他方式来解决这个问题。
    二进制语言:

    0000,0000,000000010000 代表 LOAD A, 16
    
    0000,0001,000000000001 代表 LOAD B, 1
    
    0001,0001,000000010000 代表 STORE B, 16
    

    所以汇编语言出现了,汇编语言可以算是第一种编程语言。

    汇编语言

    了解和使用汇编语言有以下一些优点:

    • 说明程序是如何与操作系统、处理器和BIOS接口的;
    • 说明数据是如何表示并存储在存储器与外部设备上的;
    • 阐述处理器是如何访问与执行指令的,以及指令是如何访问与处理数据的;
    • 阐述程序是如何访问外部设备的。

    使用汇编语言的理由是:

    • 能够直接访问与硬件相关的存储器或I/O端口;
    • 能够不受编译器的限制,对生成的二进制代码进行完全的控制;
    • 能够对关键代码进行更准确的控制,避免因线程共同访问或者硬件设备共享引起的死锁;
    • 能够根据特定的应用对代码做最佳的优化,提高运行速度;
    • 能够最大限度地发挥硬件的功能;
    • 用汇编语言编写的程序比用高级语言编写的程序所要求的存储空间与执行时间将显著减少;
    • 汇编语言使程序员可以完成技术性非常强的任务;而使用高级语言,即使可能做到,恐怕也会非常困难;
    • 虽然大多数软件专家是用高级语言开发新的应用软件的(那样做,程序会比较容易编写的维护),但是对于执行时间要求比较苛刻的部分,常常还要用汇编语言来重新编写;
    • 常驻程序(当其他程序运行的时候,常驻在存储器中的程序)和中断服务例行程序(处理输入与输出的程序)几乎都是用汇编语言开发的。

    汇编语言的缺点

    • 编写的代码非常难懂,不好维护;
    • 很容易产生Bug,难于调试;
    • 只能针对特定的体系结构和处理器进行优化;
    • 开发效率很低,时间长且单调。
    • 我认为最重要的一点,无法编写大型程序

    汇编理论上是一种最应该学习的语言,因为只要汇编好没有什么写不了,但是由于汇编的开发难度与开发周期是明显不能满足现在工业化的应用,所以现有的软件基本都是采用更高级的语言进行开发。

    编译原理

    其实编译器的主要思路就是高级语言编译出低级语言能识别的语法,然后运行。譬如C编译完成之后就是汇编的代码,JAVA是在C语言基础上进行开发,编程语言的逐层升高的主要目的,是减少一些通用的重复性工作,并提供一些可以通用的实现。

    JAVA

    JAVA是现在很主流的一个编程语言,大部分项目都可以用JAVA来实现。
    角度一:
    优点:简单、安全、稳定、跨平台
    缺点:需要运行环境、不适合开发桌面应用程序
    应用:BS结构的ERP系统、金融系统、电子商务系统、网站等
    几乎所有的银行系统和银行网站都是基于Java平台的,你可以访问看看。
    角度二:
    优势:
    (1)一次编写,到处运行。
    (2)系统的多平台支持。
    (3)强大的可伸缩性。
    (4)多样化和功能强大的开发工具支持。
    劣势:
    (1) 与ASP一样,Java的一些优势正是它致命的问题所在。正是由于为了跨平台的功能,为了极度的伸缩能力,所以极大的增加了产品的复杂性。
    (2) Java的运行速度是用class常驻内存来完成的,所以它在一些情况下所使用的内存比起用户数量来说确实是“最低性能价格比”了。从另一方面,它还需要硬盘空间来储存一系列的。java文件和.class文件,以及对应的版本文件。
    角度三:
    1、跨平台性,虽然是很好的优势,可以让JAVA在任何的系统中运行,但是前提是该系统要安装JAVA虚拟机,这样导致一些JAVA编写的桌面程序无法在一般的用户(没有安装JAVA虚拟机的用户)上使用
    2、JAVA的身后是SUN公司,提供及时的API更新,但是过多的版本导致JAVA的向下兼容性很差。而SUN公司在J2EE上的标准定义的并不是完美,导致在J2EE的开发中多数使用开源框架,开源框架是好东西,但是更新速度并不快。
    3、都说面向对象的语言先进与面向过程,JAVA是OOP语言,但是它适合的是BS系统,在WEB项目中JAVA的实力毋庸置疑,但是转到了底层的程序却无法同C++抗衡。
    4、个人认为JAVA的最大优点是开源,但是这往往也成了最大的缺陷了,无法定义一个好的标准使得开发时使用了框架,在新的程序员来到公司时必须先了解框架,延缓了开发的时间。

    Python

    1. 在实际使用的python入门简单,但要学会用python干活,需要再学习python各种库,pyhton的强大在于库,为什么python的库强大,原因是python的库可以用python,c语言,c++等设计,再提供给python使用,所以无论gpu运行,神经网络,智能算法,数据分析,图像处理,科学计算,各式各样的库在等着你用。而java没有python那么多的开源库,很多库是商业公司内部使用,或发布出来只是一个jar包,看不到原始代码。python虚拟机因为编译性没有java的支持的好(或者说故意这么设计的),一般直接使用源码(linux),或源码简单打个包(如pyexe)。

    2. python用途最多的是脚本,java用途最多的是web,pyhotn是胶水,可以把各类不相关的东西粘在一起用,java是基佬,可以通过软件工程组成几百个人的团队和你pk,商业化气息重。不过我认为还是python强大,因为可以方便调用c或c++的库,但软件工程和商业化运作没有java好,适合快捷开发。

    3. 如果你想写程序卖软件用java,可用上ibm服务器,上oracle数据库,上EMC存储,价格高,商业采购公司喜欢这种高大上。如果你要直接用程序生成金钱用python,python可以实现宽客金融,数据回测,炒股,炒期权,炒黄金,炒比特币,对冲套利,统计套利,有很多开源库,数据分析库,机器学习库可以参考。

    4. 对于移动互联网,python只能通过运行库运行于安卓或ios,java原生支持安卓开发,但不能用ios中。

    5. 对于大数据,hadoop用java开的, spark用Scala开发,用python调用spark再分析更方便。

    6. Python的应用领域主要在游戏开发、搜索引擎、图形图像处理、脚本开发等。Java的应用领域主要是服务器开发,Web开发和安卓开发等。

    7. Java 是高级语言(High-level programming language),Python 是非常高级语言(very-high-level language )。

    8. 一个完整的Python HelloWorld程序只要一行代码:

      print(“Hello World”)

      一个完整的Java HelloWorld需要几行代码:

       public class HelloWorld {
       	
       	public static void main(String[] args) {
       		System.out.println("Hello World")
       	}
       }
      

      Python比Java简单,学习成本低,开发效率高
      Java运行效率高于Python,尤其是纯Python开发的程序,效率极低
      Java相关资料多,尤其是中文资料,Python国内的资料大多数情况无法满足需求,需要翻墙查找
      Java版本比较稳定,Python2和3不兼容导致大量类库失效
      Java开发偏向于软件工程,团队协同,Python更适合小型开发
      Java偏向于商业开发,Python适合于数据分析

    9. 如果你把Java作为你的人生的第一门用心学习的语言,那么你只需要花极短的时间,就可以基本学会C++,JavaScript,PHP, Python,R,C#,Objective-C,Swift,Go(是的,每一门语言都可以在极短的时间学会,只是具体的问题解决和一些坑需要多积累一些实战经验而已)。但是反过来,如果你把Python作为你的第一门语言,问题就回到外国人使用筷子这件事情上了,答案不言而喻。

    scala

    编程模型

    函数式编程关心数据的映射,命令式编程关心解决问题的步骤
    https://www.zhihu.com/question/28292740?sort=created
    详细看看这个

    相比较与Java,在下觉得Scala最主要的有以下两点优势:

    FP泛型支持

    如果用多了Spring中大量的template接口,你就会觉得FP其实还是蛮好用的。

    而这仅仅是FP好处的冰山一角。

    函数其实就是一个input -> output(scala也是这么表示一个函数的),没有任何副作用,与状态无关,由于这种特性,所以函数式的编程范式在分布式领域有很多好处

    对于函数式编程,我的知识实在是皮毛,但可以这么说,FP相对与OO有哪些优势,Scala对于Java差不多就有哪些优势。

    正因为FP有如此多的优势,所以Java8才引入了FP.从某种程度上来说,Java认可了Scala的做法。

    类型系统支持

    如果说Java是一种类型安全的语言,那么毫无疑问,Scala的类型更加安全,从某种程度上说,Scala的类型是图灵完备的,而Java不是。我的一位好朋友在这方面研究的比较深(http://hongjiang.info/scala/),而我对与Scala的类型系统的理解,也还是皮毛。

    正是以上这两点大优势,造成了Scala比Java更加安全,同时又具备灵活性,想象力。

    其他语言层面上的优势

    在Java中,你是否有时很想继承多个AbstractClass呢?对不起,Java只支持单继承

    在Scala中,你可以进行mixin(Java8也开始引入defaultmethod了呢)

    在Java中,想要一个singleton?要么在staticblock中做,要么利用Enum的单例特性完成,或者其他更纠结的方法。

    在Scala中,只要声明为object,即为单例。

    在Java中,想要延迟加载一个单例?doublecheck吧

    在Scala中,只要在object中将变量修饰为lazy即可

    在Java中,想要对集合进行一些操作?使用一层一层的for循环吧

    在Scala中,使用collection的一些集合操作,即可获得如写SQL般的享受。

    在Java中,在并发中想对Future进行回调?对不起,Future不是Listenable(无法支持回调),除非你使用额外的工具(如guava,spring)

    在Scala中,本来就主张异步编程,future和promise的配合让人非常愉快。

    在Java中,要透明扩展一个第三方库的类怎么办?包装,再加一层。

    在Scala中,有强大的implicit机制让你更优雅的做到这一点,同时还能保证类型安全(比起Ruby的monkeypatch,要安全得多)

    Scala的表达力很强,相同功能的代码,用Java和Scala的行数不可同日而语。

    这些单单是语言层面上的优势,除此之外,Scala还能无缝结合Java

    尽管罗列了如此多的好处,但Scala有如下劣势:

    语法复杂,学习曲线非常高

    NodeJS

    特点:

    1. 它是一个Javascript运行环境
    2. 依赖于Chrome V8引擎进行代码解释
    3. 事件驱动
    4. 非阻塞I/O
    5. 轻量、可伸缩,适于实时数据交互应用
    6. 单进程,单线程

    优点:

    1. 高并发(最重要的优点)
    2. 适合I/O密集型应用

    缺点:

    1. 不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;

      解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;

    2. 只支持单核CPU,不能充分利用CPU

    3. 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃

      原因:单进程,单线程

      解决方案:
      (1)Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;

      (2)开多个进程监听同一个端口,使用cluster模块;

    4. 开源组件库质量参差不齐,更新快,向下不兼容

    5. Debug不方便,错误没有stack trace

    高并发模型

    我们所看到的node.js单线程只是一个js主线程,本质上的异步操作还是由线程池完成的,node将所有的阻塞操作都交给了内部的线程池去实现,本身只负责不断的往返调度,并没有进行真正的I/O操作,从而实现异步非阻塞I/O,这便是node单线程和事件驱动的精髓之处了。

    1. 每个Node.js进程只有一个主线程在执行程序代码,形成一个执行栈(execution context stack)。
    2. 主线程之外,还维护了一个"事件队列"(Event queue)。当用户的网络请求或者其它的异步操作到来时,node都会把它放到Event Queue之中,此时并不会立即执行它,代码也不会被阻塞,继续往下走,直到主线程代码执行完毕。
    3. 主线程代码执行完毕完成后,然后通过Event Loop,也就是事件循环机制,开始到Event Queue的开头取出第一个事件,从线程池中分配一个线程去执行这个事件,接下来继续取出第二个事件,再从线程池中分配一个线程去执行,然后第三个,第四个。主线程不断的检查事件队列中是否有未执行的事件,直到事件队列中所有事件都执行完了,此后每当有新的事件加入到事件队列中,都会通知主线程按顺序取出交EventLoop处理。当有事件执行完毕后,会通知主线程,主线程执行回调,线程归还给线程池。
    4. 主线程不断重复上面的第三步。

    GO

    GO语言的关键特性主要包括以下几方面:

    • 并发与协程
    • 基于消息传递的通信方式
    • 丰富实用的内置数据类型
    • 函数多返回值
    • defer机制
    • 反射(reflect)
    • 高性能HTTP Server
    • 工程管理
    • 编程规范

    其实我觉得主要是并发量确实高,性能有优势。

    Ruby

    Perl

    常用技术

    SOA

    1. SOA(Service Oriented Architecture)“面向服务的架构”:他是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系列的功能。一个服务 通常以独立的形式存在与操作系统进程中。各个服务之间 通过网络调用。

    2. 微服务架构:其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。

      微服务架构 = 80%的SOA服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想

    微服务主要优势

    • 降低复杂度
    • 可独立部署
    • 容错
    • 扩展
    • 核心部件

    SpringBoot和SpringCloud

    SpringBoot和SpringCloud不是一个东西

    1、SpringBoot:是一个快速开发框架,通过用MAVEN依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动SpringMVC),简化XML配置,内置HTTP服务器(Tomcat,Jetty),最终以Java应用程序进行执行。

    2、SpringCloud: 是一套目前完整的微服务框架,它是是一系列框架的有序集合。它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过SpringBoot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用SpringBoot的开发风格做到一键启动和部署。

    SpringCloud 核心部件

    • Service Provider: 暴露服务的提供方。
    • Service Consumer:调用远程服务的服务消费方。
    • EureKa Server: 服务注册中心和服务发现中心。

    SpringCloud 通讯协议

    Spring Cloud 使用 HTTP 协议的 REST API。

    SpringCloud 服务依赖方式

    服务提供方和服务消费方通过 Json 方式交互,因此只需要定义好相关 Json 字段即可,消费方和提供方无接口依赖。通过注解方式来实现服务配置,对于程序有一定入侵。

    Dubbo

    Dubbo 核心部件

    • Provider:暴露服务的提供方,可以通过 jar 或者容器的方式启动服务。
    • Consumer:调用远程服务的服务消费方。
    • Registry:服务注册中心和发现中心。
    • Monitor:统计服务和调用次数,调用时间监控中心。(Dubbo 的控制台页面中可以显示,目前只有一个简单版本。)
    • Container:服务运行的容器。

    Dubbo 只是实现了服务治理,而 Spring Cloud 子项目分别覆盖了微服务架构下的众多部件,服务治理只是其中的一个方面。

    Dubbo 提供了各种 Filter,对于上述中“无”的要素,可以通过扩展 Filter 来完善。例如:

    • 分布式配置:可以使用淘宝的 diamond、百度的 disconf 来实现分布式配置管理。
    • 服务跟踪:可以使用京东开源的 Hydra,或者扩展 Filter 用 Zippin 来做服务跟踪。
    • 批量任务:可以使用当当开源的 Elastic-Job、tbschedule。
      点评:从核心要素来看,Spring Cloud 更胜一筹,在开发过程中只要整合 Spring Cloud 的子项目就可以顺利的完成各种组件的融合,而 Dubbo 却需要通过实现各种 Filter 来做定制,开发成本以及技术难度略高。

    Dubbo 通讯协议

    • Dubbo:Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
    • RMI:RMI 协议采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接和 JDK 标准序列化方式。
    • Hessian:Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 HTTP 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。
    • HTTP:采用 Spring 的 Http Invoker 实现。
    • Webservice:基于 CXF 的 frontend-simple 和 transports-http 实现。

    性能

    Dubbo 支持各种通信协议,而且消费方和服务方使用长链接方式交互,通信速度上略胜 Spring Cloud,如果对于系统的响应时间有严格要求,长链接更合适。

    Dubbo 服务依赖方式

    服务提供方与消费方通过接口的方式依赖,服务调用设计如下:

    • Interface 层:服务接口层,定义了服务对外提供的所有接口。
    • Molel 层:服务的 DTO 对象层。
    • Business层:业务实现层,实现 Interface 接口并且和 DB 交互。
      因此需要为每个微服务定义各自的 Interface 接口,并通过持续集成发布到私有仓库中。调用方应用对微服务提供的抽象接口存在强依赖关系,开发、测试、集成环境都需要严格的管理版本依赖。

    通过 maven 的 install & deploy 命令把 Interface 和 Model 层发布到仓库中,服务调用方只需要依赖 Interface 和 Model 层即可。

    在开发调试阶段只发布 Snapshot 版本,等到服务调试完成再发布 Release 版本,通过版本号来区分每次迭代的版本。通过 xml 配置方式即可接入 Dubbo,对程序无入侵。

    点评:Dubbo 服务依赖略重,需要有完善的版本管理机制,但是程序入侵少。

    而 Spring Cloud 通过 Json 交互,省略了版本管理的问题,但是具体字段含义需要统一管理,自身 Rest API 方式交互,为跨平台调用奠定了基础。

    WebService

    Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。 [1]
    Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。

    数据库

    数据库选型的基本原则是,没有最好的只有最合适的。每种数据库都有其自身的优势,也都有其天然的劣势,大多数时候我们应该选择用的人比较多的数据库,这样碰见一些意外问题的时候可以有办法解决。其次可以参考以下几个因素。

    1. 稳定可靠(High-Availability)
    2. 可扩展(High-Scalability)
    3. 安全性(Security)
    4. 丰富的开发工具
    5. 服务质量

    大部分的用户基数大的数据库应该都能满足,所以这个

    关系型数据库

    Mysql

    优点:

    • 体积小、速度快、总体拥有成本低,开源;
    • 支持多种操作系统;
    • 是开源数据库,提供的接口支持多种语言连接操作
    • mysql的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的MySql能很容易充分利用CPU;
    • MySql有一个非常灵活而且安全的权限和口令系统。当客户与MySql服务器连接时,他们之间所有的口令传送被加密,而且MySql支持主机认证;
    • 支持ODBC for Windows, 支持所有的ODBC 2.5函数和其他许多函数, 可以用Access连接MySql服务器, 使得应用被扩展;
    • 支持大型的数据库, 可以方便地支持上千万条记录的数据库。作为一个开放源代码的数据库,可以针对不同的应用进行相应的修改。
    • 拥有一个非常快速而且稳定的基于线程的内存分配系统,可以持续使用面不必担心其稳定性;
    • MySQL同时提供高度多样性,能够提供很多不同的使用者介面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言介面,例如C+,Perl,Java,PHP,以及Python。你可以使用事先包装好的客户端,或者干脆自己写一个合适的应用程序。MySQL可用于Unix,Windows,以及OS/2等平台,因此它可以用在个人电脑或者是服务器上;

    缺点:

    • 不支持热备份;
    • MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变;
    • MySQL的价格随平台和安装方式变化。Linux的MySQL如果由用户自己或系统管理员而不是第三方安装则是免费的,第三方案则必须付许可费。Unix或linux 自行安装 免费 、Unix或Linux 第三方安装 收费;

    Oracle

    优点:

    • 体积小、速度快、总体拥有成本低,开源,提供的接口支持多种语言连接操作。
    • 支持多种操作系统。
    • MySQL 的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的MySQL 能很容易充分利用CPU。
    • MySQL 有一个非常灵活而且安全的权限和口令系统。当客户与MySQL 服务器连接时,他们之间所有的口令传送被加密,而且MySQL 支持主机认证。
    • MySQL 能够提供很多不同的使用者界面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言界面,例如 C++,Perl,Java,PHP,以及Python。你可以使用事先包装好的客户端,或者干脆自己写一个合适的应用程序。MySQL可用于 Unix,Windows,以及OS/2等平台,因此它可以用在个人电脑或者是服务器上。

    缺点:

    • 不支持热备份。
    • MySQL不支持自定义数据类型
    • MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变。
    • MySQL对存储过程和触发器支持不够良好。
    • 尽管 MySQL 理论上仍是开源产品,也有人抱怨它诞生之后更新缓慢。然而,应该注意到有一些基于 MySQL 并完整集成的数据库(如 MariaDB),在标准的 MySQL 基础上带来了额外价值。
    • MySQL对XML支持不够良好

    何时使用 ?

    1. 分布式操作:

      当你需要的比SQLite可以提供的更多时,把MySQL包括进你的部署栈,就像任何一个独立的数据库服务器,会带来大量的操作自由和一些先进的功能。

    2. 高安全性:

      MySQL的安全功能,用一种简单的方式为数据访问(和使用)提供了可靠的保护。

    3. Web网站 和 Web应用:

      绝大多数的网站(和Web应用程序)可以忽视约束性地简单工作在MySQL上。这种灵活的和可扩展的工具是易于使用和易于管理的——这被证明非常有助于长期运行。

    4. 定制解决方案:

      如果你工作在一个高度量身定制的解决方案上,MySQL能够很容易地尾随和执行你的规则,这要感谢其丰富的配置设置和操作模式。

    何时不用 ?

    1. SQL 服从性:

      因为 MySQL 没有[想要]实现 SQL 的全部标准,所以这个工具不完全符合SQL。如果你需要对这样的关系数据库管理系统进行整合,从MySQL进行切换是不容易的。

    2. 并发:

      即使MySQL和一些存储引擎能够真地很好执行读取操作,但并发读写还是有问题的。

    3. 缺乏特色:

      再次提及,根据数据库引擎的选择标准,MySQL会缺乏一定的特性,如全文搜索。

    PostgreSQL

    PostgreSQL是一个自由的对象-关系数据库服务器(数据库管理系统),支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL。

    优点

    1. PostgreSQL 是一个开源的,免费的,同时非常强大的关系型数据管理系统。

    2. PostgreSQL 背后有热忱而经验丰富的社区,可以通过知识库和问答网站获取支持,全天候免费。

    3. 即使其本身功能十分强大,PostgreSQL 仍附带有许多强大的开源第三方工具来辅助系统的设计、管理和使用。

    4. 可以用预先存储的流程来程序性扩展 PostgreSQL ,一个高级的关系型数据库理应如此。

    5. PostgreSQL 不只是一个关系型数据库,还是一个面向对象数据库——支持嵌套,及一些其他功能。

    缺点

    1. 对于简单而繁重的读取操作, 超过了 PostgreSQL 的杀伤力,可能会出现比同行(如MySQL)更低的性能。

    2. 按给出的该工具的性质,从普及度来说它还缺乏足够后台支撑,尽管有大量的部署——这可能会影响能够获得支持的容易程度。

    何时使用?

    1. 数据完整性:

      当可靠性和数据完整性是绝对必要而无需理由时,PostgreSQL是更好的选择。

    2. 复杂的自定义过程:

      如果你需要你的数据库执行自定义过程,可扩展的PostgreSQL是更好的选择。

    3. 整合:

      在将来,如果可能要把整个数据库系统迁移到另一个适当的解决方案(例如Oracle)中,PostgreSQL对于这种切换将是最兼容和易于操作的。

    4. 复杂的设计:

      相比其他的开源和免费的 RDBMS(关系数据库管理系统)实现来说,对于复杂的数据库设计,PostgreSQL提供了大部分的功能和可能性,同时并没放弃其他有价值的地方。

    何时不用?

    1. 速度:

      如果你需要的只是快速的读取操作, PostgreSQL 不是为此而准备的工具。

    2. 简化体制:

      除非你需要绝对的数据完整性,原子性,一致性,隔离性,耐久性,或复杂的设计,PostgreSQL 对简化体制来说是杀手。

    3. 复制:

      除非你愿意花不少时间,精力和资源,否则对于那些缺乏数据库和系统管理经验的人来说,实现与MySQL的(主从)复制可能不容易。

    大数据处理相关技术

    zookeeper

    Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

    1. 命名服务
      这个似乎最简单,在zookeeper的文件系统里创建一个目录,即有唯一的path。在我们使用tborg无法确定上游程序的部署机器时即可与下游程序约定好path,通过path即能互相探索发现,不见不散了。

    2. 配置管理
      程序总是需要配置的,如果程序分散部署在多台机器上,要逐个改变配置就变得困难。好吧,现在把这些配置全部放到zookeeper上去,保存在 Zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中就好。

    3. 集群管理
      所谓集群管理无在乎两点:是否有机器退出和加入、选举master。
      对于第一点,所有机器约定在父目录GroupMembers下创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该机器与 zookeeper的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知:某个兄弟目录被删除,于是,所有人都知道:它上船了。新机器加入 也是类似,所有机器收到通知:新兄弟目录加入,highcount又有了。

    4. 分布式锁
      有了zookeeper的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独占,另一个是控制时序。

    5. 队列管理
      两种类型的队列:
      1、 同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。
      2、队列按照 FIFO 方式进行入队和出队操作。
      第一类,在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。
      第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。

    hadoop

    Hadoop是适合于大数据的分布式存储处理平台,是一种开源的框架。这里加黑的字我认为是很重要的部分,Hadoop提供了两种功能,一个存储、一个计算。很多组件与hadoop整合其实是利用hadoop的一部分特性或者是替换hadoop的一部分特性,又或者是优化了其中一部分特性。
    Hadoop实现MapReduce的缺点是因为他暴力的实现了MapReduce的设计思路,是一种面向过程的设计,我想得到结果,应该怎么做的思路。

    spark

    Spark是什么?

    Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

    为什么要用Spark?

    由上文可以看书,Spark是个计算模型,他只实现了Hadoop的部分功能,即计算功能。为什么要替换Hadoop的计算功能呢,就是因为Hadoop的MapReduce模型效率太低,他每一步都需要将结果落地放到磁盘上,虽然这样是有优势的,例如容错性,稳定性等等,但是对于现在时效性要求越来越高的系统来说,显然是不达标的。
    其实除了Spark对一些算法本身进行的优化之外,他的最大优势就是所有数据在没有必要的情况下,完全都是基于内存进行计算的,除了明确指示,不会有任何基于磁盘的操作,而我们都知道,磁盘的效率是远远低于内存的,这个是我们使用Spark的根本原因。

    hive

    Apache Hive™数据仓库软件便于读取、写入和管理存储在分布式存储中的大型数据集,并使用SQL语法进行查询。
    Hive 构建于Apache Hadoop™之上,提供以下功能:

    1. 用于通过SQL轻松访问数据的工具,从而支持数据仓库任务,如提取/转换/加载(ETL)、报告和数据分析。
    2. 一种在各种数据格式上强加结构的机制。
    3. 访问直接存储在Apache HDFS ™或其他数据存储系统(如Apache HBase ™)中的文件 。
    4. 通过Apache Tez ™,Apache Spark ™或 MapReduce执行查询。
    5. 使用HPL-SQL的过程语言。
    6. 通过Hive LLAP,Apache YARN和Apache Slider进行亚秒级查询检索。

    Hive将外部的任务解析成一个MapReduce可执行计划,而启动MapReduce是一个高延迟的一件事,每次提交任务和执行任务都需要消耗很多时间,这也就决定Hive只能处理一些高延迟的应用(如果你想处理低延迟的应用,可以考虑一下Hbase)。

    spark-sql

    SparkSQL的前身是Shark,给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,hive应运而生,它是当时唯一运行在Hadoop上的SQL-on-hadoop工具。但是MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,降低的运行效率,为了提高SQL-on-Hadoop的效率,Shark应运而生,但又因为Shark对于Hive的太多依赖(如采用Hive的语法解析器、查询优化器等等),2014年spark团队停止对Shark的开发,将所有资源放SparkSQL项目上

    flume

    什么是flume?

    apache Flume 是一个从可以收集例如日志,事件等数据资源,并将这些数量庞大的数据从各项数据资源中集中起来存储的工具/服务,或者数集中机制。flume具有高可用,分布式,配置工具,其设计的原理也是基于将数据流,如日志数据从各种网站服务器上汇集起来存储到HDFS,HBase等集中存储器中。

    应用场景

    比如我们在做一个电子商务网站,然后我们想从消费用户中访问点特定的节点区域来分析消费者的行为或者购买意图. 这样我们就可以更加快速的将他想要的推送到界面上,实现这一点,我们需要将获取到的她访问的页面以及点击的产品数据等日志数据信息收集并移交给Hadoop平台上去分析.而Flume正是帮我们做到这一点。现在流行的内容推送,比如广告定点投放以及新闻私人定制也是基于次,不过不一定是使用FLume,毕竟优秀的产品很多,比如facebook的Scribe,还有Apache新出的另一个明星项目chukwa,还有淘宝Time Tunnel。

    Flume的优势

    1. Flume可以将应用产生的数据存储到任何集中存储器中,比如HDFS,HBase
    2. 当收集数据的速度超过将写入数据的时候,也就是当收集信息遇到峰值时,这时候收集的信息非常大,甚至超过了系统的写入数据能力,这时候,Flume会在数据生产者和数据收容器间做出调整,保证其能够在两者之间提供一共平稳的数据.
    3. 提供上下文路由特征
    4. Flume的管道是基于事务,保证了数据在传送和接收时的一致性.
    5. Flume是可靠的,容错性高的,可升级的,易管理的,并且可定制的。

    Flume具有的特征

    1. Flume可以高效率的将多个网站服务器中收集的日志信息存入HDFS/HBase中
    2. 使用Flume,我们可以将从多个服务器中获取的数据迅速的移交给Hadoop中
    3. 除了日志信息,Flume同时也可以用来接入收集规模宏大的社交网络节点事件数据,比如facebook,twitter,电商网站如亚马逊,flipkart等
    4. 支持各种接入资源数据的类型以及接出数据类型
    5. 支持多路径流量,多管道接入流量,多管道接出流量,上下文路由等
    6. 可以被水平扩展

    kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    对于像 Hadoop 一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka 的目的是通过 Hadoop 的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

    flume和kafka区别

    kafka 和 flume 都是日志系统,kafka 是分布式消息中间件,自带存储,提供 push 和 pull 存取数据功能。flume 分为 agent(数据采集器),collector(数据简单处理和写入),storage(存储器)三部分,每一部分都是可以定制的。比如 agent 采用 RPC(Thrift-RPC)、text(文件)等,storage 指定用 hdfs 做。

    kafka 做日志缓存应该是更为合适的,但是 flume 的数据采集部分做的很好,可以定制很多数据源,减少开发量。所以比较流行 flume+kafka 模式,如果为了利用 flume 写 hdfs 的能力,也可以采用 kafka+flume 的方式。

    采集层 主要可以使用 Flume, Kafka 两种技术。

    Flume:Flume 是管道流方式,提供了很多的默认实现,让用户通过参数部署,及扩展 API.

    Kafka:Kafka 是一个可持久化的分布式的消息队列。

    Kafka 是一个非常通用的系统。你可以有许多生产者和很多的消费者共享多个主题 Topics。相比之下,Flume 是一个专用工具被设计为旨在往 HDFS,HBase 发送数据。它对 HDFS 有特殊的优化,并且集成了 Hadoop 的安全特性。所以,Cloudera 建议如果数据被多个系统消费的话,使用 kafka;如果数据被设计给 Hadoop 使用,使用 Flume。

    正如你们所知 Flume 内置很多的 source 和 sink 组件。然而,Kafka 明显有一个更小的生产消费者生态系统,并且 Kafka 的社区支持不好。希望将来这种情况会得到改善,但是目前:使用 Kafka 意味着你准备好了编写你自己的生产者和消费者代码。如果已经存在的 Flume Sources 和 Sinks 满足你的需求,并且你更喜欢不需要任何开发的系统,请使用 Flume。

    Flume 可以使用拦截器实时处理数据。这些对数据屏蔽或者过量是很有用的。Kafka 需要外部的流处理系统才能做到。

    Kafka 和 Flume 都是可靠的系统,通过适当的配置能保证零数据丢失。然而,Flume 不支持副本事件。于是,如果 Flume 代理的一个节点崩溃了,即使使用了可靠的文件管道方式,你也将丢失这些事件直到你恢复这些磁盘。如果你需要一个高可靠行的管道,那么使用 Kafka 是个更好的选择。

    Flume 和 Kafka 可以很好地结合起来使用。如果你的设计需要从 Kafka 到 Hadoop 的流数据,使用 Flume 代理并配置 Kafka 的 Source 读取数据也是可行的:你没有必要实现自己的消费者。你可以直接利用 Flume 与 HDFS 及 HBase 的结合的所有好处。你可以使用 Cloudera Manager 对消费者的监控,并且你甚至可以添加拦截器进行一些流处理。

    Flume 和 Kafka 可以结合起来使用。通常会使用 Flume + Kafka 的方式。其实如果为了利用 Flume 已有的写 HDFS 功能,也可以使用 Kafka + Flume 的方式。

    flink

    Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任务:

    DataSet API, 对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,用户可以方便地使用Flink提供的各种操作符对分布式数据集进行处理,支持Java、Scala和Python。

    DataStream API,对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,用户可以方便地对分布式数据流进行各种操作,支持Java和Scala。

    Table API,对结构化数据进行查询操作,将结构化数据抽象成关系表,并通过类SQL的DSL对关系表进行各种查询操作,支持Java和Scala。

    从这里可以看出flink只提供了Spark中的SparkStreaming的类似功能,但是flink的性能更好

    flink和spark stream等框架的对比

    我们当时的目标就是要设计一款低延迟、exactly once、流和批统一的,能够支撑足够大体量的复杂计算的引擎。

    Spark streaming: 的本质还是一款基于 microbatch 计算的引擎。这种引擎一个天生的缺点就是每个 microbatch 的调度开销比较大,当我们要求越低的延迟时,额外的开销就越大。这就导致了 spark streaming 实际上不是特别适合于做秒级甚至亚秒级的计算。

    Kafka streaming: 是从一个日志系统做起来的,它的设计目标是足够轻量,足够简洁易用。这一点很难满足我们对大体量的复杂计算的需求。

    Storm: 是一个没有批处理能力的数据流处理器,除此之外 Storm 只提供了非常底层的 API,用户需要自己实现很多复杂的逻辑。另外,Storm 在当时不支持 exactly once。种种原因,Storm 也无法满足我们的需求。

    最后,我们发现了 Flink,并且惊喜地发现它几乎完美满足了我们所有的需求:

    1. 不同于 Spark,Flink 是一个真正意义上的流计算引擎,和 Storm 类似,Flink 是通过流水线数据传输实现低延迟的流处理;
    2. Flink 使用了经典的 Chandy-Lamport 算法,能够在满足低延迟和低 failover 开销的基础之上,完美地解决 exactly once 的目标;
    3. 如果要用一套引擎来统一流处理和批处理,那就必须以流处理引擎为基础。Flink 还提供了 SQL/tableAPI 这两个 API,为批和流在 query 层的统一又铺平了道路。因此 Flink 是最合适的批和流统一的引擎;
    4. 最后,Flink 在设计之初就非常在意性能相关的任务状态 state 和流控等关键技术的设计,这些都使得用 Flink 执行复杂的大规模任务时性能更胜一筹。

    nosql相关技术

    NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

    Redis

    redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发、高扩展,大数据存储等一系列的问题而产生的数据库解决方案,是一个非关系型的数据库。但是,它也是不能替代关系型数据库,只能作为特定环境下的扩充。

    redis是一个以key-value存储的数据库结构型服务器,它支持的数据结构类型包括:字符串(String)、链表(lists)、哈希表(hash)、集合(set)、有序集合(Zset)等。为了保证读取的效率,redis把数据对象都存储在内存当中,它可以支持周期性的把更新的数据写入磁盘文件中。而且它还提供了交集和并集,以及一些不同方式排序的操作。

    Redis的优势和特点

    1. redis数据读写速度非常快,因为它把数据都读取到内存当中操作,而且redis是用C语言编写的,是最“接近“”操作系统的语言,所以执行速度相对较快。
    2. redis虽然数据的读取都存在内存当中,但是最终它是支持数据持久化到磁盘当中。
    3. redis提供了丰富的数据结构。
    4. redis的所有操作都是原子性,支持事务,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行。
    5. redis支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

    MongoDB

    MongoDB 是一种面向文档的数据库管理系统,用 C++等语言撰写而成,以此来解决应用程序开发社区中的大量现实问题。2007 年 10 月,MongoDB 由 10gen 团队所发展。2009 年 2 月首度推出。

    MongoDB的优势和特点

    1. MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,存储一个用户在MongoDB中是这样子的。

       {
       	username:'123',
       	password:'123'
       }
      

    使用这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mysql等SQL数据库大大增强。

    1. 易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。

    2. 数据模型因为是面向对象的,所以可以表示丰富的、有层级的数据结构,比如博客系统中能把“评论”直接怼到“文章“的文档中,而不必像myqsl一样创建三张表来描述这样的关系。

    MongoDB和Redis的区别是什么

    1. 内存管理机制

      Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。

      MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。

    2. 支持的数据结构

      Redis 支持的数据结构丰富,包括hash、set、list等。

      MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。

    3. 数据量和性能:

      当物理内存够用的时候,redis>mongodb>mysql

      当物理内存不够用的时候,redis和mongodb都会使用虚拟内存。

      实际上如果redis要开始虚拟内存,那很明显要么加内存条,要么你换个数据库了。

      但是,mongodb不一样,只要,业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmap的交换较少。

      mongodb还是能够保证性能。

    4. 性能

      mongodb依赖内存,TPS较高;Redis依赖内存,TPS非常高。性能上Redis优于MongoDB。

    5. 可靠性

      mongodb从1.8版本后,采用binlog方式(MySQL同样采用该方式)支持持久化,增加可靠性;

      Redis依赖快照进行持久化;AOF增强可靠性;增强可靠性的同时,影响访问性能。

      可靠性上MongoDB优于Redis。

    6. 数据分析

      mongodb内置数据分析功能(mapreduce);而Redis不支持。

    7. 事务支持情况

      Redis 事务支持比较弱,只能保证事务中的每个操作连续执行;mongodb不支持事务。

    8. 集群

      MongoDB 集群技术比较成熟,Redis从3.0开始支持集群。

    ElasticeSearch

    Elasticsearch 是一个基于 Lucene 库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有 HTTP Web 接口和无模式 JSON 文档。Elasticsearch 是用 Java 开发的,并在 Apache 许可证下作为开源软件发布。

    Elasticsearch 是与名为 Logstash 的数据收集和日志解析引擎以及名为 Kibana 的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。

    Elasticsearch 可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。”Elasticsearch 是分布式的,这意味着索引可以被分成分片,每个分片可以有 0 个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再平衡和路由是自动完成的。“相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。

    Elasticsearch和MongoDB简要对比

    场景和目标

    1. mongodb的目标是:“取代oracle和db2”(财务总监时上市说的)。和RDBMS是竞争关系。
    2. es的大部分场景是:“一个常见的设置是使用其它数据库作为主要的数据存储,使用 Elasticsearch 做数据检索”(2.X官方文档里说的)。和RDBMS是辅助关系。

    相同点

    1. 都是以json格式管理数据的nosql数据库。
    2. 都支持CRUD操作。
    3. 都支持聚合和全文检索。
    4. 都支持分片和复制。
    5. 都支持阉割版的join操作。
    6. 都支持处理超大规模数据。
    7. 目前都不支持事务或者叫支持阉割版的事务。

    不同点

    1. es是java编写,通过RESTFul接口操作数据。mongodb是C++编写,通过driver操作数据。(es对java开发更有好,利于排查理解)
    2. mongodb的分片有hash和range两种方式,es只有hash一种。
    3. es是天生分布式,主副分片自动分配和复制,开箱即用。mongodb的分布式是由“前置查询路由+配置服务+shard集合”,需要手动配置集群服务。
    4. 内部存储ES是到排索引+docvalues+fielddata。mongodb暂时未知。
    5. es全文检索有强大的分析器且可以灵活组合,查询时智能匹配。mongodb的全文检索字段个数有限制。
    6. es所有字段自动索引,mongodb的字段需要手动索引。
    7. es非实时有数据丢失窗口。mongodb实时理论上无数据丢失风险。

    总结

    1. es偏向于检索、查询、数据分析,适用于OLAP系统。mongodb偏向于大数据规模下的CRUD,适用于对事务要求不强的OLTP系统。
    展开全文
  • html基础知识

    2020-02-28 19:19:12
    XHTML常用标记 含义 标签 段落 p 标题 h1-h6 空格 &nbsp 加粗 b,strong 倾斜 em 换行 br 水平线 hr 删除线 del 大于号/小于号 &gt大于 &lt小于 版权 &copy(圈C) ...
  • 一、HTML - 超文本编辑语言 - 格式 ... 二、HTML标签查找手册方法及常用标签列举 所有HTML标签可以在HTMLHelp手册中查找,在此不一一列举。 查找方法: 先从标记一览中找到需要标签—-进入相关标
  • 简答题

    千次阅读 2019-01-07 22:20:38
    2、请列举HTML常用标记。(至少10个) 1、简述HTTP1.1协议的通信过程? 2、简述POST请求和GET请求有什么不同?(至少2点) 3、Tomcat安装目录下的子目录及其说明如下: 1、请列举Servlet接口中的方法,并...
  • 2、请列举HTML常用标记。(至少10个) 3、请编写出一个HTML页面,令其输出“hello world!~~”,使用css将其字体设置为宋体红色。 4、编写一个HTML页面,页面包含数字和按钮两部分,每次单击按钮可以使数字加一。...
  • 2、请列举HTML常用标记。(至少10个) 1、简述HTTP1.1协议的通信过程? 2、简述POST请求和GET请求有什么不同?(至少2点) 3、Tomcat安装目录下的子目录及其说明如下: 1、请列举Servlet接口中的方法,并分别...
  • Ⅱ.PHP基本使用

    2017-03-17 17:52:02
    PHP标记语法PHP语言不仅要PHP格式还要在文件内做PHP标记,在标记内的才能被解析执行,否则都视为无效...PHP的标记语法有很多种,在此只列举一种最常用可读性最好的。 ?>跟HTML的标签一样,有开头就要有结尾,除非你这个
  • DIV+CSS是网站标准(或称“Web标准”)中常用的术语之一,通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为XHTML网站设计标准中,不再使用表格定位技术,而是采用DIV+CSS的方式实现各种定位。...
  • CSS+DIV是网站标准(或称“WEB标准”)中常用的术语之一,通常 为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为XHTML网站设计标准中,不再使用表格定位技术,而是采用css+div的 方式实现各种定位...
  • CSS+DIV是网站标准(或称“WEB标准”)中常用的术语之一,通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为 XHTML网站设计标准中,不再使用表格定位技术,而是采用css+div的方式实现各种...
  • Div+CSS常见错误总结

    2014-06-03 21:20:00
    CSS+DIV是网站标准(或称“WEB标准”)中常用的术语之一,通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为XHTML网站设计标准中,不再使用表格定位技术,而是采用css+div的方式实现各种定位。...
  • DIV CSS常见错误汇总

    2020-12-09 15:06:55
    CSS+DIV是网站标准(或称“WEB标准”)中常用的术语之一,通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为XHTML网站设计标准中,不再使用表格定位技术,而是采用css div的方式实现各种定位。...
  • CSS+DIV是网站标准(或称“WEB标准”)中常用的术语之一,  通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别, ...1. 检查HTML元素是否有拼写错误、是否忘记结束标记  即使...
  • CSS+DIV是网站标准(或称“WEB标准”)中常用的术语之一,通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为XHTML网站设计标准中,不再使用表格定位技术,而是采用css+div的方式实现各种定位。...
  • DIV+CSS常犯错误

    2013-05-24 14:13:31
    CSS+DIV是网站标准(或称“WEB标准”)中常用的术语之一,通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为XHTML网站设计标准中,不再使用表格定位技术,而是采用css+div的方式实现各种定位。...
  • DIV+CSS常见错误汇总

    2011-06-10 22:22:12
    CSS+DIV是网站标准(或称“WEB标准”)中常用的术语之一,通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为XHTML网站设计标准中,不再使用表格定位技术,而是采用css+div的方式实现各种定位。...
  • css+div网页布局

    2013-10-10 11:31:00
    CSS+DIV是网站标准(或称“WEB标准”)中常用的术语之一,通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为XHTML网站设计标准中,不再使用表格定位技术,而是采用css div的方式实现各种定位。...

空空如也

空空如也

1 2 3 4
收藏数 71
精华内容 28
关键字:

列举html常用标记