2021-08-10

1.赋权

grant all privileges on table A to B

2.查询库中的表

select * from pg_tables where tablename like '%%'

3.新增分区

alter table A add partition ...

4.取上月最后一天

date_trunc(now())-1

5.是否用过拉链表

用过,我之前接触过的拉链表一般是订单表和用户表,在某些需求背景下,需要用到历史某一时间点的订单状态或用户信息,也就是历史快照数据,但这种表数据量又比较大

如果用普通的增量表或全量表,获取不到历史状态,如果每天保留一份数据,又会造成数据冗余,拉链表与普通表最大的区别,是他有一个开始时间,结束时间,

用于表明该条数据的有效期,如果想查某一天的历史快照数据,只需要限制该时间在开始结束时间中间即可,我们目前项目没用到拉链表订单用户表都是做成的普通增量表,获取最新数据即可

6.

数据倾斜:

表中null太多、某一数据太多、关联字段类型不匹配

业务系统至_rt:

CDM、roma、xdata

DAP上报至_cs:

flinksql、flinkjar

olap与oltp的区别

sc.textfile样例

执行计划

做数仓的,技术不是很重要,比如说用的什么etl工具、什么数据库,基本上原理都是差不多的,就算没用过,熟悉各几天也就差不多了,也就是函数、语法、使用上有些细微的差异,其实数仓的关键是

要理解业务,理解整体数仓的结构和模型的业务含义,然后会sql、会存储过程、会调优、会建模

mapreduce原理

读写文件原理

wordcont

collect_set() 与 collect_list()的使用

47.hive常用命令:

内部表/外部表/分区表的创建

Hive/hdfs/本地文件系统之间的数据导入导出

1.创建内部hive表,然后导入数据

CREATE TABLE t_hive (a int, b int, c int) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

补充:通过stored as parquet可以将数据保存为parquet格式

从本地导入数据到hive表

LOAD DATA LOCAL INPATH '/home/cos/demo/t_hive.txt' OVERWRITE INTO TABLE t_hive ;

从Hive表导出数据到本地文件系统

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/t_hive' SELECT * FROM t_hive;

从HDFS导入数据到hive表

LOAD DATA INPATH '/user/admin/t_hive.txt' OVERWRITE INTO TABLE t_hive ;

从Hive表导出数据到HDFS

INSERT OVERWRITE DIRECTORY '/user/admin/t_hive' SELECT * FROM t_hive;

从其它hive表导入数据到hive表

INSERT OVERWRITE TABLE t_hive2 SELECT * FROM t_hive ;

**也可创建hive表的同时,从其它hive表导入数据:

CREATE TABLE t_hive AS SELECT * FROM t_hive2

2.创建外部hive表

create external table ext_student(id int ,name string) row format delimited fields terminated by '\t' location '/datax';

3.创建分区表

CREATE TABLE t_hft(

SecurityID STRING,

tradeTime STRING,

PreClosePx DOUBLE

) PARTITIONED BY (tradeDate INT)

ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

导入分区数据

load data local inpath '/home/BlueBreeze/data/t_hft_1.csv' overwrite into table t_hft partition(tradeDate=20130627);

查看分区表

SHOW PARTITIONS t_hft;

4.正则匹配表名

show tables '*t*';

5.增加一个字段

ALTER TABLE t_hive ADD COLUMNS (new_col String);

6.重命令表名

ALTER TABLE t_hive RENAME TO t_hadoop;

7.仅复制表结构不导数据

CREATE TABLE t_hive3 LIKE t_hive;

8.删表

drop table if exists t_hft;

增加分区:

ALTER TABLE book add  PARTITION (category = 'zazhi') location '/user/hive/warehouse/datax.db/book/category=zazhi';

删除分区:

ALTER TABLE table_name DROP partition_spec, partition_spec,...

重命名表:

ALTER TABLE table_name RENAME TO new_table_name

修改列名:

ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]

增加/替换列:

ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)

查看表名,部分匹配

SHOW TABLES 'page.*';

SHOW TABLES '.*view';

查看某表的所有Partition,如果没有就报错:

SHOW PARTITIONS page_view;

查看某表结构:

DESCRIBE invites;

查看分区内容

SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';

hive的udf:

1.继承UDF,重写evaluate方法,打成jar包,放入hive根目录下的auxlib(或者执行hive命令前用addjar)

