学习总结

1.项目所遇到的问题集合

[if !supportLists]1.  [endif]设置div的背景阴影

用:box-shadow: 0 0 3px rgb(181, 181, 181);


2。图片在IE里面有边框的问题

       解决方案:设置其border为0


2.1.BOM和DOM的区别

       BOM是浏览器对象模型其核心对象是window  操作浏览器顶部 输入网址的那部分

提供了独立于内容而与浏览器窗口进行交互的对象。描述了与浏览器进行交互的方法和接口,可以对浏览器窗口进行访问和操作,譬如可以弹出新的窗口,改变状态栏中的文本,对Cookie的支持,IE还扩展了BOM,加入了ActiveXObject类,可以通过js脚本实例化ActiveX对象等等)

window.history.forward()  //前一页

window.history.back();  //后一页

window.history.go(-1);  //跳转至曾经访问过的某个页面,负值表示向后跳

window.resizeBy  //把窗口大小增加或减小指定的宽度和高度

window.screenLeft/window.screenX  //与屏幕左侧的距离

window.screenTop/window.screenY  //与屏幕顶部的距离


DOM 文档对象模型 操作页面的内容 浏览器把获取到的HTML代码解析成1个DOM树


2.2重绘与回流:

当render

tree中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘。

注意:回流必将引起重绘,而重绘不一定会引起回流。

页面布局和几何属性改变时就需要回流。下述情况会发生浏览器回流

减少对render

tree的操作(合并多次多DOM和样式的修改),并减少对一些style信息的请求,尽量利用好浏览器的优化策略


解决方法:


1. 将多次改变样式属性的操作合并成一次操作。


2.将需要多次重排的元素,position属性设为absolute或fixed,用定位让它脱离了文档流,它的变化不会影响到其他元素。例如有动画效果的元素就最好设置为绝对定位。




3.定位详解:

1 固定定位fixed

2相对定位relative

3绝对定位absolute

4静态定位static

 请注意以下几点:

[if !supportLists]1.     [endif]默认情况下,固定定位元素和绝对定位元素的位置是相对于浏览器而言,而相对定位的位置是相对原始位置而言

[if !supportLists]2.     [endif]Position:absolute会将元素转换为块元素

3.1 行内元素垂直居中可以用

       display: table-cell;

    vertical-align: middle;

6.解决 的问题

1.首先在外面设置一个div 然后设置边框。再在里面设置input:text  设其变为none

7.设置input:text获得焦点有蓝色框的问题

outline:none;

8.JQ: 获取当前div下面的字元素

