2017前端面試題及答案總結(jié)

作者: Yeaseon
Blog:https://yeaseonzhang.github.io

"金三銀四斋扰,金九銀十"擅威,用來形容求職最好的幾個(gè)月缕坎。但是隨著行業(yè)的飽和逆甜,初中級(jí)前端er就業(yè)形勢(shì)不容樂觀衣洁。

行業(yè)狀態(tài)不可控墓捻,我們能做的當(dāng)然只是讓自己變得更加具有競(jìng)爭(zhēng)力。

今年自己也用了幾個(gè)月的時(shí)間來準(zhǔn)備筆記面試坊夫,鞏固基礎(chǔ)知識(shí)砖第。特此將自己在這個(gè)過程總結(jié)的題目分享出來,希望對(duì)于求職和準(zhǔn)備求職的同學(xué)有所幫助环凿。

CSS

列舉不同的清除浮動(dòng)的技巧

/* 1.添加新元素 */
<div class="outer">
  <div class="div1"></div>
  <div class="div2"></div>
  <div class="div3"></div>
  <div class="clearfix"></div>
</div>
.clearfix {
  clear: both;
}

/* 2.為父元素增加樣式 */
.clearfix {
  overflow: auto;
  zoom: 1; // 處理兼容性
}

/* 3.:after 偽元素方法 (作用于父元素) */
.outer {
  zoom: 1;
  &:after {
    display: block;
    height: 0;
    clear: both;
    content: '.';
    visibillity: hidden;
  }
}

一像素邊框

使用sass語法梧兼。

/* 定義 */
@mixin border-1px ($color) {
    position: relative;
    &:after {
        display: block;
        position: absolute;
        left: 0;
        bottom: 0;
        width: 100%;
        border-top: 1px solid $color;
        context: '';
    }
}

@media (-webkit-min-device-pixel-radio: 1.5), (min-device-pixel-radio: 1.5) {
    border-1px {
        &:after {
            -webkit-transform: scaleY(0.7);
            transform: scaleY(0.7);
        }
    }
}

@media (-webkit-min-device-pixel-radio: 2), (min-device-pixel-radio: 2) {
    border-1px {
        &:after {
            -webkit-transform: scaleY(0.5);
            transform: scaleY(0.5);
        }
    }
}

/* 使用方式 */
@inclue border-1px(rgba(7, 17, 27, .1));

形成BFC(Block Formatting Context)的幾種方式

BFC全稱”Block Formatting Context”, 中文為“塊級(jí)格式化上下文”。BFC元素特性表現(xiàn)原則就是智听,內(nèi)部子元素再怎么翻江倒海羽杰,翻云覆雨都不會(huì)影響外部的元素。

  • floatleft|right
  • overflowhidden|auto|scroll
  • displaytable-cell|table-caption|inline-block
  • positionabsolute|fixed

布局

/* HTML */
<div class="container">
  <div class="left">Left silder</div>
  <div class="content">Main content</div>
</div>

/* CSS */
.container {
  overflow: hidden;
}

.left {
  float: left考赛;
  width: 200px;
  margin-bottom: -9999px;
  padding-bottom: 9999px;
  background-color: #eee;
}

.content {
  margin-left: 200px;
  margin-bottom: -9999px;
  padding-bottom: 9999px;
  background-color: #ccc;
}

.left, .content {
  min-height: 200px;
  height: auto !important;
}

JS

asyncdefer區(qū)別

異步(async) 腳本將在其加載完成后立即執(zhí)行,而 延遲(defer) 腳本將等待 HTML 解析完成后莉测,并按加載順序執(zhí)行颜骤。

location.replace()location.asign()區(qū)別

location.replace()的url不會(huì)出現(xiàn)在history中

new操作符

  • 創(chuàng)建一個(gè)空對(duì)象,并且this變量引用該對(duì)象悔雹,同時(shí)還繼承了 該函數(shù)的原型
  • 屬性和方法被加入到this引用的對(duì)象中
  • 新創(chuàng)建的對(duì)象由this所引用复哆,并且最后隱式的返回this

AMD CMD CommonJS

/* AMD是RequireJS對(duì)模塊化的定義
 * CMD是seaJS對(duì)模塊化的定義
 * CommonJS是Node對(duì)模塊化的規(guī)范
 **/

/* AMD 依賴關(guān)系前置 */
define(['./a', './b'], function (a, b) {
    a.something();
    b.something();
})