2.CREATE temporary function str_md5 as 'com.lxw1234.hive.udf.HashMd5'; 将其创建成一个方法,然后既可以在sql中使用

指定执行用户:

sudo -u hdfs

7.查看系统中所有进程

Ps aux

41.给文件增加权限:

其语法格式为:chmod

olap与oltp的区别

oltp指数据库,olap指数据仓库,

像我们这边,

数据库的主要使用场景有两种,第一是用于业务系统储存业务数据,第二是用于储存数仓处理后的最终结果数据,他的实时交互性比较强

而数仓的使用场景,就是是将不同业务系统的异构数据源都抽取过来,统一建模、清洗、加工,面向主题进行离线或实时分析,为不同分析需求提供数据服务

76.数据仓库、主题域、主题的概念

数据仓库 包括 主题域 包括 主题

数据集市

就是数仓处理完后提供的dm层结果数据

134.Hive中order by,sort by,distribute by,cluster by的区别

1.order by

全局排序

2.sort by和distribute by组合使用(效果与order by一样,但是使用场景不同)

当有多个reduce时(可以通过set mapred.reduce.tasks=n来指定reduce的个数),sort by仅保证在每个reduce内排序(部分有序),distribute by的作用是控制哪些行放入哪些reduce处理的,因此distribute by经常和sort by配合使用:SELECT * FROM year distribute by year sort by year asc,temp desc

3.CLUSTER BY

关键字是DISTRIBUTE BY和SORT BY的简写,这两者可以认为对应与Hadoop的partition和sort过程。如果partition和sort的key是不同的,可以使用DISTRIBUTE BY和SORT BY分别指定(如上面的例子)

注:Distribute by和sort by配合使用的场景

1.Map输出的文件大小不均。

2.Reduce输出文件大小不均。

3.小文件过多。

4.文件超大。

136.Hive的 TRANSFORM 关键字的作用

可以在SQL中调用自写脚本的功能,适合实现Hive中没有的功能又不想写UDF的情况

如:

SELECT TRANSFORM (movieid, rate, timestring,uid) USING 'python weekday_mapper.py' AS (movieid, rate, weekday,uid) FROM t_rating;

**kafka主题中有分区,每个分区有多个副本保存在不同的服务器上;分区中有消息,每条消息在文件中的位置称为offset(偏移量),用来在分区中唯一的标识这个消息

**将日志分区可以达到以下目的:首先这使得每个日志的数量不会太大,可以在单个服务上保存。另外每个分区可以单独发布和消费,为并发操作topic提供了一种可能。

**两个重要的配置参数:

## 数据存储的最大时间 超过这个时间 会根据log.cleanup.policy设置的策略处理数据,也就是消费端能够多久去消费数据

log.retention.minutes=7days

## Consumer归属的组ID,broker是根据group.id来判断是队列模式还是发布订阅模式,非常重要

 group.id

hive调用hql脚本

./hive  -d key value  -f HQL文件

7、按照需求使用spark编写一下程序?

  A、当前文件a.text的格式如下,请统计每个单词出现的个数和第四列每个元素出现的个数

A,b,c,d

B,b,f,e

A,a,c,f

sc.textFile(“a.text”).flatMap(_.split(“,”)).map((_,1)).ReduceByKey(_+_).foreach(println)

sc.textFile(“a.text”).map(line=>{(line.split(",")(3),1)}).reduceByKey(_+_).foreach(println)

  B、HDFS中有两个文件a.text与b.text,文件的格式为(ip,username),如:a.text,b.text

a.text

127.0.0.1  xiaozhang

127.0.0.1  xiaoli

127.0.0.2  wangwu

127.0.0.3  lisi

B.text

127.0.0.4  lixiaolu

127.0.0.5  lisi

3.Spark Streaming的三种运用场景

1、无状态操作

         只关注当前新生成的小批次数据,所有计算都只是基于这个批次的数据进行处理。

2、状态操作

         除了当前新生成的小批次数据,但还需要用到以前所生成的所有的历史数据

3、window操作

         关注窗口内的批次数据

7.      “jps”命令的用处?

解答:

这个命令可以检查Namenode、Datanode、Task Tracker、 Job Tracker是否正常工作。

Hive中的left semi join替换sql中的in操作