$("li").each(function(){

   $(this).mouseover(function(){

     $(this).find(".test").animate("height","173px","slow");

});


用find 方法找li 下面的 .test子元素


**10 设置背景阴影效果

opacity: 0.6

2.Node JS 整合分析

1.首先就是架构要搭好:

  1.导入“包node_modules”

2.建”public”文件夹,用于存放静态页面的内容

     3.建”routes” 路由文件夹,里面写database, user 之类的路由

4.然后写app.js

       导入包,写配置

然后这里写服务器验证

5.谈后就写路由了----routes

       ①导入database

导出去

6.登录

然后在html页面写ajax


7获取session

8注销 缓存


9.整个流程:

就是 从客户端取到数据,在request通过请求获取,然后在数据库查询匹配, 数据库执行成功,把” row”通过resp.json({msg:"成功"});  传到客户端,客户端通过param参数获取


4.面试题分析

4。Doctype的作用:用来设置浏览器的解析模式

如果不声明:会按照混杂模式来解析

              解析模式有3种:准标准模式(IE6,7),标准模式(IE8),混杂模式


5。Css 优先级怎么计算:权重值 (外链和内联是一样的)

Css权重值分为4个等级的定义如下:

[if !supportLists]1.   [endif]第一等:代表内联样式,如: style=””,权值为1000。

[if !supportLists]2.   [endif]第二等:代表ID选择器,如:#content,权值为100。

[if !supportLists]3.   [endif]第三等:代表类,伪类和属性选择器,如.content,权值为10。

[if !supportLists]4.   [endif]第四等:代表类型选择器和伪元素选择器,如div p,权值为1。


10渐进增强和优雅降级

渐进增强 :针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

优雅降级 :一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。



11事件冒泡:

       从下网上叫冒泡                                                                                   

       从上网下叫捕获.

       W3C支持-DOM事件流:先捕获再冒泡

       用ele.addEventListener(‘click’,dosomething,true)→true为捕获,false为冒泡

IE只支持冒泡;ele.attachEvent("onclick", doSomething2)依次往上冒直到document为止

阻止事件冒泡:

IE:

window.event.cancelBubble = true;//

停止冒泡

window.event.returnValue = false;//

阻止事件的默认行为

Firefox:

event.preventDefault();//

取消事件的默认行为

event.stopPropagation(); //

阻止事件的传播

<!--阻止事件冒泡-->

    <div @click="showA()">A

        <div  @click="showB()">B

            <div  @click="showC($event)">C</div>

            <div  @click.stop="showC($event)">C</div>

        </div>

    </div>

    <!--取消事件的默认行为-->

    <a href="http://www.baidu.com" @click="open($event)">click</a>

    <a href="http://www.ba.com"@click.prevent="open($event)">clck</a>

    <!--只执行一次-->

    <button @click.once="once()">once</button>



       怎么阻止冒泡:IE中叫

                     谷歌中:stopPropagation



加分题: .1优化

模块化:c-jsrequire-js(IMDCMD)

Inline-block: 行内块级: 记是行内元素又是块级元素

第二套题

[if !supportLists]1.     [endif] 页面Js加载; 会先加载所有的函数,然后重上往下进行加载

[if !supportLists]1.5  [endif]Js的全局对象有哪些:

EvalisNan() parseFloat() ParseInt() String()

[if !supportLists]2.     [endif]link  和@import的区别

<link>它是标签,还可以定义Rss等其他事物,@import就不能,只加载css

<link>在页面载入时同时加载,无兼容性问题.

@import低版本IE不支持,并且是页面网页加载完成后再加载.

[if !supportLists]3.     [endif]IE6下解决双倍marggin   设置display:liline;

[if !supportLists]4.     [endif]hasLayout  :字面意思→拥有自己的布局, 使用布局概念来控制元素的尺寸和定位

[if !supportLists]5.     [endif]8.清楚浮动: clear:both  或者BFC

用meta标签里面的 http:re**属性可以实现 不用js完成页面定时刷新


13

.什么是做好SEO?

       搜索引擎优化,就是利用搜索引擎的规则,让网络爬虫更好的搜索到网站,提升排名

设置关键词,和网站导航优化设计,网站内连接的设计


[if !supportLists]1.      [endif]举出5个兼容性问题

[if !supportLists]1.     [endif]各个浏览器之前,不加样式控制的话,其margin和padding的差异是比较大的:设置margin:0  padding:0

[if !supportLists]2.     [endif]低版本IE中,有双倍margin的问题

[if !supportLists]3.     [endif]IE 6.7 中对图片有不兼容的问题,导入插件

[if !supportLists]4.     [endif]在块级元素中,如果里面的内容超出这个块级元素,就会出现兼容性问题

[if !supportLists]5.     [endif]子元素绑架父元素: 这只子元素的margin-top  父元素会因为margin-top一起移动

[if !supportLists]6.     [endif]图片默认有间距

一般解决兼容性问题 用hack技术


[if !supportLists]2.      [endif]CSS3的新特性

[if !supportLists]1.      [endif]Text-decoration文本渲染效果

[if !supportLists]2.      [endif]颜色透明度rgba

[if !supportLists]3.       [endif]圆角:border-radius: 15px

[if !supportLists]4.     [endif]设置颜色渐变

[if !supportLists]5.     [endif]设置颜色文本的阴影

[if !supportLists]6.     [endif]还有反射投影

[if !supportLists]3.      [endif]html中清楚浮动有哪些方法

[if !supportLists]1.  [endif]clear: both

[if !supportLists]2.  [endif]设置 BFC环境overflow:hidden

[if !supportLists]3.  [endif]使用空标签

5,英文的换行问题

一般情况下,一个单词不会分开成两行,如果要设置换行:就要设置word-break 属性来控制换行;  或者</br> 来强制换行

CSS中link 和@import的区别是?

(1) link属于HTML标签,而@import是CSS提供的;

(2) 页面被加载的时,link会同时被加载,而@import被引用的CSS会等到引用它的CSS文件被加载完再加载;

(3) import只在IE5以上才能识别,而link是HTML标签,无兼容问题;

(4) link方式的样式的权重 高于@import的权重.


6.数据库设计

/*1.创建数据库*/

CREATE DATABASE sofoDB CHARACTER SET utf8

USE sofoDB;


/*2.热门商品表*/

CREATE TABLE t_hot(

    h_id INT PRIMARY KEY AUTO_INCREMENT,/*热门商品id*/

    h_p_id INT

)

/*3.促销商品表*/

CREATE TABLE t_sell(

    s_id INT PRIMARY KEYAUTO_INCREMENT,/*热门商品id*/

    s_p_id INT /*关联商品表的外键*/

)

/*4.评论表*/

CREATE TABLE m_message(

    m_id INT PRIMARY KEY AUTO_INCREMENT,/*评论id*/

    m_content VARCHAR(200),      /*评论内容*/

    m_data DATETIME,

    m_u_id INT,             /*关联用户表的外键*/

    m_p_id INT


);


/*5.购物车*/

CREATE TABLE t_shopcar(

    s_id INT PRIMARY KEYAUTO_INCREMENT, /*购物车id*/

    s_p_id INT ,         /*关联商品*/

    s_u_id INT,      /*关联用户表的外键*/

    s_count


);


/*6.创建用户表:t_user*/

CREATE TABLE t_user(

    u_id INT PRIMARY KEYAUTO_INCREMENT,

    u_name VARCHAR(10) NOT NULL,

    u_pwd VARCHAR(50) NOT NULL,

    u_phone CHAR(11) UNIQUE,

    u_email VARCHAR(50),

    s_id INT NOT NULL,  /*关联购物车*/

    m_id INT NOT NULL  /*关联评论表*/

    /*CONSTRAINT FOREIGN KEY (s_id)REFERENCES t_sell(s_id),

    CONSTRAINT FOREIGN KEY (m_id)REFERENCES t_message(m_id)*/

);


/*7.创建:商品类别表*/

CREATE TABLE t_type(

    t_id INT PRIMARY KEYAUTO_INCREMENT,/*商品类别*/

    t_name VARCHAR(50)

);

/*8.创建:商品表*/

CREATE TABLE t_product(

    p_id INT PRIMARY KEYAUTO_INCREMENT,/*商品id*/

    p_name VARCHAR(50), /*商品名称*/

    p_price DOUBLE,

    p_img_index VARCHAR(200), /*商品图片地址*/

    p_img_detail VARCHAR(200),   /*商品详情中的图片地址*/

    p_t_id INT          /*关联商品类别的外键*/

);


/* ***********添加数据********** */

/*1.添加商品类别*/

INSERT INTO t_type (t_id,t_name)

VALUES

(1,"fashion"),

(2,"choula"),

(3,"zhedie");


/*2.添加商品表*/

INSERT INTO t_product(p_id,p_name,p_price,p_img_index,p_t_id)

VALUES

(1,"可拆洗组合三人布艺小户型沙发",4579,"../img/index/sofo1.png",1),

(2,"简约日式休闲小户型",3879,"../img/index/sofo2.png",1),

(3,"日式棉麻布艺沙发组合",7899,"../img/index/sofo3.png",1),

(4,"现代北欧双人三人日式沙发",7089,"../img/index/sofo4.png",1),

(5,"创意高档小户型布艺沙发",5979,"../img/index/sofo5.png",1),

(6,"北欧简约现代高档皮布沙发",6879,"../img/index/sofo6.png",1),

(7,"非卖品",0,"../img/index/sofo16.png",1),

(8,"L型转角沙发储物抽拉沙发",6079,"../img/index/ind_03.png",2),

(9,"多功能储物茶法床抽拉沙发床",4089,"../img/index/ind_05.png",2),

(10,"推拉坐卧两用抽拉沙发",7089,"../img/index/ind_07.png",2),

(11,"新概念抽拉式皮质沙发",4879,"../img/index/ind_08.png",2),

(12,"组合地中海抽拉折叠功能沙发",5219,"../img/index/ind_13.png",2),

(13,"双人抽拉折叠可拆洗布艺沙发",3099,"../img/index/ind_14.png",2),

(14,"美式抽拉田园简约实用沙发",6009,"../img/index/ind_15.png",2),

(15,"多功能可折叠拆洗储物抽拉沙发",5879,"../img/index/ind_17.png",2),

(16,"功能布艺沙发床折叠沙发床",5579,"../img/index/ind_26.png",3),

(17,"易折叠双人小户型沙发床",4569,"../img/index/ind_27.png",3),

(18,"小户型布艺折叠沙发双人休闲",2889,"../img/index/ind_29.png",3),

(18,"书房可折叠拆洗布艺沙发床",5230,"../img/index/ind_30.png",3),

(20,"时尚办公室午休沙发床",4089,"../img/index/ind_35.png",3),

(21,"现代简约布艺沙发床可折叠沙发",5979,"../img/index/ind_36.png",3),

(22,"懒人简易折叠沙发床",3608,"../img/index/ind_37.png",3),

(23,"现代简约布艺沙发床可折叠沙发",5979,"../img/index/ind_38.png",3);


INSERT INTO t_product(p_name,p_price,p_img_index,p_t_id)

VALUES

("可拆洗组合三人布艺小户型沙发",4579,"../img/index/sofo1.png",1),

("简约日式休闲小户型",3879,"../img/index/sofo2.png",1),

("日式棉麻布艺沙发组合",7899,"../img/index/sofo3.png",1),

("现代北欧双人三人日式沙发",7089,"../img/index/sofo4.png",1),

("创意高档小户型布艺沙发",5979,"../img/index/sofo5.png",1),

("北欧简约现代高档皮布沙发",6879,"../img/index/sofo6.png",1),

("非卖品",0,"../img/index/sofo16.png",1),

("L型转角沙发储物抽拉沙发",6079,"../img/index/ind_03.png",2),

("多功能储物茶法床抽拉沙发床",4089,"../img/index/ind_05.png",2),

("推拉坐卧两用抽拉沙发",7089,"../img/index/ind_07.png",2),

("新概念抽拉式皮质沙发",4879,"../img/index/ind_08.png",2),

("组合地中海抽拉折叠功能沙发",5219,"../img/index/ind_13.png",2),

("双人抽拉折叠可拆洗布艺沙发",3099,"../img/index/ind_14.png",2),

("美式抽拉田园简约实用沙发",6009,"../img/index/ind_15.png",2),

("多功能可折叠拆洗储物抽拉沙发",5879,"../img/index/ind_17.png",2),

("功能布艺沙发床折叠沙发床",5579,"../img/index/ind_26.png",3),

("易折叠双人小户型沙发床",4569,"../img/index/ind_27.png",3),

("小户型布艺折叠沙发双人休闲",2889,"../img/index/ind_29.png",3),

("书房可折叠拆洗布艺沙发床",5230,"../img/index/ind_30.png",3),

("时尚办公室午休沙发床",4089,"../img/index/ind_35.png",3),

("现代简约布艺沙发床可折叠沙发",5979,"../img/index/ind_36.png",3),

("懒人简易折叠沙发床",3608,"../img/index/ind_37.png",3),

("现代简约布艺沙发床可折叠沙发",5979,"../img/index/ind_38.png",3);






SELECT * FROM t_product

1.工作中遇到的问题:

[if !supportLists]1.  [endif]设置背景图片 自响应


[if !supportLists]2.     [endif]字体随分辨率一起变化

1px=1rem/16  *对应的字体大小


7 移动端要加入的一系列meta


<!--禁止浏览器缩放-->

<!--清除浏览器缓存-->

<!--iPhone 手机上设置手机号码不被显示为拨号链接)-->

<!--IOS私有属性,可以添加到主屏幕-->

<!--屏幕顶部条的颜色-->

GreenLotusHotel

<!-- 重置样式-->

<!-- 主样式-->


<!-- 手机触摸-->


11特别要注意今天的这个  在js里面引号转义的问题

    ""+





[if !supportLists]1.  [endif]用来标记文本 跟img的alt是一样的

WHO

[if !supportLists]2.  [endif]写地址  语义化

<address>芦山大佬坝

3一段文章用article

<article>一段文章

[if !supportLists]3.  [endif]aside 侧边栏  定义article以外的类容


[if !supportLists]4.  [endif]定义文章粗体b

<b>粗体

[if !supportLists]5.  [endif]指定文本方向  :如下出来是olleh

        <bdodir="rtl">hellobdo>

6.<big >比常规字体大一号

<big>hellobig>

7 .center使文本进行水平居中

        <center>我居中了</center>

8.设置字体

<em>Emphasized

text</em><br>斜体

<strong>Strong text</strong><br>加粗

Definitionterm

A piece of computercode

Sample output from a computerprogram

<kbd>Keyboardinput

Variable


9.embed定义一个容器,嵌入外部应用或者互动程序

<embed src="helloworld.swf"tppabs="http://w3schools.com/tags/helloworld.swf">


11.带有删除和插入(下划线)的文本

<p>My favorite color is <del>bluedel><ins>redins>!p>


12 .包含框

              效果图:用legend标签

13meter标签 用来图形显示

14.新奇标签

Oninput=function() ----事件




16.<q> 这是加引号

Here comes a short quotation:This is a short quotation

17.<small>使字体变小

18.在字体中划一条线

not yet available!


19 下标和上标文本

20表单类型:

[if !supportLists]1.     [endif]Email ,url,

[if !supportLists]2.     [endif]Number  在text框的基础上可以规定上下限制,间隔

[if !supportLists]3.     [endif]日期选择器:date,datetime,


4里面的属性:<input type="number" name="points" min="0"max="10"step="3" />multiple="multiple"是多选

pattern="[A-z]{3}"可以直接写正则表达式

required="required"验证在提交之前不能为空



[if !supportLists]1. [endif]关于HTML5的属性:

1.设置contenteditable属性可以 编辑文本

<p contenteditable="true" spellcheck="true">这个可以编辑



3.当文本溢出时设置它为省略号…

       text-overflow: ellipsis;

white-space:nowrap;

       overflow:hidden;         

[if !supportLists]2.  [endif]设置文章自动空两格

text-indent:2em;


[if !supportLists]3. [endif]安卓和前端的桥接技术:

Demo: 实际就是通过加载本地html文件(里面有js脚本),实现android本地方法和js中的交互


[if !supportLists]1.     [endif]在安卓端 mainfest.xml中加入网络权限

[if !supportLists]2.     [endif]然后加载本地的html文件, 放在assets目录下

[if !supportLists]a)      [endif]定义好给安卓调用的funFromjs()方法