/* CMD 按需加載,依賴就近 */
define(function (require, exports, module) {
    var a = require('./a');
    a.something();

    var b = require('./b');
    b.something();
})

DOM 操作

// 創(chuàng)建節(jié)點(diǎn)
createDocumentFragment()
createElement()
createTextNode()

// 添加 移除 替換 插入
appendChild()
removeChild()
replaceChild()
insertBefore()

// 查找
getElementsByTagName()
getElementsByName()
getElementsByClassName()
getElementById()
querySelector()
querySelectorAll()

JS設(shè)置css樣式的幾種方式

/* 1.直接設(shè)置style屬性 */
element.style.height = '100px';

/* 2.直接設(shè)置屬性 */
element.setAttribute('height', '100px');

/* 3.使用setAttribute設(shè)置style屬性 */
element.setAttribute('style', 'height: 100px !important');

/* 4.使用setProperty設(shè)置屬性腌零,通過第三個(gè)參數(shù)設(shè)置important */
element.style.setProperty('height', '300px', 'important');

/* 5.設(shè)置cssText */
element.style.cssText += 'height: 100px !important';

阻止默認(rèn)行為

function stopDefault( e ) {
    // 阻止默認(rèn)瀏覽器動(dòng)作(W3C)
    if ( e && e.preventDefault ) {
        e.preventDefault();
    } else {
        // IE中阻止函數(shù)器默認(rèn)動(dòng)作的方式
        window.event.returnValue = false;
    }
    return false;
}

阻止冒泡

function stopBubble(e) {
    // 如果提供了事件對(duì)象梯找,則這是一個(gè)非IE瀏覽器
    if ( e && e.stopPropagation ) {
        // 因此它支持W3C的stopPropagation()方法
        e.stopPropagation();
    } else {
        // 否則,我們需要使用IE的方式來取消事件冒泡
        window.event.cancelBubble = true;
    }
}

Ajax交互過程

  • 創(chuàng)建XMLHttpRequest對(duì)象,也就是創(chuàng)建一個(gè)異步調(diào)用對(duì)象.
  • 創(chuàng)建一個(gè)新的HTTP請(qǐng)求,并指定該HTTP請(qǐng)求的方法益涧、URL及驗(yàn)證信息.
  • 設(shè)置響應(yīng)HTTP請(qǐng)求狀態(tài)變化的函數(shù).
  • 發(fā)送HTTP請(qǐng)求.
  • 獲取異步調(diào)用返回的數(shù)據(jù).
  • 使用JavaScript和DOM實(shí)現(xiàn)局部刷新.

考察知識(shí)點(diǎn)最廣的JS面試題

function Foo() {
    getName = function () { alert(1); }
    return this;
}
Foo.getName = function () { alert(2); }
Foo.prototype.getName = function () { alert(3); }
var getName = function () { alert(4); }
function getName () { alert(5); }

/* 寫出輸出 */
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();

具體講解參見一道常被人輕視的前端JS面試題

JS數(shù)組深淺拷貝

  • slice實(shí)現(xiàn)
var arr = ['old', 1, true, null, undefined];

var new_arr = arr.slice();

new_arr[0] = 'new';

console.log(arr) // ["old", 1, true, null, undefined]
console.log(new_arr) // ["new", 1, true, null, undefined]
  • concat實(shí)現(xiàn)
var arr = ['old', 1, true, null, undefined];

var new_arr = arr.concat();

new_arr[0] = 'new';

console.log(arr) // ["old", 1, true, null, undefined]
console.log(new_arr) // ["new", 1, true, null, undefined]

以上兩種方法只是淺拷貝锈锤,如果數(shù)組元素是基本類型,就會(huì)拷貝一份新的闲询;但是如果數(shù)組元素是對(duì)象或者數(shù)組久免,就只會(huì)拷貝引用(類似指針),修改其中一個(gè)就會(huì)影響另外一個(gè)扭弧。

var arr = ['old', 1, true, ['old1', 'old2'], {old: 1}];

var new_arr = arr.concat();

new_arr[0] = 'new';
new_arr[3][0] = 'new1';

console.log(arr) // ["old", 1, true, ['new1', 'old2'], {old: 1}]
console.log(new_arr) // ["new", 1, true, ['new1', 'old2'], {old: 1}]
  • JSON.stringify實(shí)現(xiàn)數(shù)組深拷貝
var arr = ['old', 1, true, ['old1', 'old2'], {old: 1}];

var new_arr = JSON.parse(JSON.stringify(arr));