有用户id、股票代码、买入日期三个字段,写sql求连续3日买入的用户

例如:查询不同地区三季度家电类商品销售额排名前10%的商户有哪些

表结构:商户、日期、地区、商品类别、商品名称、商品单价、商品数量

select sh,dq,

ntile(10) over (patition by dq  order by  xse desc) pm

from

(select sh,dq,sum(round(nvl(dj,0)*nvl(sl,0),2)) as xse from a where splb='家电' and quarter(ri)=3 group by sh,dq) t

where pm=1

cm安装cdh

3类优化方式

介绍、项目介绍(从数仓分层和数据流方面和技术栈简述,因为我们这边每个人不是固定做接入、底座、报表的,所以我刚才说的所有流程我基本上上都做过,然后业务方面我主要负责的是行为数据和订单数据)

实时数仓的实现:

flink+finebi(原来是华为云上的一个实时服务)

最底层为实时区数据

sdi为贴源层,数据和源系统保持一致

dwd为明细层,里面主要是一些事实表

dws为汇总层,里面主要是一些通用逻辑

dim为维度层,里面是一些维表

dm为集市层,里面是一些结果表

页面sql层(现在是用存储过程或finebi实现)

clickhouse简述

小数保留两位:

round()



flink sql专题

1.如何运行:

在华为云上的实时流计算服务中,可以通过sql或jar的方式运行作业

2.建表语句:

creat source/tmp/sink stream TBL_A(字段) with (配置)

3.flink sql简述:

我不负责实时,但是看过别人写的代码,我们这边flink sql其实就是将kafka数据读进表,然后用sql处理,最后将结果数据落进guass表,语法和标准sql也差不多,并且实时逻辑是不会太复杂的,

比较有特点的,就是checkpoint、窗口、eventime

4.应用场景:

我们目前应用于实时大屏(包括实时销售,直播情况统计,监控预警等)

5.checkpoint作用:

开启后可基于checkpoint进行失败恢复和数据累计

6.窗口:

主要就是翻滚窗口(数据不重)和滑动窗口(数据可重)

7.flinksql中提供了两种时间:

processing-time 系统时间  event-time 事件时间

需要在数据流中指定一个字段作为事件时间,并且由于数据可能会出现乱序,因此还需要设置watermark策略来保证一个特定最大等待时间后,触发后续的计算

报表需将主界面、下钻页面格式均印入脑海

页面效果分析: 

目的:

看出某页面作为入口(一次访问路径的第一次)或整体(一次访问路径的所有页)页面的流量,成交情况

商品销售分析:

目的:

从品牌,商品,平台,渠道,物理分离,业务分类等不同维度看看订单类指标的情况

主表是订单产品表 dwd_order_product 再关联一些退换货申请表,退款申请表取到相应信息

如何建模:以退换货申请表为例

id唯一标记,也是该表的主键

退换单号      支付方式  是否保价

原始下单单号  退款方式  是否使用积分

用户id      退货类型

状态        申请日期

收货地址    退换原因

总结:将此行为涉及的所有字段加入该表

渠道销售分析

目的:

可以看出用户通过各个推广渠道产生的点击或购买行为,从而可以看出各渠道的推广效果

渠道来源包括:

返利网、百度竞价、华为商城站内信等

渠道名称是指:

具体广告页的简称

该报表分为三个页签:

渠道流量销量:从各渠道维度来看  渠道单品销量:从商品维度来看  渠道地域销量:从收货地维度来看

客单价指标:

pv:?

取页面加载类事件的action_id,进行去重后计数

uv:?

cookie_id去重后计数

购买/首次购买用户数:

订单表里user-id去重,若支付时间等于首次支付时间,则为首次支付

页面上下游分析:

目的:

分析当前页面或一类页面(首页、详情页、活动页等)的来源页流量,去向页流量以及成交页贡献情况

还可以通过url或商品名称,看出具体某一页面其流量,以及贡献和被贡献情况

uv和支付金额都支持下钻,下钻后展示的分别是 :

uv:页面下具体页面事件分别贡献的uv及占比  支付金额:产生支付的具体商品名称和支付金额及数量

技巧

1.数仓的重点是什么:

符合建模规范,包括架构,模型,代码,命名等

2.什么是元数据管理:

我理解的元数据就是描述数据的数据,页就是将一类表的信息,比如备注、字段、字段含义、关联关系等描述信息放在一张表内,现在我们这边是没有完善的元数据管理的,就是将一些信息写在excel中

3.数仓命名规则:

层级-主题-主题业务含义-后缀  dwd_user_behavior_rt

4.数仓建模步骤:

将业务分成几个主题域,在每个主题域内梳理需要分析的业务主题 确定业务对象 确定维度 确定事实表 最后构建模型

如:零售主题域下-渠道分析主题-渠道销售分析报表

常用维度包括:

日期、平台、商品、配置、地域、渠道、用户、设备

常用事实表:(能说出宽表中主要字段)

正逆向订单表(下单数等)、行为表(pv、uv等)、注册登录表

常用模型:

1)星型模型:每一个维度都直接与事实表相连接 2)雪花模型:有一个或多个维表没有与事实表直接连接,而是通过其他维表连接到事实表

我们大部分用的是雪花模型,这种模型适用于复杂的业务场景,还可以减少数据冗余

我们所有主题域都是零售主题域(retail)主题包括用户行为、订单、登录注册等

6.如何做一个新需求:

先理清都有哪些表,本次业务涉及哪些表,怎么关联,最后分的维度和指标是什么,是否口径已经都给出

报表常见问题(项目中遇到的问题):

1.当下钻小时折线图的时候,如果该小时无数据吗,则前端横坐标无法填充,目前的解决方案:创建一张包含所有时间的表,以此为主表,left join

2.行为订单数据关联时,不要用full join ,否则当一个有数据一个没数据时容易出问题,可以用union all合并,然后case when then 取出

3.注意删除的内容和插入的一定要完全一致,因为我们有很多数据标识,防止误删

4.前端传参格式和返回格式一定要先沟通好,否则后期还要返工

是否在存储过程里用过循环:

我们现在大部分存储过程要么是给前端调用,生成报表数据用的,要么是给lts调度跑底层数据的,大部分不怎么用循环

一般工具类的脚本才可能会用到循环,我之前写过一个,是给表配置自增分区的,因为guass分区需要自己创建,不能向hive

那样自动生成,所以我写了个存储过程,大概原理就是:我们会把需要分区的表写入一张配置表,然后写存储过程度这张表,

再根据分区系统表判断分区是否已经存在,如果不存在,再一次性创建7天的分区

执行计划如何看是否走了索引是否全表扫描:

有index则走了索引,有full scan则进行了全表扫描

1.窗口函数页面上下游逻辑

按日期、平台、cookieid、url-mark分组

按行为发生时间和行为id进行排底

用lag()函数,求当前页面的上游来源页面

补充:也可获取当前行为的上下游行为的时间、大类、页面事件url等

补充:url-mark是用于区分是否是同一行为区间的,目前认为间隔超过两个小时的上下两条行为是不同的行为区间

2.只有点击事件才上报action-code  如果为null则为页面事件

3.大数据量下的快速查询优化  分区、列存、压缩、牵引

4.华为每日的订单、行为数据量

订单:5.6万(份内)行为:1.2亿(20分钟处理完)

报表性能优化需求

1.建表时分布方式及分布键的选择

(1)一般数据量较小的维表,由于经常会被join,因此选择replication的方式,将数据在每个DN上都存储一份

(2)除上述情况外,其余分布方式选择hush,分布键使用散列字段,使数据尽可能均匀的分布在DN上

(3)切记不能选择会被更新的字段作为分布键

(4)如何查看数据是否倾斜:按分布字段分组,最大最小相差10%以内

(5)不要新建一列seq 用作分布,因为seq会带来性能瓶颈

(6)尽量用join条件字段做分布键,以便join任务能下推到DN

2.建表时使用分区

(1)分区表是一张逻辑表,数据实际存储在分区中

(2)好处:某一分区故障不影响其余数据,提高检索效率

(3)一般使用天分区

3.数据类型的选择

(1)整形>浮点型>NUMP.EIC>字符型

(2)smallint>int

(3)用作关联的字段,数据类型必须一致,否则数据库还需动态转化

(4)尽量使用varchar(n)这种变长字符类型存储字符串

4.压缩级别 

查询多:列存、中级压缩  更新多

5.加索引

6.收集统计信息

analyze语句可收集sql中涉及表的信息,存储在系统表中,以便查询优化器生成最有效的执行计划