[if !supportLists]b)      [endif]和安卓提供给js调用的对象接口fun1FromAndroid(String name)

[if !supportLists]3.   [endif]<body>  

[if !supportLists]4.   [endif]    <a>js中调用本地方法</a>  

[if !supportLists]5.   [endif]    <script>  

[if !supportLists]6.   [endif]      

[if !supportLists]7.   [endif]    function funFromjs(){  

[if !supportLists]8.   [endif]        document.getElementById("helloweb").innerHTML="HelloWebView,i'm from js";  

[if !supportLists]9.   [endif]    }  

[if !supportLists]10.  [endif]    var aTag = document.getElementsByTagName('a')[0];  

[if !supportLists]11.  [endif]    aTag.addEventListener('click', function(){  

[if !supportLists]12.  [endif]        //调用android本地方法  

[if !supportLists]13.  [endif]        myObj.fun1FromAndroid("调用android本地方法fun1FromAndroid(String name)!!");  当点击的时候就调用安卓的fun1FromAndroid

[if !supportLists]14.  [endif]        return false;  

[if !supportLists]15.  [endif]    }, false);  

[if !supportLists]16.  [endif]    </script>  

[if !supportLists]17.  [endif]    <p></p>  

[if !supportLists]18.  [endif]    <div id="helloweb">   

