导读: 你好,**分集剧情介绍 第1集 搜视网tvsoucom 李秀荷(李多海饰)花安堂大**因为拒绝了 *** 将有300多年历史祖产收为文化遗产不得不寻求贷款装修房屋黄东奎(李智勋饰)作为TOP集团第三代受爷爷命令一定要将花安堂买下秀荷开始误把
你好,**分集剧情介绍 第1集 搜视网tvsoucom
李秀荷(李多海饰)花安堂大**因为拒绝了 *** 将有300多年历史祖产收为文化遗产不得不寻求贷款装修房屋黄东奎(李智勋饰)作为TOP集团第三代受爷爷命令一定要将花安堂买下秀荷开始误把东奎作为银行派来受理贷款人很热情地招待东奎得知对方想买下祖产后大发雷霆东奎无功而返被爷爷大骂一顿强调一定要把花安堂买下东奎只好再次拜访花安堂却遇到秀荷要外出去首尔做宗仙女东奎跟着秀荷说明买下因为TOP创始人曾花安堂佣人想买下房产养老东奎这才明白原来爷爷创业初期偷了花安堂牛作为资本秀荷吴静淑(张英兰饰)帮助下顺利上车但来接异母妹妹哥哥李俊英(Ryan饰)却因为法院案件提前受理而不能接朋友黄灿民(夏石镇饰)主动帮忙来接秀荷秀荷同父异母妹妹俊姬非常不满意到来没有及时通知一个重要活动取消秀荷误打误撞来到欢迎宴精湛表演引来了路人聆听也让恰好经过东奎见识了才情灿民骗人说秀荷未婚妻秀荷不满地打了一顿盛怒之下把自己包丢了东奎捡到却没赶得及还给秀荷回家家人却不家俊姬话让非常伤心想念死去妈妈秀荷辗转得知捡到自己包居然东奎说东奎偷走了包东奎越来越觉得这个身份证上也穿着函服、脾气比较奇怪大**有趣
你好,**分集剧情介绍 第2集 搜视网tvsoucom
花安堂所地区突然下暴雨秀荷非常担心连忙往家里打 *** 家人骗说一切都好东奎也不放心秀荷奶奶顶不住告诉东奎房子受了重创东奎开车去花安堂察看一个诈骗团伙冒充挽救宗亲联合会以提供维修贷款来诈骗花安堂房产秀荷信以为真打 *** 叫家里寄权利证明东奎听说这事让手下人查对方资料这才发现对方诈骗团伙性质东奎好心阻止秀荷拿走权利证明却被秀荷误以为想买下花安堂秀荷看电视知道了对方真诈骗团伙因此被文宗指责没有保护好花安堂秀荷向文宗要贷款修缮花安堂文宗却找借口拒绝了灿民和东奎堂兄弟灿民说想追秀荷东奎借口问怎么追灿民说情侣手机必须东奎于以方便联络位理由买了一部一模一样手机通过秀荷得奶奶送给秀荷被静淑拉进去做直销傻傻买不出货于想卖给东奎东奎发现这非法直销带秀荷去找对方理论却被对方暴打一顿获得营救后秀荷对东奎好感直增对东奎坦言因为需要钱所以才去做直销东奎劝不通人事秀荷回花安堂静淑因为直销欠债了鼓励秀荷和自己一起参加TOP集团模特竞赛以赢取1亿总奖金灿民和东奎作为模特选拔评委花兰(延美珠饰)和秀荷同时入选但走台时候秀荷衣服却突然脱落花兰赢得了比赛之一名东奎赶忙寻找秀荷带着修缮材料来到花安堂秀荷让东奎别修了赶紧走却被爷爷教训东奎安慰秀荷两人关系改善
你好,**分集剧情介绍 第3集 搜视网tvsoucom
贞淑随TOP公司梦幻身材体验团运动时晕倒担心此事央及公司产品李明淑理事找到医院傲慢地欲以钱息事宁人被秀荷拒绝贞淑与李理事撕打成一团时栋奎赶到不由分说地责备秀荷一通秀荷又气又委屈对栋奎也失望之极愤愤地哭着离开
秀荷到小摊上借酒消愁栋奎态度让耿耿于怀栋奎回公司得知原来误会了秀荷找秀荷道歉贞淑家门口栋奎等到了喝得迷迷糊糊秀荷但秀荷根本不接受道歉情急之下栋奎告白说喜欢上了秀荷秀荷怔住继而认为栋奎拿开涮气哼哼地回家
第二天不了解真相灿民向心神不宁栋奎献计:打 *** 确认一下那个女孩态度栋奎刚拔通 *** 就听到了秀荷求救原来贞淑正遭遇高利贷逼债秀荷出面替贞淑做债务担保栋奎派人也及时赶到危机化解
秀荷和贞淑有机会到TOP公司上班灿民不断找机会接近秀荷常遭秀荷白眼高利贷人找到花安堂秀荷为此心事重重上班时秀荷向栋奎提出要向公司贷款栋奎安排把自己钱佯装成公司贷款借给尚不够贷款条件秀荷……
你好,**分集剧情介绍 第4集 搜视网tvsoucom
公司安排秀荷与花兰共同代言公司产品花兰挑唆下灿民女友不问青红皂白地找秀荷打架栋奎赶来拉走了狼狈秀荷弄清秀荷没有与灿民恋爱后才算放心
会长爷爷召集全家人为此事开会栋奎突然带来秀荷宣布两人正式交往爷爷搞明白原来只栋奎一厢情愿但听说秀荷花安堂宗家**爷爷下令东奎必须追到秀荷否则逐出公司
栋奎推荐公司到花安堂拍广告追秀荷谈何容易不过栋奎偶而也会自己表现小小得意一把灿民也加紧对秀荷攻势略施小计让要回花安堂秀荷搭了车此事让栋奎心里很不爽灿民花安堂也卖力地表现后到栋奎也毫不示弱
拍广告时花兰母亲认女导致花兰摔伤住院不得已秀荷接替拍摄宗家**气质果然不同凡响公司决定此次广告由秀荷一人完成花兰暗自发誓绝不放过秀荷秀荷去看花兰不成心情糟糕栋奎想安慰反而搞得秀荷伤心痛哭而灿民却有办法让刚哭过秀荷心情转好
爷爷再次催促栋奎追到秀荷还限定了时间栋奎回家苦学恋爱之道打算第二天实践一回但刚刚接完栋奎 *** 秀荷家门口遭人劫持……
你好,**分集剧情介绍 第5集 搜视网tvsoucom
一辆车劫持秀荷而去!原来有人把秀荷参加模特选拔时录像带送到族中长辈那里长辈们不满秀荷作为派人把带回花安堂长辈们责令秀荷辞去工作秀荷不同意被关进仓房
长辈们 *** 下TOP集团只好放弃花安堂拍摄广告李理事从这件事中察觉出会长对秀荷关照有加调查后发现会长与花安堂渊源打起了让儿子灿民娶秀荷、接管TOP集团算盘
经会长爷爷指点栋奎乔装混入花安堂准备英雄救美栋奎到来使秀荷不再担心公司事而秀荷敢作敢当女中丈夫作为也让栋奎刮目相看栋奎帮助下秀荷离开仓房说服长辈由来处理与公司间事其实录像带事件花兰从中捣鬼
秀荷重回公司上班出人意料地被任命为灿民秘书到任伊始灿民就带换发型、买服装……秀荷变得美丽又时尚栋奎见了危机感顿生求助于爷爷爷爷帮栋奎策划:周末一定要带秀荷参加岛上派对栋奎硬着头皮去请秀荷做女伴听说工作秀荷欣然接受……
你好,**分集剧情介绍 第6集 搜视网tvsoucom
灿民门外恰好听到秀荷表态愿意栋奎恋人误以为真醋意十足地打 *** 干扰二人栋奎不得以对秀荷贬低灿民事后又后悔不迭明知秀荷故意隐瞒情场高手灿民带秀荷去 *** 听到秀荷亲口证实与栋奎没有任何关系灿民趁机让秀荷做女人
秀荷陪同栋奎前往岛上 “公干”然而岛上空无一人栋奎发现上当无奈已无返程船两人乖乖落入爷爷计谋中:共处一室喝光秘酒……第二天早晨衣杉不整秀荷醒来把晚上事忘得一干二净反而冤枉坐怀不乱栋奎对图谋不轨气哼哼地一人返回首尔
星期一不见秀荷上班灿民猜出爷爷策划了栋奎与秀荷约会径直向爷爷提出要与栋奎公平竞争爷爷虽然有心袒护栋奎但灿民要求合情合理灿民趁热打铁鼓动爷爷马上去花安堂
秀荷使出苦肉计依然没能阻止黄会长抵达花安堂见到当年盗牛贼炳泰立刻操起镰刀追杀幸好栋奎赶到替爷爷挡了一刀返回首尔路上秀荷突然记起那晚岛上事羞愧得无地自容
花安堂之行孙子面前颜面尽失会长病倒了对全家人宣布:能拿到花安堂孙子将继承TOP集团而秀荷竟盗牛贼公司上班!族中长辈要以俊英取代秀荷做宗孙秀荷很伤心……
你好,**分集剧情介绍 第7集 搜视网tvsoucom
胸有成竹灿民鼓励一脸哭相栋奎加油兄弟二人由暗斗转为明争爷爷其实心里还偏向一手带大栋奎
有善解人意哥哥俊英和开心果朋友贞淑秀荷心中抑郁很快烟消云散第二天灿民一大早来到公司着手实施赢取芳心计划巧妙安排秀荷发挥特长赛马场接待日本客户果然做到了生意谈情两不误包下游乐船上灿民与秀荷音乐中品尝牛排美味
栋奎则爷爷启发下去花安堂笼络长辈们心赔尽小心又跳皮筋又买电视总算得到花安堂人认可但接下来霉运连连:笼络人心计划被秀荷听到;侥幸可以不用搬走送来东西且有望吃上滋补佳品特色鸡却因为抓鸡打碎了秀荷宝贝酱油坛子惹得秀荷大哭;更倒霉对鸡中原料过敏长出满脸包包
夜里栋奎过敏奇痒难忍秀荷为扇扇子两人都思念起曾这样照顾过自己母亲返程车上秀荷向栋奎讲起妈妈……
回到家秀荷给爸爸做了妈妈常为爸爸包泡菜饺子然而却因此与首尔妈妈发生冲突秀荷大哭着跑出家门恰好灿民来到轻轻地为擦去眼泪栋奎也此时赶到看到有人与秀荷亲密飞奔过来挥拳打去……
你好,**分集剧情介绍 第8集 搜视网tvsoucom
栋奎也挨了非礼秀荷“坏蛋”一拳定睛一看“坏蛋”竟然灿民!兄弟二人相互抱怨中秀荷悄悄离开又俊英和贞淑安慰了伤心秀荷第二天灿民和栋奎花着脸去上班不过这对拳脚相向兄弟依旧友爱如昔
爷爷听闻兄弟俩为秀荷打架设计让二人与秀荷一同吃饭结果秀荷对二人更加失望还灿民技高一筹有办法让秀荷放弃步行改坐车栋奎只好乖乖腾出前排位置
会长爷爷对食品产业情有独钟因为花安堂李鹤奶奶不惜钱财买了高档电器前去赞助村里歌唱大会秀荷等三人听说担心上次会长被打事重演急忙赶回花安堂其实会长此次受到里长礼遇
因为村里传出要开发风声秀荷把地契藏进了花兰妈妈拿出枕头里其实策划铲平花安堂人花兰再度来村头搞开发调查无人场情况下花兰告诉疯妈妈只要花安堂不存就可以和妈妈一起生活
歌唱大会上会长道歉话正要出口时灿民拔掉了麦克电源花安堂族中长辈以为会长无诚意气愤地拂袖而去们再次到花安堂找秀荷问罪突然门外有人砸门秀荷开门惊讶地听到喝醉了会长称为孙媳……
hello body 读作 ['heləʊ 'bɒdi],但向 body (身体) 打招呼有些莫名其妙,大概是 Hello, everybody (['heləʊ 'evribɒdi] 大家好) 吧。
前言
Koa 2x 版本是当下更流行的 Node *** 框架, Koa 20 的源码特别精简,不像 Express 封装的功能那么多,所以大部分的功能都是由 Koa 开发团队(同 Express 是一家出品)和社区贡献者针对 Koa 对 Node *** 的封装特性实现的中间件来提供的,用法非常简单,就是引入中间件,并调用 Koa 的 use *** 使用在对应的位置,这样就可以通过在内部操作 ctx 实现一些功能,我们接下来就讨论常用中间件的实现原理以及我们应该如何开发一个 Koa 中间件供自己和别人使用。
Koa 的洋葱模型介绍
我们本次不对洋葱模型的实现原理进行过多的刨析,主要根据 API 的使用方式及洋葱模型分析中间件是如何工作的。
洋葱模型特点
// 引入 Koa
const Koa = require("koa");
// 创建服务
const app = new Koa();
appuse(async (ctx, next) => {
consolelog(1);
await next();
consolelog(2);
});
appuse(async (ctx, next) => {
consolelog(3);
await next();
consolelog(4);
});
appuse(async (ctx, next) => {
consolelog(5);
await next();
consolelog(6);
});
// 监听服务
applisten(3000);
// 1
// 3
// 5
// 6
// 4
// 2
我们知道 Koa 的 use *** 是支持异步的,所以为了保证正常的按照洋葱模型的执行顺序执行代码,需要在调用 next 的时候让代码等待,等待异步结束后再继续向下执行,所以我们在 Koa 中都是建议使用 async/await 的,引入的中间件都是在 use *** 中调用,由此我们可以分析出每一个 Koa 的中间件都是返回一个 async 函数的。
koa-bodyparser 中间件模拟
想要分析 koa-bodyparser 的原理首先需要知道用法和作用, koa-bodyparser 中间件是将我们的 post 请求和表单提交的查询字符串转换成对象,并挂在 ctxrequestbody 上,方便我们在其他中间件或接口处取值,使用前需提前安装。
npm install koa koa-bodyparser
koa-bodyparser 具体用法如下:
koa-bodyparser 的用法
const Koa = require("koa");
const bodyParser = require("koa-bodyparser");
const app = new Koa();
// 使用中间件
appuse(bodyParser());
appuse(async (ctx, next) => {
if (ctxpath === "/" && ctxmethod === "POST") {
// 使用中间件后 ctxrequestbody 属性自动加上了 post 请求的数据
consolelog(ctxrequestbody);
}
});
applisten(3000);
根据用法我们可以看出 koa-bodyparser 中间件引入的其实是一个函数,我们把它放在了 use 中执行,根据 Koa 的特点,我们推断出 koa-bodyparser 的函数执行后应该给我们返回了一个 async 函数,下面是我们模拟实现的代码。
文件:my-koa-bodyparserjs
const querystring = require("querystring");
moduleexports = function bodyParser() {
return async (ctx, next) => {
await new Promise((resolve, reject) => {
// 存储数据的数组
let dataArr = [];
// 接收数据
ctxreqon("data", data => dataArrpush(data));
// 整合数据并使用 Promise 成功
ctxreqon("end", () => {
// 获取请求数据的类型 json 或表单
let contentType = ctxget("Content-Type");
// 获取数据 Buffer 格式
let data = Bufferconcat(dataArr)toString();
if (contentType === "application/x-www-form-urlencoded") {
// 如果是表单提交,则将查询字符串转换成对象赋值给 ctxrequestbody
ctxrequestbody = querystringparse(data);
} else if (contentType === "applaction/json") {
// 如果是 json,则将字符串格式的对象转换成对象赋值给 ctxrequestbody
ctxrequestbody = *** ONparse(data);
}
// 执行成功的回调
resolve();
});
});
// 继续向下执行
await next();
};
};
在上面代码中由几点是需要我们注意的,即 next 的调用以及为什么通过流接收数据、处理数据和将数据挂在 ctxrequestbody 要在 Promise 中进行。
首先是 next 的调用,我们知道 Koa 的 next 执行,其实就是在执行下一个中间件的函数,即下一个 use 中的 async 函数,为了保证后面的异步代码执行完毕后再继续执行当前的代码,所以我们需要使用 await 进行等待,其次就是数据从接收到挂在 ctxrequestbody 都在 Promise 中执行,是因为在接收数据的操作是异步的,整个处理数据的过程需要等待异步完成后,再把数据挂在 ctxrequestbody 上,可以保证我们在下一个 use 的 async 函数中可以在 ctxrequestbody 上拿到数据,所以我们使用 await 等待一个 Promise 成功后再执行 next 。
koa-better-body 中间件模拟
koa-bodyparser 在处理表单提交时还是显得有一点弱,因为不支持文件上传,而 koa-better-body 则弥补了这个不足,但是 koa-better-body 为 Koa 1x 版本的中间件, Koa 1x 的中间件都是使用 Generator 函数实现的,我们需要使用 koa-convert 将 koa-better-body 转化成 Koa 2x 的中间件。
npm install koa koa-better-body koa-convert path uuid
koa-better-body 具体用法如下:
koa-better-body 的用法
const Koa = require("koa");
const betterBody = require("koa-better-body");
const convert = require("koa-convert"); // 将 koa 10 中间转化成 koa 20 中间件
const path = require("path");
const fs = require("fs");
const uuid = require("uuid/v1"); // 生成随机串
const app = new Koa();
// 将 koa-better-body 中间件从 koa 10 转化成 koa 20,并使用中间件
appuse(convert(betterBody({
uploadDir: pathresolve(__dirname, "upload")
})));
appuse(async (ctx, next) => {
if (ctxpath === "/" && ctxmethod === "POST") {
// 使用中间件后 ctxrequestfields 属性自动加上了 post 请求的文件数据
consolelog(ctxrequestfields);
// 将文件重命名
let imgPath = ctxrequestfieldsavatar[0]path;
let newPath = pathresolve(__dirname, uuid());
fsrename(imgPath, newPath);
}
});
applisten(3000);
上面代码中 koa-better-body 的主要功能就是将表单上传的文件存入本地指定的文件夹下,并将文件流对象挂在了 ctxrequestfields 属性上,我们接下来就模拟 koa-better-body 的功能实现一版基于 Koa 2x 处理文件上传的中间件。
文件:my-koa-better-bodyjs
const fs = require("fs");
const uuid = require("uuid/v1");
const path = require("path");
// 给 Buffer 扩展 split *** 预备后面使用
Bufferprototypesplit = function (sep) {
let len = Bufferfrom(sep)length; // 分隔符所占的字节数
let result = []; // 返回的数组
let start = 0; // 查找 Buffer 的起始位置
let offset = 0; // 偏移量
// 循环查找分隔符
while ((offset = thisindexOf(sep, start)) !== -1) {
// 将分隔符之前的部分截取出来存入
resultpush(thisslice(start, offset));
start = offset + len;
}
// 处理剩下的部分
resultpush(thisslice(start));
// 返回结果
return result;
}
moduleexports = function (options) {
return async (ctx, next) => {
await new Promise((resolve, reject) => {
let dataArr = []; // 存储读取的数据
// 读取数据
ctxreqon("data", data => dataArrpush(data));
ctxreqon("end", () => {
// 取到请求体每段的分割线字符串
let bondery = `--${ctxget("content-Type")split("=")[1]}`;
// 获取不同系统的换行符
let lineBreak = processplatform === "win32" "\r\n" : "\n";
// 非文件类型数据的最终返回结果
let fields = {};
// 分隔的 buffer 去掉没用的头和尾即开头的 '' 和末尾的 '--'
dataArr = dataArrsplit(bondery)slice(1, -1);
// 循环处理 dataArr 中每一段 Buffer 的内容
dataArrforEach(lines => {
// 对于普通值,信息由包含键名的行 + 两个换行 + 数据值 + 换行组成
// 对于文件,信息由包含 filename 的行 + 两个换行 + 文件内容 + 换行组成
let [head, tail] = linessplit(`${lineBreak}${lineBreak}`);
// 判断是否是文件,如果是文件则创建文件并写入,如果是普通值则存入 fields 对象中
if (headincludes("filename")) {
// 防止文件内容含有换行而被分割,应重新截取内容并去掉最后的换行
let tail = linesslice(headlength + 2 lineBreaklength, -lineBreaklength);
// 创建可写流并指定写入的路径:绝对路径 + 指定文件夹 + 随机文件名,最后写入文件
fscreateWriteStream(pathjoin(__dirname, optionsuploadDir, uuid()))end(tail);
} else {
// 是普通值取出键名
let key = headmatch(/name="(\w+)"/)[1];
// 将 key 设置给 fields tail 去掉末尾换行后的内容
fields[key] = tailtoString("utf8")slice(0, -lineBreaklength);
}
});
// 将处理好的 fields 对象挂在 ctxrequestfields 上,并完成 Promise
ctxrequestfields = fields;
resolve();
});
});
// 向下执行
await next();
}
}
上面的内容逻辑可以通过代码注释来理解,就是模拟 koa-better-body 的功能逻辑,我们主要的关心点在于中间件实现的方式,上面功能实现的异步操作依然是读取数据,为了等待数据处理结束仍然在 Promise 中执行,并使用 await 等待,Promise 执行成功调用 next 。
koa-views 中间件模拟
Node 模板是我们经常使用的工具用来在服务端帮我们渲染页面,模板的种类繁多,因此出现了 koa-view 中间件,帮我们来兼容这些模板,先安装依赖的模块。
npm install koa koa-views ejs
下面是一个 ejs 的模板文件:
文件:indexejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ejs</title>
</head>
<body>
<%=name%>
<%=age%>
<%if (name=="panda") {%>
panda
<%} else {%>
shen
<%}%>
<%arrforEach(item => {%>
<li><%=item%></li>
<%})%>
</body>
</html>
koa-views 具体用法如下:
koa-views 的用法
const Koa = require("koa");
const views = require("koa-views");
const path = require("path");
const app = new Koa();
// 使用中间件
appuse(views(pathresolve(__dirname, "views"), {
extension: "ejs"
}));
appuse(async (ctx, next) => {
await ctxrender("index", { name: "panda", age: 20, arr: [1, 2, 3] });
});
applisten(3000);
可以看出我们使用了 koa-views 中间件后,让 ctx 上多了 render *** 帮助我们实现对模板的渲染和响应页面,就和直接使用 ejs 自带的 render *** 一样,并且从用法可以看出 render *** 是异步执行的,所以需要使用 await 进行等待,接下来我们就来模拟实现一版简单的 koa-views 中间件。
文件:my-koa-viewsjs
const fs = require("fs");
const path = require("path");
const { promisify } = require("util");
// 将读取文件 *** 转换成 Promise
const readFile = promisify(fsradFile);
// 到处中间件
moduleexports = function (dir, options) {
return async (ctx, next) => {
// 动态引入模板依赖模块
const view = require(optionsextension);
ctxrender = async (filename, data) => {
// 异步读取文件内容
let tmpl = await readFile(pathjoin(dir, `${filename}${optionsextension}`), "utf8");
// 将模板渲染并返回页面字符串
let pageStr = viewrender(tmpl, data);
// 设置响应类型并响应页面
ctxset("Content-Type", "text/html;charset=utf8");
ctxbody = pageStr;
}
// 继续向下执行
await next();
}
}
挂在 ctx 上的 render *** 之所以是异步执行的是因为内部读取模板文件是异步执行的,需要等待,所以 render *** 为 async 函数,在中间件内部动态引入了我们使的用模板,如 ejs ,并在 ctxrender 内部使用对应的 render *** 获取替换数据后的页面字符串,并以 html 的类型响应。
koa-static 中间件模拟
下面是 koa-static 中间件的用法,代码使用的依赖如下,使用前需安装。
npm install koa koa-static mime
koa-static 具体用法如下:
koa-static 的用法
const Koa = require("koa");
const static = require("koa-static");
const path = require("path");
const app = new Koa();
appuse(static(pathresolve(__dirname, "public")));
appuse(async (ctx, next) => {
ctxbody = "hello world";
});
applisten(3000);
通过使用和分析,我们知道了 koa-static 中间件的作用是在服务器接到请求时,帮我们处理静态文件,如果我们直接访问文件名的时候,会查找这个文件并直接响应,如果没有这个文件路径会当作文件夹,并查找文件夹下的 indexhtml ,如果存在则直接响应,如果不存在则交给其他中间件处理。
文件:my-koa-staticjs
const fs = require("fs");
const path = require("path");
const mime = require("mime");
const { promisify } = require("util");
// 将 stat 和 access 转换成 Promise
const stat = promisify(fsstat);
const access = promisify(fsaccess)
moduleexports = function (dir) {
return async (ctx, next) => {
// 将访问的路由处理成绝对路径,这里要使用 jo
hello everybody和hello everyone用法上的区别为:用法不同、侧重点不同、使用场合不同。
一、用法不同
1hello everybody用法:大家好
例句:
Hello everybody, I think on English
大家好,我想月英语。
2hello everyone用法:各位好
例句:
Hello everyone, I'm Jane
大家好,我是简。
二、侧重点不同
1hello everybody侧重点:在反意疑问句中,如果含意相当于汉语的“人人”,表示 *** 的而不是个别的意味,附加疑问句的代词。
2hello everyone侧重点:作主语时,一般与单数谓语动词连用,但在俗语中,谓语动词有时也用复数。
三、使用场合不同
1hello everybody使用场合:则指“每个人”,着重于“整体”。
2hello everyone使用场合:意思是“每个人”,不指具体哪个人,而是强调整体。
hellobodydocx是微软Word的文件扩展名。根据查询相关 *** 息显示,docx是MicrosoftOffice2007之后版本使用的文件扩展名,用新的基于XML的压缩文件格式取代了其目前专有的默认文件格式,在传统的文件名扩展名doc后面添加了字母x。