7.查看执行计划(可以看出是否走了索引,index scan)

explan analyze(如果sql可以正常执行)

8.不写select* 而要指明字段

9.尽量不用full join

10.where条件中,要把能筛选出较少数据的条件放在前面

11.尽量把字段名放在比较条件的一边,会自动进行剪技优化

12.过滤条件中的or很费性能,(会出现全表扫描)可以改为union all合并

13.not in改为not exist (前提是关联字段不出现null值)

14.尽量避免在where中进行null值判断,否则将导致进行全表扫描,可以在null字段上赋上默认值0(如果业务允许)

15.对于连续的数值,用between 代替in

16.尽量避免在where子句中对字段进行表达式或函数操作

17.合理将where或order by中的字段添加索引,但并不是越多越好,因为在提升查询性能的同时会降低插入更新性能

18.只是where条件不同时统计数据,可以改写为case...when...

19.in/exist优化时,in对应=    not in对应!=

20.join字段的数据类型必须一致

21.执行计划专题,百度搜 需要注意的是最顶层算子为date node scan 时

页面上下游的需求

1.展示出各页面的访问uv及占比

2.选择一个页面,能看到当前页,来源页,去向页的uv情况及支付金额

3.uv支持下钻,展示页面中具体的事件贡献的uv

4.支付金额支持下钻,展示产生金额的具体商品名称和数量

5.可以输入具体的商品名称,看出当前商品的来源页面及去向页面,及其pv、uv、支付金额

补:现在的所有报表,页面sql里面的用法都比较简单,分不同页面维度

按subjuct,type拿指标使用就行,最多加一些页面筛选条件和简单的指标二次计算,真正的逻辑都在下层算好了dm层

留存分析

目的:看看产品或页面保留用户的能力

如:初始行为选择:“注册”  后续行为选择“访问”  留存周期选择“7天”  时间选择“20200701”<留存周期选择“7天”

则:报表会展示20200701~20200708日符合条件的人数即20200701注册,后几天访问的人数及占比

第一天由初始行为进行过滤

后几天在第一天筛出的user-id中再次进行筛选,留存率也是和第一天人数的比值

和漏斗进行区分,漏斗是在上一天的基础上筛选的漏斗说白了就是每层筛选,主要用于分析一个多步骤过程中每一步的转化与流失情况

面试必问:

1.离职原因:

想找个非外包的更好的工作机会

2.项目中遇到的问题:

说调优、报表遇到问题、数据接入遇到问题

3.优势劣势:

优势是对整个数仓每个环节都做过,并且比较善于归纳总结

劣势是实时方面做得比较少

搜索关键词:

数据仓库、数仓、etl、大数据、数据开发、大数据工程师、hive、bi、sql、报表、数据可视化、数据分析

上下游逻辑如何算贡献:

我们有一张订单行为表,里面的主体是行为数据,然后每条行为后面都会带上他所贡献的订单编号

具体的步骤:

我们通过日期、平台、user_id、cookie_id能找到一个用户本次的全部浏览记录,如果其中有下单,那行为发生时间在本次之前下单时间之前,且在上次下单时间之后的全部浏览行为都会算作

对本订单的贡献

统一id

目的:

找出cookieid->deviceid->udid->userid单向一对一关系,比如说你之前登陆过,但是这次购买未登录,我们就可以通过之前保留下来的登录信息,获取这次未登录状态下的user_id,从而确定这是哪个用户产生的行为

实现:

1.如果遇到多对多的情况,通过窗口函数对事件发生时间倒序去第一条,认为最新的对应关系即为实际对应关系

2.源表是行为表,这些id是行为产生时直接上报的

3.在逻辑处理中主要是对异常数据进行的一些过滤,比如说判断用户id是否合法,可以和用户表进行inner join,去除不合法数据,再比如说可以过滤掉一些格式异常的数据,还有为null值重新赋值等

涉及到的表:

行为表

设备维表

用户维表

dwd_user_behavior中字段含义:

action_type:0、1、2,分别对应曝光事件、点击事件、页面加载事件

platform:平台,一般分为APP、PC、WAP(手机浏览器访问)

big_category_name/small_category_name:大类/页面,可以通过url和website字段关联页面维表,获取到当前事件是在哪个大类和页面下发生的