[if !supportLists]19.  [endif] 

[if !supportLists]20.  [endif]    </div>  

[if !supportLists]21.  [endif]</body>  

[if !supportLists]4. [endif]iso和前端的桥接

<h1>UIWebView与iOS直接交互

<!--脚本开始的地方-->

//   

functionconnectWebViewJavascriptBridge(callback){

if(window.WebViewJavascriptBridge) {

callback(WebViewJavascriptBridge)

        } else {

document.addEventListener('WebViewJavascriptBridgeReady',function() {

callback(WebViewJavascriptBridge)

            }, false)

        }

    }

<!--激活方法-->

connectWebViewJavascriptBridge(function(bridge){

<!--创建一个按钮-->

var button =document.getElementById('buttons').appendChild(document.createElement('button'))

button.innerHTML = '给iOS发送信息'

//       

button.onclick =function(e) {

e.preventDefault()

<!--此处是你传参数的地方-->

var data = 'YouXianMing -Just so easy :)'


<!--使用bridge中的send发送数据-->

bridge.send(data,function(responseData) {

            })

        }

document.body.appendChild(document.createElement('br'))

    })


<!--脚本结束的地方-->

</body>


[if !supportLists]5.     [endif]判断机型是ios 还是安卓的

var browser={

versions:function(){

var u =navigator.userAgent, app = navigator.appVersion;

return {

                trident: u.indexOf('Trident')> -1, //IE内核

                presto: u.indexOf('Presto')> -1, //opera内核

webKit:

u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核

                gecko: u.indexOf('Gecko') > -1&&u.indexOf('KHTML') == -1, //火狐内核

mobile:

!!u.match(/AppleWebKit.*Mobile.*/)||!!u.match(/AppleWebKit/), //是否为移动终端

ios:

!!u.match(/(i[^;]+\;(U;)? CPU.+Mac OS X)/), //ios终端

                android: u.indexOf('Android')> -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器

                iPhone: u.indexOf('iPhone')> -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器

iPad: u.indexOf('iPad')

> -1, //是否iPad

webApp: u.indexOf('Safari')

== -1 //是否web应该程序,没有头部与底部

            };

        }(),

language:(navigator.browserLanguage|| navigator.language).toLowerCase()

    }

document.writeln("<BR/>语言版本:"+browser.language);

document.writeln("

<BR/>是否为移动终端: " + browser.versions.mobile);

document.writeln("

<BR/>ios终端: " + browser.versions.ios);

document.writeln("

<BR/>android终端: " + browser.versions.android);

document.writeln("

<BR/>是否为iPhone: " + browser.versions.iPhone);

document.writeln("

<BR/>是否iPad: " + browser.versions.iPad);

document.writeln(navigator.userAgent);

</script>

/////快点互动PC端

[if !supportLists]1.      [endif]文字与图片垂直居中对齐方法

[if !supportLists]a)       [endif]<p>我要坚强

[if !supportLists]b)       [endif]只需要定义P*{vertical-align:middle}就可使图片同行垂直居中

[if !supportLists]2.  [endif]Checkbox 的设置属性

//disabled='disabled'  这是禁用checkbox;checked='checked'  这是默认选择

[if !supportLists]3.  [endif]字符串中间加一杠

text-decoration:line-through;


[if !supportLists]4.  [endif]移动端字体设置

14px/1.6 'PingFang SC', '\5FAE\8F6F\96C5\9ED1','STHeitiSC-Light', 'Helvetica', 'Arial', sans-serif




腾讯课堂:

//

//                       _oo0oo_

//                      o8888888o

//                      88" . "88

//                      (| -_- |)

//                      0\  =  /0

//                    ___/`---'\___

//                  .' \\|     |// '.

//                 / \\|||  : |||// \

//                / _||||| -:- |||||- \

//               |   | \\\ -  /// |   |

//               | \_|  ''\---/'' |_/ |

//               \  .-\__ '-'  ___/-. /

//             ___'. .'  /--.--\ `. .'___

//          ."" '<  `.___\_<|>_/___.' >' "".

//         | | : `- \`.;`\ _ /`;.`/ - ` : | |

//         \ \ `_.   \_ __\ /__ _/   .-` / /

//     =====`-.____`.___ \_____/___.-`___.-'=====

//                       `=---='

//

//

//    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//

//               佛祖保佑         永无BUG

//

//

//

[if !supportLists]1.  [endif]设计模式

什么是模式:可靠/已验证/满足个人需求;/能实现大型解决方案

工厂模式:

[if !supportLists]a)   [endif]重复产生N个实例

[if !supportLists]2.  [endif]单例模式:

单例模式只有1个实例


[if !supportLists]3.  [endif]观察者模式(订阅模式)


[if !supportLists]4.  [endif]适配器模式:









[if !supportLists]2. [endif]VUE 走向高大上

Vue: 尤雨溪

Jquery 为驱动DOM

MVC;model(模型)   view(视图)  controller(控制器)

MVVM:

M: model 模型 当前视图中的可用的数据

V: view 视图  渲染的UI HTML

VM: 是model和view的联合体  


使用:

       表达式{{ }}  //输出数据

       指令  //扩展HTML标签







2018年3月面试总结

[if !supportLists]A.  [endif]es6新特性

[if !supportLists]a)      [endif]什么是模块化开发: 模块化就将文件按照功能分离,根据需求引入不同的文件

1. let 和const

       Let:必须先定义再使用,相对var 跟严谨. Let是块级作用域,不存在变量提升   

              Var:它是函数体作用域

       两者区别:js是浏览器变解析边执行,解析器会优化代码,var是函数体作用域,引擎扫描函数体会对var进行优化,进行变量提升.


2解构赋值

[if !supportLists]3.  [endif]es6的扩展

[if !supportLists]a)      [endif]