new_arr[0] = 'new';
new_arr[3][0] = 'new1';

console.log(arr) // ["old", 1, true, ['old1', 'old2'], {old: 1}]
console.log(new_arr) // ["new", 1, true, ['new1', 'old2'], {old: 1}]

簡(jiǎn)單粗暴阎姥,但是問題是不能拷貝函數(shù),不推薦鸽捻。

然后我們來手動(dòng)實(shí)現(xiàn)深淺拷貝呼巴。

  • 淺拷貝
var shallowCopy = function (obj) {
    // 判斷是否是數(shù)組或者對(duì)象
    if (typeof obj !== 'object') {
        return
    }
    var newObj = obj instanceof Array ? [] : {};
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            newObj[key] = obj[key];
        }
    }
    return newObj;
}
  • 深拷貝
var deepCopy = function (obj) {
    if (typeof obj !== 'object') {
        return
    }
    var newObj = obj instanceof Array ? [] : {};
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key];
        }
    }
    return newObj
}

數(shù)組去重

  • filter + indexOf
function unique (arr) {
    var res = arr.filter(function (item, index, array) {
        return array.indexOf(item) === index;
    })
    return res;
}
  • filter + sort
function unique (arr) {
    return arr.concat().sort().filter(function (item, index, array) {
        return !index || item !== array[index - 1];
    })
}
  • ES6
function uniqu3 (arr) {
    return [... new Set(arr)];
}

找出數(shù)組中的最大值

  • reduce
var arr = [6, 4, 1, 8, 2, 11, 3];

function max (prev, next) {
    return Math.max(prev, next)
}

console.log(arr.reduce(max));
  • apply
var arr = [6, 4, 1, 8, 2, 11, 3];

console.log(Math.max.apply(null, arr));
  • ES6
var arr = [6, 4, 1, 8, 2, 11, 3];

function max (arr) {
    return Math.max(...arr);
}

console.log(max(arr));

打亂數(shù)組的方法

var arr = [];
for (var i = 0; i < 100; i++) {
    arr[i] = i;
}

arr.sort(function () {
    return 0.5 - Math.random();
});

數(shù)組扁平化

var arr = [1, [2, [3, 4]]];

function flatten(arr) {

    while (arr.some(item => Array.isArray(item))) {
        arr = [].concat(...arr);
    }

    return arr;
}

console.log(flatten(arr))

排序

// 冒泡
function bubbleSort2(arr) {
    var len = arr.length;
    for (var i = 0; i <= len - 1; i++) {
        for (var j = 0; j <= len - i; j++) {
            if (arr[j + 1] < arr[j]) {
                var temp;
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    return arr;
}

// 快速排序
function quickSort(arr) {
    if(arr.length == 0) {
        return [];    // 返回空數(shù)組
    }

    var cIndex = Math.floor(arr.length / 2);
    var c = arr.splice(cIndex, 1);
    var l = [];
    var r = [];

    for (var i = 0; i < arr.length; i++) {
        if(arr[i] < c) {
            l.push(arr[i]);
        } else {
            r.push(arr[i]);
        }
    }

    return quickSort(l).concat(c, quickSort(r));
}

數(shù)字格式化 1234567890 -> 1,234,567,890

function formatNum (num) {
    return num.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
var num = '1234567890';
var res = formatNum(num);
console.log(res);

打亂數(shù)組的方法

var arr = [];
for (var i = 0; i < 100; i++) {
    arr[i] = i;
}

arr.sort(function () {
    return 0.5 - Math.random();
})

尾調(diào)用優(yōu)化

即只保存內(nèi)層函數(shù)的調(diào)用幀(只有開啟嚴(yán)格模式,才會(huì)生效),只有不再用到外層函數(shù)的內(nèi)部變量御蒲,內(nèi)層函數(shù)的調(diào)用幀才會(huì)取代外層函數(shù)的調(diào)用幀衣赶,否則無法進(jìn)行“尾調(diào)用優(yōu)化。

function factorial(n) {
    if (n === 1) return 1;
    return n * factorial(n-1);
}
factorial(5)

/* 優(yōu)化尾遞歸 */
function factorial(n, total) {
    if (n === 1) return total;
    return factorial(n - 1, n * total);
}
factorial(5, 1)

柯里化

實(shí)現(xiàn)add(1,2)add(1)(2)均輸出3

function add () {
    let sum = 0;
    Array.prototype.forEach.call(arguments, function (item, index){
        if (typeof item !== 'number') {
            return false;
        } else {
            sum += item;
        }
    })
    var tmp = function () {
        Array.prototype.forEach.call(arguments, function (item, index){
            if (typeof item !== 'number') {
                return false;
            } else {
               sum += item;
            }
        })
        return tmp;
    }
    tmp.toString = function () {
        return sum
    }
    return tmp;
}
add(1, 2); // 3
add(1)(2); // 3
add(1, 2, 3)(1, 4)(2, 2)(1) // 16

ES8 新特性

  • 字符串填充
str.padStart(targetLength [, padString])
str.padEnd(targetLength [, padString])
  • valuesentries函數(shù)
Object.values(obj)
Object.entries(obj)
  • getOwnPropertyDescriptors函數(shù)
Object.getOwnPropertyDescriptors(obj)
  • 函數(shù)參數(shù)逗號(hào)結(jié)尾
function es8(var1, var2, var3,) {}
  • 異步函數(shù)
    async關(guān)鍵詞定義的函數(shù)聲明了一個(gè)可以異步執(zhí)行的函數(shù)厚满,返回一個(gè)AsyncFunction類型的對(duì)象府瞄。
fucntion fetchTextByPromise () {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve('es8');
        }, 2000);
    });
}
async function sayHello () {
    const externalFetchedText = await fetchTextByPromise();
    console.log(`Hello, ${externalFetchedText}`);
}
sayHello();