small_category_name_lag:当前页面的来源页面,通过lag()函数获取

url:发生页面加载事件时会有相应的url

action_occur_time:行为发生时间

sku_name:配置名

product_name:商品名

cookieid/deviceid/udid/userid:对应的id字段

注意:

页面加载事件action_code都为null

点击事件(比如切换商品配置)的url不会跳转

当页面加载为商品详情页时,从url可以获取到具体的商品,然后关联sku表可以获取到商品配置的具体信息

页面包含:详情页、首页、活动页、抢购页等

直播

目的:从活动维度,看出该活动的直播效果与下单情况

指标计算逻辑(所有行为、订单相关指标的计算逻辑都差不多是这样):

pv:点击量,统计action_type=2的页面事件时action_id的数量

uv:用户数,统计cookie_id去重后的数量

人均观看时长:通过用户进入、离开直播间的时间计算出观看时长,求和,然后除以总uv

最高并发数:按时间分组,计算出同一时刻(同一分钟)的uv数,取最大值

评论数:取行为表中action_code为点击评论的行为数据求和,再关联行为属性表获取该行为对应的活动id,确认是该活动产生的评论

分享次数/点赞数:逻辑同上,只是action_code不同

登录注册数:从系统日志表里获取用户登录注册信息,然后关联直播活动表,限定登录注册时间在直播活动时间内,然后对user_id进行去重,即为登录数,若is_first_login=1,则为首次登录,即视为注册

下单数:过滤下单时间,对order_code进行去重统计

下单金额:过滤下单时间,对cash_pay进行求和

支付订单数:过滤支付时间、支付状态,对order_code进行去重统计

支付订单金额:过滤支付时间、支付状态,对quantity*refund_amount求和

支付取消、退货退款除了过滤的时间不同,其余逻辑同上

购买用户领券数:先从用户领券表中过滤领券时间后查出用户和券的对应数据,然后关联直播订单表,找出各直播活动中产生购买行为的用户,最后关联活动维表,取到该场直播中发放的优惠券,计数

注意:

此处cash_pay为商品支付中现金支付部分(商品总价+运费-优惠券-积分-折扣)理论上应该等于quantity*refund_amount(退款金额*数量),因为退款才是实际支付的钱

一般报表结构:

筛选框,负责增加过滤条件

折线图,横坐标为时间,纵坐标为各指标,可以看出指标按天变化情况

表格,分不同维度统计各指标数值

导出,导出一般包含汇总和按天明细

下钻,如支付金额下钻可以看出支付商品明细

涉及到的表:

dws_live_order:(直播订单表)

order_code,order_date,platform,user_id,payment_status,payment_date,order_finish_date,cash_pay,order_type,order_source,activity_id,activity_start_time,activity_end_time,积分相关字段,渠道相关字段等

dws_live_user_behavior:(直播行为表)

pt_d,platform,activity_id,behavior_id,behavior_code,action_type,action_name,cookie_id,user_id,action_occur_time,评论数,点赞数,分享数

dwd_user_behavior_content:(行为属性表)

behavior_id,行为属性key,行为属性value

dm_live_order_f:(所有dm层表都可以以此模板建表)

pt_d,date_flag,platform,live_activity_key,half_time_key,subject_type,subject_amount

造数据方案:

1.直接从生产环境dm层抽取数据到开发环境dm层

2.将开发环境所有底层表数据造好,再跑作业产生dm层数据

3.直接将开发环境数据日期进行修改,造出多天数据(优先选择)

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

推荐阅读更多精彩内容

  • # 一、Java ## 1.Java 集合框架 1 Map 2 Collection ## 2.Java 多线程 ...
    字雨木霖阅读 150评论 0 0
  • 最近工作需要,要总结iOS设计要点,因此将我的总结发表如下: 一 启动 1.尽量避免使用闪屏或其他启动操作,用户可...
    花帽帽阅读 858评论 0 0
  • 1.2.3 项目、项目集、项目组合以及运营管理之间的关系1.2.3.1 概述项目管理过程、工具和技术的运用为组织达...
    Jennifer_hu阅读 329评论 0 0
  • 29.hive/impala/hdfs/kudu的区别 hive和impala则更偏向于查询分析,需要基于hdfs...
    saluch阅读 772评论 0 0
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,030评论 0 4