[if !supportLists]b)      [endif]Rest参数:

[if !supportLists]                    i.           [endif]

C     箭头函数

D数组合并

.



[if !supportLists]4.  [endif]Set和Map用于存储数据]

[if !supportLists]1.     [endif]Set 类似于数组,成员唯一(里面不能有重复的值)  我们可以用来去重

[if !supportLists]2.  [endif] Map 类似于对象 键值对的集合


[if !supportLists]3.     [endif]

[if !supportLists]4.     [endif]

[if !supportLists]5.     [endif]Promise 它比ajax更好地实现异步加载

[if !supportLists]a)      [endif]它是一个对象,也是一个构造函数



B面向对象 原型闭包作用域

[if !supportLists]1.     [endif]字面量

[if !supportLists]2.     [endif]枚举遍历

[if !supportLists]3.     [endif]原型

[if !supportLists]4.     [endif]构造函数

[if !supportLists]5.     [endif]闭包

[if !supportLists]6.     [endif]递归

[if !supportLists]7.     [endif]作用域this






D:搭项目:

Webpack是一个前端资源模块化加载器和打包工具,它能把各种资源作为模块来使用和处理,实际上,它是通过不同的loader将这些资源加载后打包的,然后输出打包文件.

简单的说,它是一个模块加载器,所有资源都可以作为模块来加载,最后打包输出

       它有一个核心配置文件,webpack.config.js 必须放在项目根目录下:



第1步:  需要安装相关模板 (工程依赖文件)

[if !supportLists]1.     [endif]Npm init 生成pakage.json文件

第2步: 安装相关模板

cnpm install vue --save //装vue

$ cnpm install webpack-dev-server -–dev  //装webpack-dev-server

cnpm i -D css-loaderfile-loader style-loader


cnpm i -D babel-loaderbabel-core babel-preset-env

babel-preset-env会根据配置的运行环境自动启用需要的babel插件


第3步: 配置webpack  导入webpack.config.js

第4步;编写main.js  //main.js是入口文件 webpack编译会通过根目录文件打包到build.js

5) User.vue

6) 编写babelrc

7)index.html 引用build.js

此时webpack 将JS/vue打包到build.js

先执行Npm install 或者cnpminstall

8) 运行测试  npm run dev






[if !supportLists]2.  [endif]脚手架cli

[if !supportLists]a)      [endif]    Vue-cli脚手架 创建项目

[if !supportLists]                    i.           [endif]Vue-cli 是快速构建这个单页应用的脚手架 包含多种模板

[if !supportLists]3.     [endif]VUE-cli脚手架 创建项目

[if !supportLists]4.    [endif]Vue-cli是快速构建这个单页应用的脚手架

[if !supportLists]5.     [endif]Vue-cli本身集成了多种项目模板:

[if !supportLists]6.     [endif]  Webpack 基于webpack,用的较多,包含eslint,

unit等

[if !supportLists]7.     [endif]  Webpack-simple  基于webpack, 更简洁,无eslint, unit

[if !supportLists]8.     [endif] 

[if !supportLists]9.     [endif]示例,步骤:

[if !supportLists]10.  [endif]1 安装vue-cli,配置vue命令环境

[if !supportLists]11.  [endif]cnpm installvue-cli -g

[if !supportLists]12.  [endif]查看脚手架vue –version, vue list

[if !supportLists]13.  [endif] 

[if !supportLists]14.  [endif]2 初始化项目,生成项目模板

[if !supportLists]15.  [endif]vue initwebpack-simple vue-cli-demoXiao   // demoxiao就是文件名

[if !supportLists]16.  [endif]cd vue-cli-demo

[if !supportLists]17.  [endif]cnpm install

[if !supportLists]18.  [endif]npm run dev  //运行

[if !supportLists]19.  [endif]npm run build  //打包输出,上线





E:性能优化

[if !supportLists]1.          [endif]seo 添加data里面的关键词,设置title

[if !supportLists]2.          [endif]减少http请求,合并js,css 和图片

[if !supportLists]3.          [endif]缓存ajax请求的结果,

[if !supportLists]4.          [endif]用innerHTML代替DOM操作,减少DOM操作次数

[if !supportLists]5.          [endif]用setTimeout来避免页面失去响应

[if !supportLists]6.          [endif]用hash-table来优化查找

[if !supportLists]7.          [endif]少用全局变量

[if !supportLists]8.          [endif]缓存DOM节点查找的节点

[if !supportLists]9.          [endif]避免在页面主题布局中使用table, 它的显示比div布局慢


F 兼容性问题:

       Js的兼容性问题 主要就是event事件 , 网页可视区域的兼容,滚动条的兼容

[if !supportLists]1.     [endif]event事件问题

[if !supportLists]a)      [endif]document.onclick=function(ev){

var e=ev||window.event;

var mouseX=e.clientX

}




2/* CSS属性级Hack */

color:red; /* 所有浏览器可识别*/

_color:red; /* 仅IE6 识别 */