數(shù)據(jù)類型判斷

var class2type = {};

'Boolean Number String Function Array Date RegExp Object Error Null Undefined'.split(' ').map((item, index) => {
    class2type['[object ' + item + ']'] = item.toLowerCase();
})

function type (obj) {
    return typeof obj === 'object' || typeof obj === 'function' ?
        class2type[{}.toString.call(obj)] || 'object' : typeof obj;
}

防抖

/*
 * func:需要調(diào)用的函數(shù)
 * wait: 防抖時(shí)間
 * immediate:布爾值,是否立即執(zhí)行
 **/

var debounce = function (func, wait, immediate) {
  var timeout;
  return function () {
    var context = this;
    var args = arguments;

    if (timeout) clearTimeout(timeout);

    if (immediate) {  // 是否立即執(zhí)行func
      var callNow = !timeout;
      timeout = setTimeout(function () {
        timeout = null;
      }, wait)碘箍;

      if (callNow) {
        func.apply(context, args);
      }
    } else {
      timeout = setTimeout(function () {
        func.apply(context, args);
      }, wait);
    }
  }
}

簡(jiǎn)單的字符串模板

var TemplateEngine = function(tpl, data) {
    var re = /<%([^%>]+)?%>/g, match;
    while(match = re.exec(tpl)) {
        tpl = tpl.replace(match[0], data[match[1]])
    }
    return tpl;
}

var template = '<p>Hello, my name is <%name%>. I\'m <%age%> years old.</p>';
console.log(TemplateEngine(template, {
    name: "Yeaseon",
    age: 24
}));

// '<p>Hello, my name is Yeaseon. I\'m 24 years old.</p>';

apply遵馆、callbind

  • applycall

在嚴(yán)格模式下,未指定環(huán)境對(duì)象而調(diào)用函數(shù)丰榴,則this 值不會(huì)轉(zhuǎn)型為window团搞。除非明確把函數(shù)添加到某個(gè)對(duì)象或者調(diào)用apply()或call(),否則this 值將是undefined多艇。

在非嚴(yán)格模式下逻恐,call、apply的第一個(gè)參數(shù)傳遞為null或undefined時(shí)峻黍,函數(shù)體內(nèi)的this會(huì)指向默認(rèn)的宿主對(duì)象复隆,在瀏覽器中則是window。

  • apply姆涩、callbind比較
var obj = {
    x: 81
};

var foo = {
    getX: function () {
        return this.x;
    }
}

console.log(foo.getX.bind(obj)());
console.log(foo.getX.apply(obj));
console.log(foo.getX.call(obj));

很明顯挽拂,bind方法后面多了一對(duì)括號(hào)。也就是說骨饿,當(dāng)你希望改變上下文環(huán)境之后并且立即執(zhí)行亏栈,而是回調(diào)執(zhí)行的時(shí)候(多用于事件監(jiān)聽器函數(shù))台腥,使用bind()方法,而apply/call則會(huì)立即執(zhí)行函數(shù)绒北。

  • 定義一個(gè) log 方法黎侈,讓它可以代理 console.log 方法。