*color:red; /*

IE6、IE7 识别 */

+color:red; /*

IE6、IE7 识别 */

*+color:red; /*

IE6、IE7 识别 */

[color:red; /*

IE6、IE7 识别 */

color:red\9; /*

IE6、IE7、IE8、IE9 识别 */

color:red\0; /*

IE8、IE9 识别*/

color:red\9\0;

/* 仅IE9识别 */

color:red \0; /*仅IE9识别 */

color:red!important;

/* IE6 不识别!important 有危险*/

/* CSS选择符级Hack */

*html #demo {

color:red;} /* 仅IE6识别 */

*+html #demo {

color:red;} /* 仅IE7识别 */

body:nth-of-type(1)

#demo { color:red;} /* IE9+、FF3.5+、Chrome、Safari、Opera 可以识别 */

head:first-child+body

#demo { color:red; } /* IE7+、FF、Chrome、Safari、Opera 可以识别 */

:root #demo {

color:red\9; } : /* 仅IE9识别 */

/* IE条件注释Hack */

<!--[if IE

6]>此处内容只有IE6.0可见<![endif]-->

<!--[if IE

7]>此处内容只有IE7.0可见<![endif]-->


不用hack处理: 固定宽度要浮动,不加边框和补丁,里面套个DIV,定义样式起作用!



G异步和同步

       同步: 因为js是单线程的,就是等上一个线程结束,才能执行下个线程.

                     比如: 我向您投递简历.要等您通知我,我才能过来面试

       异步: 发起一个进程,系统会读取”任务队列”,这这时候系统可以处理其它线程

       等处理之后会返回一个结果

              比如: 我向您投递了简历.您这边在处理其它的事情,处理完之后,看到我发送的简历,然后反馈我,再通知我来面试








递归:  自己调自己阶乘




项目搭建: 6月18日

[if !supportLists]1.     [endif]包管理器 (用什么都可以) --- 用来装依赖插件的如jquery bootstrap

[if !supportLists]a)      [endif]npm   

[if !supportLists]b)      [endif]bower –都是针对前端的包管理器



这里说bower:

[if !supportLists]1.     [endif]首先要初始化,生成bower.json文件 用来搭建工程

[if !supportLists]a)      [endif]bowerinit 

[if !supportLists]                                           i.           [endif](坑: 这里初始化要用管理员模式) –生成1 bower.json文件–装了哪些依赖可以在bower.json里面看

[if !supportLists]b)      [endif]type null >.bowerrc 

[if !supportLists]                                           i.           [endif] --生成.bowerrc文件

然后在这个.bowerrc文件里面写入   ,这个lib用来定义下载的目录

{

"directory":

"lib"

}


             C  bower install bootstrap#3.3.7 –-save-dev

用bower装这个bootstrap , 后面跟了 - - save-dev是写入 bower.json的目录里面,  #3.3.7是选择版本


            D  bower install jquery –save-dev

                   装一个jquery

               -------------------bower结束---------------------





6月19学习


[if !supportLists]1.     [endif]bower它是包管理器,管理依赖插件,用来快速下载js的插件和版本

[if !supportLists]2.     [endif]gulp它是自动化构建,管理css合并图片进行压缩

[if !supportLists]3.     [endif]reguirejs 按需加载




开始装gulp:

[if !supportLists]1.     [endif]npm installgulp -g

[if !supportLists]2.     [endif]npm installgulp    //装两次一次全局 一次本地

[if !supportLists]3.     [endif]然后 看到这两个版本号

[if !supportLists]4.     [endif]npm init  生成一个package.json  gulp.js的依赖文件 (跟bower.json效果相同)

[if !supportLists]a)      [endif]然后装gulp里面的依赖文件的目录 ,node_modules装的是依赖插件


[if !supportLists]5.     [endif]然后手动配置(负责gulpfile.js过来) 再命令行输入gulp 看需要装什么

输入 gulp

[if !supportLists]a)      [endif]一直 npm install gulp-webserver

–save-dev (如果没有—save package.json里面就没有对应的目录)

[if !supportLists]b)      [endif]然后输入gulp就可以启动了

[if !supportLists]6.     [endif]rm -rfnode_modules  删除node_modules (写哪个就删除哪个)


7.装入require.js:   bower installrequirejs --save-dev


       生成对应的css 需要先gulp sass



到了这里 作业: 在这里使用 bootstrap ,使用一下require js

6月20号



6月21

    Cordova插件创建app及打包成apk


Apk androidPackage  安卓安装包


[if !supportLists]1.     [endif]安装java的开发安装包(jdk)  www.oracle.com(dizhi)

[if !supportLists]2.     [endif]安装android开发安装包(Android SDK)  http://tools.android-studio.org/

[if !supportLists]3.     [endif]下载后安装 添加环境变量

[if !supportLists]4.     [endif]Sdk平台

[if !supportLists]5.     [endif]安装cordova

[if !supportLists]6.     [endif]创建工程

[if !supportLists]7.     [endif]添加android平台

[if !supportLists]8.     [endif]打包-






2019学习

A  Vue学习

              路由: 就是把数据从一个地方传送到另一个地方的行为和动作







Moke数据

开moke数据的产生就是让前端脱离后台,自己模拟数据完成代码的调测。


在vue项目中,与static目录同级创建moke目录,moke目录中存放moke数据文件,文件已json格式为主,因为多数接口返回的也是json的格式数据。


下载


npm install mockjs --save-dev

1

使用


1、新建mock.js

import Mock from 'mockjs'

Mock.mock("/getTest",{

   "name1|1-3":  'a',

   "name2|2": 'b',

});

2、新建vue文件



       mock一下


   export default {


       methods: {

           getTest() {

                this.$axios.get("/getTest").then(function(res) {

                    console.log(res.data);

                });

           }

       }

   };


3、main.js

import Mock from"./javascript/mock"




2019开始

面试:

[if !supportLists]1.     [endif]webpack配置

[if !supportLists]2.     [endif]vue兄弟间传参

[if !supportLists]3.     [endif]promise


1服务器端渲染:

页面都是在后端将html 拼接好的,然后返回给前端完整的html 文件,浏览器拿到这个html 文件之后就可以直接解析展示了,这也就是所谓的服务器端渲染


客户端渲染:

前后端分离就是客户端渲染:后端不提供完整的 html 页面,而是提供一些 api 使得前端可以获取 json 数据,然后前端拿到 json 数据之后再在前端进行 html 页面的拼接,然后展示在浏览器上,这就是所谓的客户端渲染

2谈谈vue框架

Model view viewModel 它是一种设计思想 model和viewModel的交互是双向的,不需要手动的控制DOM.只需关注业务逻辑,vue是以数据为驱动





3.2019.3.2面试准备

1.undefined 和 null 和NaN区别


[if !supportLists]2.   [endif]get 和post的区别

[if !supportLists]a)      [endif]GET一般用于获取/查询资源信息,POST一般用于更新资源信息。

[if !supportLists]b)      [endif]Get是将请求参数跟在url后进行传递, (就是把数据放置在HTTP协议头中) 有大小限制

而POST请求则是作为HTTP消息的实体内容发送给Web服务器的,这种传递是对用户不可见的。

[if !supportLists]c)       [endif] 

       post便于隐长数据,但是效率低

       get效率高,但是不安全



[if !supportLists]3.  [endif]cookie和session的区别

session和cookie的作用是解决客户端与服务器端会话同步的问题


http请求是无状态的,即每次服务端接收请求,都是一个全新的请求,每次请求服务器端不能识别两次会话都是来自同一个浏览器,即服务端不知道客户端的历史请求记录


把服务器中产生的会话sessionID存储到客户端浏览器cookie中去。在客户端存在周期为浏览器关闭时,消失。这样便解决了客户端请求服务端会话同步的问题。

Cookie是保存在客户端的,生命周期是浏览器的一次回会话,并且不安全单个cookie保存的数据不能超过4K

Session是保存在服务器端的

、所以个人理解:将登陆信息等重要信息存放为SESSION

其他信息如果需要保留,可以放在COOKIE中

Localstroge的生命周期是永久的,不手动清除就会一直存在,sessionstroge的当前窗口或标签页



4. http协议 和https

HTTPS和HTTP的区别主要为以下四点:

1、安全协议配置费用,https协议需要到ca申请证书,一般免费证书很少,需要交费;

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议;

3、http和https使用的是完全不同的连接方式,用的端口不一样,前者是80,后者是443;

4、http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。


简单来说,http协议+安全套=https协议


6http协议流程

http是超文本传输协议,首先进行DNS域名解析发起tcp的三次握手 服务器响应http请求 浏览器解析html代码并请求代码里面的资源 如js css 图片等 然后断开tcp协议 对页面进行渲染呈现给用户


5盒子模型

1.W3C盒子模型(标准盒模型) +doctype 

盒子= content+padding+border+margin


                     Width是指内容区域的宽度和高度

[if !supportLists]2.     [endif]IE盒子模型:

Width=content+padding+border

6清除浮动

1.触发BFC效果

二、 形成 BFC 的条件

1、浮动元素,float 除 none 以外的值;

2、绝对定位元素,position(absolute,fixed);

3、display 为以下其中之一的值inline-blocks,table-cells,table-captions;

4、overflow 除了visible 以外的值(hidden,auto,scroll)

2.clear:both

3.设置伪类

/* 方法四:使用双伪元素清除浮动 */

            .clearfix:before,.clearfix:after{

                          content: "";

                          display: block;

                          clear: both;

                    }

                    .clearfix{

                          zoom: 1;/*为了兼容IE*/

                    }


7什么是闭包; 

闭包有三个特性:     

1.闭包它是定义在函数内部的函数

2.函数内部可以读取外部的参数和变量, 让这些变量的值始终保持在内存中

3.参数和变量不会被垃圾回收机制回收

退出函数之前,将不使用的局部变量全部删除。


8. 原型链

       对象之间的继承关系,在Js中是通过prototype对象指向父类对象,再找它的上级,直到指向Object对象为止,它就称为为原型链。


[if !supportLists]9.  [endif]this指向

this 永远指向的是最后调用它的对象

3在构造函数中 this指向它的实例化对象


10怎么实现继承

[if !supportLists]1.     [endif]用prototype直接继承

[if !supportLists]2.     [endif]用call apply bind继承

    var a= {

        user:'hexiao',

        fn:function(e,ee){

            console.log(this.user);

            console.log(e+ee)

        }

    }

    var b= a.fn;

    b.call(a,1,2);  //直接传参  call和apply都是改变上下文中的this并立即执行这个函数

    b.apply(a,[2,3]) //参数是数组的


    var c= b.bind(a)//bind方法返回的是一个修改过后的函数,想什么时候调就什么时候调

    console.log("----------")

    c(5,9);


3.使用class 类来实现继承


11:跨域

       为什么要跨域: 根据同源策略的限制,发起请求时必须要协议,端口,域名一致,


       办法:

[if !supportLists]1.     [endif]跨域jsonp

[if !supportLists]a)      [endif]聊一下:只能get不能post

[if !supportLists]2.     [endif]设置服务器代理

[if !supportLists]a)      [endif]Nginx代理

[if !supportLists]b)      [endif]设置服务代理:如node设置响应头:

[if !supportLists]1.       [endif]代码如下:Access-Control-Allow-Origin,’*’

3.websock 即时通信







       解决办法; 1.jsonp跨域

[if !supportLists]1.     [endif]还可以通过window.name

[if !supportLists]2.     [endif]H5 postMessage

3. 使用 Nginx 反向代理

4通过服务器代理,

[if !supportLists]4.  [endif]Node.js 中间件 设置响应头Access-Control-Allow-Origin', '*'


window.postMessage的使用方法比较简单,只有两个参数,第一个参数是要传输的消息,第二个参数是接收消息的域,可以用“×”来表示所有的域。发送消息的代码如下:



              以前用jsonp ,现在用h5de  window.postMessage




12promise

在es6中的promise对象是一个构造函数,用来生成promise实例,promise优化了ajax的异步请求;它有三个状态peedingresolve reject

    const promise = new Promise(function(resolve,reject){

        resolve(1);

    })


    //接收一个函数作为参数 , (resolve

reject) 这两个参数由js引擎提供,不用自己部署

    //resolve 的作用是promise对象的状态从未完成到成功,成功后,将异步操作的结果作为参数传递

    //reject  


    //then() 方法 是resolve,reject状态的回调函数


    //jquery defrred对象 就是jquery中promise的一个实现



串行: .then 作为回调reject

并行: .all ()  如果有一个报错就会reject

Race() 哪个执行快就返回哪个,后面的会继续请求,只是会抛弃

13MVVM

M: model 模型 当前视图中的可用的数据

V: view 视图  渲染的UI HTML

VM: viewModel

Vue它是以数据为驱动,实现model和view之间的一个双向数据绑定

14vue传参

父传子用props

子传父用emit发射

兄弟组件, 让它们建立联系,找一个共同的节点中央事件总线bus事件车

       或者就用vueX状态管理


15.vuex

Store仓库

       它有4个状态属性

              State

              Getters

              Actions

              Mutations


通过dispatch触发antions管理mutations

或者commit提交 改变mutations的值


16排序算法

冒泡算法

       第一个for遍历,第二个for , j++j

                     然后判断左右两边的数,如果左边比右边大,则替换,一直替换到最大的

       插入排序跟冒泡相反取最小值

快速排序:

[if !supportLists]1.     [endif]先从数组中取出一个数作为基准值arr.splice(Math.floor(arr.lenth/2),1)

[if !supportLists]2.     [endif]然后分区,将比它小的放到左边,比它大的放到右边

[if !supportLists]3.     [endif]再对左右分区进行重复第二步,直到各个区间只有一个数



17css3的新特性

圆角border-radius  阴影box-shadow  文字特效text-shadow  渐变gradient

2d-3D转换 媒体查询 rgba设置背景

18H5新特性

语义化标签 本地存储 离线存储   音频视频播放 地理定位

19websocket即时通信

Var ws = new WebSocket(“域名”)

它有4个事件两个方法

Ws.onopenws.onerror  onmessage onclose关闭连接

Send() close()



20webpack 模块打包器  自动化构建


四大核心:

[if !supportLists]1.     [endif]入口entry  收拾的入口

[if !supportLists]2.     [endif]加载loader  开始收拾

[if !supportLists]3.     [endif]插件plugins   对收拾的功能进行扩展

[if !supportLists]4.     [endif]出口output   收拾后整理的位置



Webpack-dev-server是webpack提供的一个小型express服务器  

作用:相当于对静态文件提供服务的

作用:


21性能优化

1. 4、web前端开发,如何提高页面性能优化?

内容方面:

1.减少 HTTP 请求(Make Fewer HTTP Requests)

2.减少 DOM 元素数量(Reduce the Number of DOM Elements)

3.使得 Ajax 可缓存(Make Ajax Cacheable)


针对CSS:

1.把 CSS 放到代码页上端(Put Stylesheets at the Top)

2.从页面中剥离 JavaScript与CSS (Make JavaScript and CSS External)

3.精简 JavaScript 与CSS (Minify JavaScript and CSS)

4.避免 CSS 表达式(Avoid CSS Expressions)


针对JavaScript :

1. 脚本放到 HTML 代码页底部(Put Scripts at the Bottom)

2. 从页面中剥离JavaScript 与CSS (Make JavaScript and CSS External)

3. 精简 JavaScript 与CSS (Minify JavaScript and CSS)

4. 移除重复脚本(RemoveDuplicate Scripts)


面向图片(Image):

1.优化图片

2 不要在 HTML 中使用缩放图片

3 使用恰当的图片格式

4 使用 CSS Sprites 技巧对图片优化



22行内元素有哪些:

       行内元素: a b span img strong input label em button select

       块级元素:div p ul li h1-h6 dl dt dd header nav



23简述一下src与href的区别:

       Href:是指向网络资源所在位置 link a标签 用于超链接

       Src:指向外部资源的位置当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到资源加载完毕,类似于将所指向资源嵌入当前标签内,




24css有哪些选择器:

1.id选择器( # myid)

2.类选择器(.myclassname)

3.标签选择器(div, h1, p)

4.相邻选择器(h1 + p)

5.子选择器(ul > li)

6.后代选择器(li a)

7.通配符选择器( * )

8.属性选择器(a[rel = "external"])

9.伪类选择器(a: hover, li:nth-child)     

22解构

23promise

24传参 父调用子方法mininx

25生命周期






[if !supportLists]5.  [endif]小程序总结

[if !supportLists]1.  [endif]布局flex

Flex 关注一下属性:

[if !supportLists]·       [endif]1.flex-direction  :row | column 决定主轴的方向(排列方向)

[if !supportLists]·       [endif]2.flex-wrap : nowrap | wrap | wrap-reverse 排列方式(换不换行)

[if !supportLists]·       [endif]3.justify-content :center | space-around | space-between| flex-start | flex-end

(定义了主轴的对其方式)

[if !supportLists]·       [endif]4.align-items:center |baseline | stretch | flex-start | flex-end                           定义交叉轴的对其方式()

      baseline项目的第一行文字的基线对其     stretch未设置高度,默认占满


[if !supportLists]·       [endif] 、、、、、、对项目中的order进行单独设置、、、、、、、、、、、、、、、、

[if !supportLists]·       [endif]6. order :  定义排列顺序,数值越小,排列越靠前。默认为0

[if !supportLists]·       [endif]7. flex-grow:  设置单项目的比列,平均分配 默认0

8. flex-shrink:<number> /* default 1 */ 默认都为1 感觉是设置 自适应的

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效。


[if !supportLists]·       [endif]9.flex-basis :计算主轴多余空间 自适应

10 align-self  :auto | flex-start | flex-end | center | baseline | stretch

[if !supportLists]·       [endif]允许单个项目排列方式不一样。



2.事件properties

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • 文/Nico -01- 在过去的二十多年光景里,我不止一次地咬着牙告诉自己:抬头挺胸,微笑,你不比任何人差。但几乎...
    Nico尼可阅读 45,613评论 763 2,180
  • 有一段时间我一直像一个惨绿青年一样纠结着一个很严重的问题,读没读大学的人生究竟有没有一点区别。 后来自从广大睿智而...
    张松溪阅读 892评论 0 1
  • 快速排序传说中很imba的一种排序。 快速排序大概步骤是三部曲第一部:选主源第二部:子集划分第三部:算法实现这三部...
    laohan_王阅读 170评论 1 0