function log(){
  console.log.apply(console, arguments);
};
log(1);    //1
log(1,2);    //1 2
  • 給每一個(gè) log 消息添加一個(gè)"(app)"的前輟闷游,比如:
log("hello world");    //(app)hello world
function log(){
  var args = Array.prototype.slice.call(arguments);
  args.unshift('(app)');
  console.log.apply(console, args);
};
  • apply實(shí)現(xiàn)bind
function bind (fn, context) {
    return function () {
        return fn.apply(context, argument);
    }
}

創(chuàng)建對(duì)象

  • 工廠模式
function createPerson(name, age, job){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function(){
        alert(this.name);
    };
    return o;
}
var person1 = createPerson("Nicholas", 29, "Software Engineer");
var person2 = createPerson("Greg", 27, "Doctor");
  • 構(gòu)造函數(shù)模式
function Person(name, age, job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = function(){
        alert(this.name);
    };
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");
  • 原型模式
function Person(){
}
Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function(){
    alert(this.name);
};
var person1 = new Person();
person1.sayName(); //"Nicholas"
  • 構(gòu)造函數(shù) + 原型模式
function Person(name, age, job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ["Shelby", "Court"];
}
Person.prototype = {
    constructor : Person,
    sayName : function(){
        alert(this.name);
    }
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");
person1.friends.push("Van");
alert(person1.friends); //"Shelby,Count,Van"
alert(person2.friends); //"Shelby,Count"
alert(person1.friends === person2.friends); //false
alert(person1.sayName === person2.sayName); //true

JS實(shí)現(xiàn)Jquery的extend()方法

function extend() {
    // 默認(rèn)不進(jìn)行深拷貝
    var deep = false;
    var name, options, src, copy, clone, copyIsArray;
    var length = arguments.length;
    // 記錄要復(fù)制的對(duì)象的下標(biāo)
    var i = 1;
    // 第一個(gè)參數(shù)不傳布爾值的情況下峻汉,target 默認(rèn)是第一個(gè)參數(shù)
    var target = arguments[0] || {};
    // 如果第一個(gè)參數(shù)是布爾值,第二個(gè)參數(shù)是 target
    if (typeof target == 'boolean') {
        deep = target;
        target = arguments[i] || {};
        i++;
    }
    // 如果target不是對(duì)象脐往,我們是無法進(jìn)行復(fù)制的休吠,所以設(shè)為 {}
    if (typeof target !== "object" && !isFunction(target)) {
        target = {};
    }

    // 循環(huán)遍歷要復(fù)制的對(duì)象們
    for (; i < length; i++) {
        // 獲取當(dāng)前對(duì)象
        options = arguments[i];
        // 要求不能為空 避免 extend(a,,b) 這種情況
        if (options != null) {
            for (name in options) {
                // 目標(biāo)屬性值
                src = target[name];
                // 要復(fù)制的對(duì)象的屬性值
                copy = options[name];

                // 解決循環(huán)引用
                if (target === copy) {
                    continue;
                }

                // 要遞歸的對(duì)象必須是 plainObject 或者數(shù)組
                if (deep && copy && (isPlainObject(copy) ||
                        (copyIsArray = Array.isArray(copy)))) {
                    // 要復(fù)制的對(duì)象屬性值類型需要與目標(biāo)屬性值相同
                    if (copyIsArray) {
                        copyIsArray = false;
                        clone = src && Array.isArray(src) ? src : [];

                    } else {
                        clone = src && isPlainObject(src) ? src : {};
                    }

                    target[name] = extend(deep, clone, copy);

                } else if (copy !== undefined) {
                    target[name] = copy;
                }
            }
        }
    }

    return target;
};

自定義事件(通過觀察者模式)

function EventTarget () {
    this.handlers = {};
}

EventTarget.prototype = {
    constructor: EventTarget,
    addHandler: function (type, handler) {
        if (typeof this.handlers[type] == 'undefined') {
            this.handlers[type] = [];
        }
        this.handlers[type].push(handler)
    },
    fire: function (event) {
        if (!event.target) {
            event.target = this;
        }
        if (this.handlers[event.type] instanceof Array) {
            var handlers = this.handlers[event.type];
            for (var i = 0, len = handlers.length; i < len; i++) {
                handlers[i](event);
            }
        }
    },
    removeHandler: function (type, handler) {
        if (this.handlers[type] instanceof Array) {
            var handlers = this.handlers[type];
            for (var i = 0, len = handlers.length; i < len; i++) {
                if (handlers[i] === handler) {
                    break;
                }
            }
            handlers.splice(i, 1);
        }
    }
}

安全

跨域的幾種方法

  1. 主域相同的跨域
document.domain
  1. window.postMessage

  2. JSONP跨域(只支持GET)

function todo(data){
  console.log('The author is: '+ data.name);
}

var script = document.createElement('script');
/* 向服務(wù)器www.yeaseonzhang.com發(fā)出請(qǐng)求。注意业簿,該請(qǐng)求的查詢字符串有一個(gè)callback參數(shù)瘤礁,用來指定回調(diào)函數(shù)的名字。 */
script.src = 'http://www.yeaseonzhang.com/author?callback=todo';
document.body.appendChild(script);
/* 服務(wù)器收到這個(gè)請(qǐng)求以后梅尤,會(huì)將數(shù)據(jù)放在回調(diào)函數(shù)的參數(shù)位置返回蔚携。 */
todo({"name": "fewjq"});
/* 由于<script>元素請(qǐng)求的腳本,直接作為代碼運(yùn)行克饶。這時(shí)酝蜒,只要瀏覽器定義了todo函數(shù),該函數(shù)就會(huì)立即調(diào)用矾湃。作為參數(shù)的JSON數(shù)據(jù)被視為JavaScript對(duì)象亡脑。*/
  1. websocket跨域

XSS 和 CSRF

性能

CSS 優(yōu)化

  • 正確的時(shí)機(jī)調(diào)用CSS
  • 使用媒體查詢標(biāo)記<link>,選擇性加載
  • 減少css文件數(shù)量
  • 壓縮css代碼

渲染

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末邀跃,一起剝皮案震驚了整個(gè)濱河市霉咨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拍屑,老刑警劉巖途戒,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異僵驰,居然都是意外死亡喷斋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蒜茴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來星爪,“玉大人,你說我怎么就攤上這事粉私⊥缣冢” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵诺核,是天一觀的道長(zhǎng)抄肖。 經(jīng)常有香客問我久信,道長(zhǎng),這世上最難降的妖魔是什么漓摩? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任裙士,我火速辦了婚禮,結(jié)果婚禮上幌甘,老公的妹妹穿的比我還像新娘潮售。我一直安慰自己痊项,他們只是感情好锅风,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鞍泉,像睡著了一般皱埠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咖驮,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天边器,我揣著相機(jī)與錄音,去河邊找鬼托修。 笑死忘巧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的睦刃。 我是一名探鬼主播砚嘴,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼涩拙!你這毒婦竟也來了际长?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤兴泥,失蹤者是張志新(化名)和其女友劉穎工育,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搓彻,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡如绸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旭贬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竭沫。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖骑篙,靈堂內(nèi)的尸體忽然破棺而出蜕提,到底是詐尸還是另有隱情,我是刑警寧澤靶端,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布谎势,位于F島的核電站凛膏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏脏榆。R本人自食惡果不足惜猖毫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望须喂。 院中可真熱鬧吁断,春花似錦、人聲如沸坞生。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽是己。三九已至又兵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卒废,已是汗流浹背沛厨。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摔认,地道東北人逆皮。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像参袱,于是被迫代替她去往敵國和親电谣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 請(qǐng)參看我github中的wiki蓖柔,不定期更新辰企。https://github.com/ivonzhang/Front...
    zhangivon閱讀 7,108評(píng)論 2 19
  • 在線閱讀 http://interview.poetries.top[http://interview.poetr...
    程序員poetry閱讀 114,269評(píng)論 24 450
  • 1.幾種基本數(shù)據(jù)類型?復(fù)雜數(shù)據(jù)類型?值類型和引用數(shù)據(jù)類型?堆棧數(shù)據(jù)結(jié)構(gòu)? 基本數(shù)據(jù)類型:Undefined、Nul...
    極樂君閱讀 5,498評(píng)論 0 106
  • Internet deprives people of independent thinking. Surfing...
    啊咪寶寶閱讀 224評(píng)論 0 0
  • 殘?jiān)赂邞乙股畛粒?碼頭霓虹歌催魂况鸣。 相擁吧臺(tái)酒兩鐏牢贸, 醉談人生愛與恨。 傷處難撫意暈沉镐捧, 唯有狂飲最解恨潜索。 201...
    星辰溥天閱讀 232評(píng)論 0 0