2020-04-30

普通二本从小白到加入鹅厂的通关秘籍

普通二本从小白到加入鹅厂的通关秘籍


前言

本文是给想进入“BAT”等企业的开发朋友们提供思路的,内容全部来自于真实经历。

关于我(化名)

大家好,我是小白(化名),一名 iOS 开发工程师。

有些人在毕业的时候就能顺利进入“BAT”、“TMD”、“FLAG”,但是更多的人并没有这个机会,比如,最典型的——我。

努力就能改变命运。这是真的吗?

在我看来,虽然我不是特别聪明(但也不笨),但是努力确实给我带来了更多的机会。通过努力,我顺利拿到大厂offer,相信此时正在看这篇文章的你也一定可以的。

所以,无论你是想跳槽去大厂的工作党,还是即将毕业找工作的应届生,如果你想要进大厂却不知从何着手,希望你能将这篇文章反复看几遍,根据本文的内容找到正确且适合自己的方法,努力打磨,然后坚持坚持再坚持,我相信你一定能拿到大厂的offer。

颓废的校园经历

我毕业于一所普通的二本院校,大学时曾梦想成为学霸,幻想进入 BAT 大企业。然而,现实啪啪打脸,学渣一名。毕业的第一天,就成为一名待业状态的社会人。

曾经的我就是现实版的“余欢水”:“努力”地活着,却总是被生活“欺骗”。

上大学时,兴趣广泛,但叶公好龙,无一擅长; 我想要成为学霸、有所成就,但好高骛远,无所作为; 毕业那年考研,顺利落榜; 后来痛定思痛,背水一战,参加公务员考试,意外通过笔试,却惜败在面试。

那一年,我深刻地感受到 世界辣么大,却没有我的容身之处。

 

初入职场

迫于生活压力,在亲戚的介绍下,我进入深圳的一家创业公司做 iOS 开发。

由于我技术比较菜,工资只有 5k。当时我连 UITableView 的代理方法都不会用,UIView 的 frame 都不会设置,每次参加需求讨论会的时候,都插不进话,因为我都不是很懂啊。

实在要发言时,却也只能附和安卓的同事,说:俺也一样。

 

如果连最简单的业务需求都不能完成,是要被开的,所以当时的我就是处于被开的边缘。 迫于工作压力,我必须花额外的时间把基础知识都弄懂。

但是,因为虚荣心作祟,我又不想被同事说我太菜,所以每天选择在同事们下班后,一个人在公司疯狂学习。 如果别人正点下班,我就“996”; 如果别人"996",我就"10106"。

功夫不负有心人,三个月左右,我就能胜任独立模块的开发了。为了向进阶发展,我看完了《Effective Objective-C》、《Core Animations》等当年市面上所有的 iOS 书籍和技术文章,并及时地把一些高级技巧在项目中实践。

由于在公司表现良好(可能是加班比较多😂),领导给我涨薪到 8k。但是我觉得当时我的水平最起码能够得上 12k 以上。在这家公司干满一年后,我决定跳槽了。那年是 2015 年。

职场进阶

2015 年 iOS 的行情还不错,趁热打铁,我自己投简历面试,很轻松就进入一家 Top 10 的金融互联网公司。

大公司的分工更细,流程更规范,我在这里待了两年,时刻保持一颗学习的心态。

在这两年中 iOS 开发的大环境已经出现了拐点,由于开发者数量供大于求,整体上找工作的情况不如之前。 为了让自己不掉队,我复制在我在上家公司的成长模式——疯狂学习。

我研究并实践了当时社区比较流行的技术,比如 RAC、RxSwift、逆向开发、组件化等等。但我明白,由于我大学时候基础太差,离去一线互联网大厂的水平还有差距。

 

 

加入鹅厂

有一天,我收到猎头的电话,问我是否考虑腾讯?我欣然答应,沉睡在我心中多年的幻想又被唤醒。

然而想进入大厂没那么容易,需要对面试做系统性的准备。

我开始利用业余时间夯实面试需要的基础知识,经过大概三个月的准备,通过了五轮面试,终于顺利加入鹅厂!

下面我把准备面试的经验分享给大家(为了尊重公司,我不能把原题告诉大家,但我会把方向告诉大家,因为方向里自然有“题库”),分为基本功、软实力、加分项三个方面。下面一个个来说。

基本功

所谓基本功,就是你需要练到有肌肉记忆的技能,当面试官问起的时候,你能够信手拈来。

简历基本功

简历的好坏决定第一印象。

很多人可能技术很牛逼,却没能获得面试机会,就是吃在简历的亏上。比如,错别字连天、排版混乱、语句冗余不通顺。下面是我总结出的要点:

排版

我走的是极简风格,直接使用 Markdown 进行书写,然后转换为 PDF 格式。

作为一个 GUI 开发者,你也可以把简历制作成一个静态页面,加上漂亮的动画效果,来展示你优秀的基本功,给面试官眼前一亮的赶脚。比如,我的一位朋友就是这样制作简历的,当时也顺利地通过了面试。

书写逻辑

请遵循“STAR”法则。即情境(situation)、任务(task)、行动(action)、结果(result)。

比如,“为解决项目中遗留的回调地狱和内存问题,我用了 RxSwift 重构了 XX 模块,在团队内普及了响应式编程思想,受到了团队成员的一致好评”。这通常也是面试官提问的逻辑。

技术内容

1:底层探索能力

很多人会讽刺:面试造航母,上班拧螺丝! 其实不然,面试的高要求对于一家优秀的iOS需求单位来说是必须的!

  • iOS开发实现的确有很多的方式,但是一个真正懂得原理的开发人员在日后的开发工作中是非常重要。我见过一些开发人员:遇到BUG都是直接面向百度,不知道为什么直接 command + c/command + V OK,解决了,打版走人,下次又遇到了还是要面向百度,其中浪费的时间和小伙伴之间的沟通成本可想而知!

  • 底层原理只是你在工作开发中偷懒而逃避选择使用而已(或者全然不太了解)

  • 技术不断更新,底层原理是永恒根基

  • 底层原理是非常重要的,只有真正掌握原理才能迎接未来无限可能。

下面是我推荐大家学习的内容:

 

OC 底层探索篇也是大家熟悉而又陌生的地方,平时处处用,就是不知道为什么!

2.性能优化以及架构能力

只要你面试要求 20-30K 必然要求性能优化能力!

  • 怎么优化启动速度,应用包的瘦身!

  • 界面优化(卡顿检测以及分析解决)

  • 内存管理方面也是面试以及平时开发的重灾区!

  • 架构并不属于性能优化,但是我要求每一个 3以上开发 都要有一定的架构思维!

 image
3.数据结构算法
 

数据结构算法应该是每一个程序员必备的根据。我记得我的导师跟我说过:一个程序员需要两样东西:智商和勤奋

  • 英文能力衬托你的勤奋度

  • 数据结构算法反馈你的智商等级

数据结构与算法并不只是抽象的概念,掌握好的话可以写出更高效、运行得更快的代码,这对于如今盛行的网页和移动应用开发来说尤为重要。如果你最近一次使用算法是在大学课堂上或求职面试时,那你应该还没见识到它的真正威力!

这个主题的大多数资料都有一种通病——晦涩难懂。满纸的数学术语,我觉得一种有趣的学习方式也是非常重要的!

跨平台能力

跨平台的方案有很多:

 

如上表所示,RNWeex采用的技术方案大体相同,它们都使用JavaScript作为编程语言,然后通过中间层转换为原生的组件后再利用Native 渲染引擎执行渲染操作。而 Flutter 直接使用 skia 来渲染视图,而Flutter Widget则使用现代响应式框架来构建,和平台没有直接的关系。

从性能方面来说,Flutter 的性能理论上是最好的,RNWeex次之,并且都好于传统的 WebView方案

而从社群和社区的活跃来看,RN和Flutter无疑是最活跃的

总结:我个人针对现在的行情比较推荐大家学习:Flutter

 
  • 同时现在很多人也开始着手学习了

  • 如何衬托你的优势,我个人还要推荐在平时入门到项目的过程,不妨花点时间探索了一下背后的原理:渲染的流程,Flutter和原生的共存通讯优化

  • 下面这张思维导图大家可以参考学习

 

软实力

沟通能力

我用四个词来概括: 自信、流畅、耐心、礼貌。

很多小伙伴可能编码技能不错,却不能在面试中表达出来。

在面试过程中,无论面试环境怎样,面试官态度如何,你都要保持积极的态度。请记住,你是在求职,就要创造一切对你有利的因素。

比如,你可以与面试官主动握手,增加好感。

如果面试官问你的问题,你刚好不会,也要尽可能列举这个问题相关的概念,然后推测出这个问题的答案。

比如,面试官问,二进制重排的原理是什么?

假设你刚好不知道这个知识点,你可以答 App 启动前 dyld 相关的概念或者说一下 Mach-O 二进制格式的原理,来推测可能的二进制的重排机制,即使推测错了也没有关系,因为在这个过程中至少展示了你积极解决问题的能力。

当然,如果连相关概念也想不出来,那就诚实地回答不知道或者向面试官请教一下吧。

逆商能力

作为开发人员,难免会在工作中与各种人撕B,能够扛过这些压力,也是一项重要的素质。

比如,面试官问,你的学历背景一般,学校排名靠后,和211、985的毕业生竞争有什么优势?

那你要怎么作答?

如果你是一个心理素质不好的面试者,很可能就会支支吾吾或者愤而离场了。 相反,你应该不卑不亢,冷静作答,因为这恰恰可能是某些面试官看好你的信号。 通过压力面试给你最后的考验,所以千万不要失之交臂。

作答举例:

虽然我的学历不是211、985,但是我仍然通过了前面的技术面试,说明了贵司对我的技术实力的认可; 学历证明了过往的学习能力,我是普通本科,却能与211、985的毕业生同台竞争,说明我的学习能力并不输给他们。

加分项

现在的iOS开发为什么会遇到瓶颈是因为:前面储备过少,坐吃山空! 技术不断更新的时代,我希望你沉下心来与时俱进,不断储备技能为自己加分

其实这里并没有非常具体的推荐学习方向,总的如下几点!

  • 5G时代,小视屏/直播技术都是现在当红,并且掌握人群非常少的技术,OpenGL ES、Metal、FFmpeg等等!

  • 而应用逆向安全,是大部分大厂都一直重视的,只是在小公司突显不出来,如果对于大厂有想法的,可以尝试学习!
    当然除了跟iOS有关系的,比如被炒火的Python,谣传比iOS好找工作的前端等等都是可以学习的!
    技术储备和亮点,这些都得根据个人兴趣或者公司需求来进行学习,当然越多的储备就会使你后面的路走的越容易!

后记

现在很多大公司招人已经明确限制需要 211、985 的学历,而对于我们大多人这种双非二本学历,连敲门砖都木有。但是,能否拿到 offer,除了真的很幸运,也和本身的努力分不开。

推荐👇:

  • 020 持续更新,精品小圈子每日都有新内容,干货浓度极高。

  • 结实人脉、讨论技术 你想要的这里都有!

  • 抢先入群,跑赢同龄人!(入群无需任何费用)

  • (直接搜索群号:789143298,快速入群)
  • 点击此处,与iOS开发大牛一起交流学习

申请即送:

  • BAT大厂面试题、独家面试工具包,

  • 资料免费领取,包括 数据结构、底层进阶、图形视觉、音视频、架构设计、逆向安防、RxSwift、flutter,

     

MacBook下载和编译Android AOSP源码

MacBook下载和编译Android AOSP源码


一、安装

0.国内镜像

首先,推荐两个地方,也就是国内镜像来下载源码,强烈建议你看完,因为都一样的
科大源、清华源
注意事项:如果你不编译源代码,装源代码的磁盘格式,是任何格式都可以,但是你如果要在MacBook上编译源代码,那必须把磁盘格式变成Mac的日志格式,区分大小写的,也就是这个格式:
图片.png

1.安装repo和Git

Git的话,就自行搜素怎么安装了,这里介绍怎样安装repo。

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

运行 repo help可能会报错,或者有提示没有获得完整版
问题1.提示没有获得完整版
图片.png
问题2.提示没有这个命令
图片.png
解决第一个问题:
所以,要下载两个文件
第一个就是clone.bundle https://gerrit.googlesource.com/git-repo/clone.bundle
第二个就是git-repo https://gerrit.googlesource.com/git-repo
将clone.bundle复制到git-repo文件夹中
然后把git-repo这个文件夹中的所有文件都复制到上面创建的~/bin/目录下
然后执行下面的代码(其实这个已经解决了第二个问题,每次更换操作目录的时候,要得到repo的命令,都要执行这两个方法)

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc export PATH=$PATH:$HOME/bin 

再执行:repo init
得到这个界面
图片.png

然后查看repo的版本,执行:repo version
图片.png
到这里,repo就已经完整地安装完毕啦。

2.下载源码

然后就是开始下载源代码了
然后创建一个存放源代码的目录

mkdir AndroidSourcecd AndroidSource

然后呢老规矩,还是要每次用repo之前都要执行(这个暂时还没办法解决)

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc export PATH=$PATH:$HOME/bin 

然后执行

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

用来初始化代码目录。
得到这个界面
图片.png
成功了就是这样。到这里,已经得到AOSP源码的主分支,然后你想下载其他分支,就是其它版本的代码,你可以切换到其它版本。

cd .repo/manifestsgit branch -a | cut -d / -f 3 

这样就可以得到所有的版本,我这里选择了,android-10.0.0_r33这个版本,回到AOSP目录下,执行代码
repo init -b android-10.0.0_r33这样就切换到这个分支了,下载的也是Android10.0的代码,你也可以不切换,默认下载主分支,最新的代码,但我不建议这样做,因为后续可能会发生一些不可知的错误。
当然,在上一步初始化代码的时候,你已经知道你要下载哪个分支了,就可以直接以下代码:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r33

图片.png
然后开始同步代码:

repo sync

然后就开始同步代码,看到网速了吧,已经在开始同步了,看网速,我这里下载了五六个小时,网速还是不给力的。

图片.png

二、编译

1.机器

MacBook Pro

图片.png

2.JDK环境

查看JDK的安装位置
/usr/libexec/java_home
图片.png

在~/.bash_profile文件中配置JDK环境,
vim ~/.bash_profile 打开,加入你的JDK地址,配置JDK

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Homeexport JAVA_HOME=$JAVA_HOME

图片.png
source ~/.bash_profile 使得文件生效
echo $JAVA_HOME 输出JDK配置,看看是否生效
整个过程
图片.png

3.GCC环境

下载一个在终端下载一个gcc,就是命令:brew install gcc
或者下载软件Xcode就可以了。如果你没有brew命令,那就靠你自己解决搜索安装brew咯,这也是一个坑。

4.可提前解决的报错

报错1

图片.png
这个是因为我的分区不是Mac OS拓展(区分大小写)的分区,所以就报错了,因为的只有一块移动硬盘,又是exFat格式的,压缩卷不行,然后我格式化了移动硬盘,重新下载了一份代码,够刺激吧。

报错2

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

这个问题一直困扰着我,但是不知道怎么稀里糊涂地解决了,你可以尝试着执行以下代码:
就是增加java的堆内存,使得不会内存溢出

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"

报错3

图片.png
这里官方都有提示可以这样修改:
图片.png
就是修改目录下这个文件system/sepolicy/tests/Android.bp,去掉stl: "libc++_static"

报错4:
图片.png
这是因为没有对应版本的SDK,查看Mac版本,我这里是没有10.15
在这个文件里build/soong/cc/config/x86_darwin_host.go ,添加你对应的版本
图片.png

报错4

Permission denied
权限问题,把整个源码都获得权限就可以了chmod -R 777 AOSP

报错5

也不管啥报错了,要先安装port,然后再安装以下的内容:

sudo port install gmake git gnupgsudo port install bison

5.编译

一切操作都在你的根目录下面执行
切换到Android源码的目录下,执行这个文件envsetup.sh
source /Volumes/lanjiabin/AndroidSource/build/envsetup.sh
或者切换到build目录下,直接source envsetup.sh

执行lunch
会让选择启动器,我选了24 ,输入24,回车,就是这个效果
也可以直接:lunch 24
图片.png

然后开始编译代码make -j4
其中-j后面的表示开始4个线程进行进行编译.
根据你的CPU数量来算,我就两个,乘以2就可以了,所以我的是4
经过漫长的等待,和多次错误,我终于编译成功了,我这破电脑用了11个小时,太恐怖了,我看别人就一个小时就完事,我这差点崩溃
图片.png

然后再执行

.envsetup.shlunch 24emulator

再等一会,就可以看到自己的虚拟机在启动了
图片.png

好的,先告一段落。

编程中我们会遇到多少挫折?表放弃,沙漠尽头必是绿洲。


Async,Await 深入源码解析

Async,Await 深入源码解析


1.同步与异步

   假设存在

   IO事件A:请求网络资源 (完成耗时5s)

   IO事件B:查询数据库 (完成耗时5s)

   情况一:线程1工人在发起A请求后,一直阻塞等待,在A响应返回结果后再接着处理事件B,那总共需要耗时>10s.

   情况二:线程1工人在发起A请求后,马上返回发起B请求然后返回,5s后事件A响应返回,接着事件B响应返回,那总共需要耗时<10s.

   情况一就是同步的概念,而情况二就是异步的概念。细节会有所不同,但大致上可以这样理解。然而并不是所有情况适用异步,下面将会解释。

2.异步运行的顺序

   c#中的异步关键词是async与await,常常结合Task使用,如下面实例,看看它执行的情况

 static async Task Main(string[] args)  {   Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:MainStart"); //标记1   await SayHi();   Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:MainEnd"); //标记4  }  static async Task SayHi()  {   Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:SayHiStart"); //标记2   await Task.Delay(1000);   Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:SayHiEnd"); //标记3  }

 

结果:

1:MainStart
1:SayHiStart
5:SayHiEnd
5:MainEnd

 

c#7.1后的版本都支持异步main方法,程序执行的状况 

线程1->标记1,

线程1->标记2,

线程5->标记3

线程5->标记4

执行顺序如预期,而需要关注的是线程在执行期间的切换,在线程1执行完标记2后就已经返回,接着由线程5接管了后面代码逻辑的执行,那到底为什么会发生这样的情况?

答案是:编译器会自动地替我们完成了大量了不起的工作,下面接着来看看。

 

3.生成骨架与状态机

 编译器在遇到await关键字会自动构建骨架与生成状态机,按照以上例子来看看编译器做的工作有那些。

[DebuggerStepThrough]private static void <Main>(string[] args){ Main(args).GetAwaiter().GetResult();}[AsyncStateMachine((Type) typeof(<Main>d__0)), DebuggerStepThrough]private static Task Main(string[] args){ <Main>d__0 stateMachine = new <Main>d__0 {  args = args,  <>t__builder = AsyncTaskMethodBuilder.Create(),  <>1__state = -1 }; stateMachine.<>t__builder.Start<<Main>d__0>(ref stateMachine); return stateMachine.<>t__builder.get_Task();}[AsyncStateMachine((Type) typeof(<SayHi>d__1)), DebuggerStepThrough]private static Task SayHi(){ <SayHi>d__1 stateMachine = new <SayHi>d__1 {  <>t__builder = AsyncTaskMethodBuilder.Create(), //如果返回的是void builder为AsyncVoidMethodBuilder  <>1__state = -1  //状态初始化为-1 }; stateMachine.<>t__builder.Start<<SayHi>d__1>(ref stateMachine); //开始执行 传入状态机的引用 return stateMachine.<>t__builder.get_Task(); //返回结果}

1.编译器会自动生成void mian程序入口方法,它会调用async Task main方法。(所以说c#7.1支持异步main方法,其实只是编译器做了一点小工作)

2.main方法里的输出内容与调用SayHi方法代码消失了,取而代之的是编译器生成了骨架方法,初始化 <Main>d__0 状态机,把状态机的状态字段<>1__state

初始化为-1,builder为AsyncTaskMethodBuilder实例,接着调用builder的Start方法。

3.SayHi方法同2

接着看看AsyncTaskMethodBuilder的Start方法

[DebuggerStepThrough]public static void Start<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine: IAsyncStateMachine{ if (((TStateMachine) stateMachine) == null) {  ThrowHelper.ThrowArgumentNullException(ExceptionArgument.stateMachine); } Thread currentThread = Thread.CurrentThread; Thread thread2 = currentThread; ExecutionContext context2 = currentThread._executionContext; SynchronizationContext context3 = currentThread._synchronizationContext; try {  stateMachine.MoveNext(); //调用了状态机的MoveNext方法 } finally {  SynchronizationContext context4 = context3;  Thread thread3 = thread2;  if (!ReferenceEquals(context4, thread3._synchronizationContext))  {   thread3._synchronizationContext = context4;  }  ExecutionContext contextToRestore = context2;  ExecutionContext currentContext = thread3._executionContext;  if (!ReferenceEquals(contextToRestore, currentContext))  {   ExecutionContext.RestoreChangedContextToThread(thread3, contextToRestore, currentContext);  } }}

Start方法调用了状态机的MoveNext方法,是不是很熟悉?接下来看看状态机长什么样子。

[CompilerGenerated]private sealed class <Main>d__0 : IAsyncStateMachine{ // Fields public int <>1__state; public AsyncTaskMethodBuilder <>t__builder; public string[] args; private TaskAwaiter <>u__1; // Methods private void MoveNext() {  int num = this.<>1__state;  try  {   TaskAwaiter awaiter;   if (num == 0)   {    awaiter = this.<>u__1;    this.<>u__1 = new TaskAwaiter();    this.<>1__state = num = -1;    goto TR_0004;   }   else //1: <>1_state初始值为-1,所以先进到该分支,由线程1执行   {    Console.WriteLine($"{(int) Thread.get_CurrentThread().ManagedThreadId}:MainStart"); //标记1 //线程1执行 所以输出 1:MainStart    awaiter = Program.SayHi().GetAwaiter(); //重点:获取Taskd GetAwaiter方法返回TaskAwaiter    if (awaiter.IsCompleted) //重点:判断任务是否已经完成     {     goto TR_0004; //SayHi方法是延时任务,所以正常情况下不会跳进这里    }    else    {     this.<>1__state = num = 0; //赋值状态0     this.<>u__1 = awaiter;      Program.<Main>d__0 stateMachine = this;     this.<>t__builder.AwaitUnsafeOnCompleted<TaskAwaiter, Program.<Main>d__0>(ref awaiter, ref stateMachine); //重点:把TaskAwaiter与该状态机,线程1执行到这返回   
}
}
     return;
TR_0004:
awaiter.GetResult(); //重点:获取结果 由线程1执行或延时任务不定线程执行
Console.WriteLine($"{(int) Thread.get_CurrentThread().ManagedThreadId}:MainEnd"); //标记4 所以输出 5:MainEnd

this.<>1__state = -2; this.<>t__builder.SetResult();//设置结果
}
catch (Exception exception)
{
this.<>1__state = -2;
this.<>t__builder.SetException(exception); //设置异常
}
}
[DebuggerHidden] private void SetStateMachine(IAsyncStateMachine stateMachine) { } }

上面我圈了重点的是关于Task类型能实现async await的关键操作, 

1.线程1执行调用Task实例的GetAwaiter方法返回TaskAwaiter实例。

2.判断TaskAwaiter实例的IsCompleted属性是否完成,如果已完成,跳转到TR_0004,否则执行到AwaitUnsafeOnCompleted方法,线程1结束返回。

我们继续来看看AwaitUnsafeOnCompleted方法,没反编译出来,所以我们来看看与它类似的AwaitOnCompleted方法( AwaitUnsafeOnCompleted实际上会调用UnsafeOnCompleted方法)

public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter: INotifyCompletion where TStateMachine: IAsyncStateMachine{ try {  awaiter.OnCompleted(this.GetStateMachineBox<TStateMachine>(ref stateMachine).MoveNextAction); } catch (Exception exception1) {  Task.ThrowAsync(exception1, null); }}

 

看到这里是不是豁然开朗了

1.注册TaskAwaiter实例完成任务的回调方法,等任务完成后将会调用状态机的MoveNext方法,由上篇文章Task的启动方式知道后面的操作将会交由线程池的线程处理。所以标记3跟标记4将会在空闲的线程上执行。

2.<>1__state为0,跳到TR_0004执行,调用TaskAwaiter实例的GetResult()方法,执行await后面的代码,返回结果。

SayHi方法同上。

结论

编译器遇到await后会自动构建骨架与状态机,把await后面的代码挪到任务完成的后面继续执行。主线程第一次调用MoveNext方法时,如果任务已经完成会直接执行后面的操作,否则直接返回,不阻塞主线程的运行。后面的流程

将交由线程池来调度完成。

回到文章开头的问题,什么情况下不适用异步?

可以看出来,使用异步编译器会生成大量额外的操作,而不耗时或者CPU密集型工作使用异步就是添堵。

 

思考

是不是只有Task才能用async与await?

下一篇我将来探讨一下这个问题,感兴趣的小伙伴可以关注留意后续更新

有说得不对的地方欢迎大神指正,欢迎讨论,共同进步

 


实现NetCore3.1运行在DockeDesktop下并用Nginx实现负载均衡

实现NetCore3.1运行在DockeDesktop下并用Nginx实现负载均衡


一、首先去https://www.docker.com/products/docker-desktop下载Windows版本的Docker Desktop并安装(需要win10专业版以上操作系统,并启用CPU虚拟化和安装Hvper-V)。

二、新建一个.NetCore3.1的API项目,在创建的时候选中启用Docker支持。

三、写一个简单的响应输出

public IActionResult Hello()  {   return Content(JsonConvert.SerializeObject(new ContentModal{     Status = 1,    Code = 200,    Message = $"请求成功=>{Request.HttpContext.Connection.LocalIpAddress}:{Request.HttpContext.Connection.LocalPort}",    Content = "ok",   }), "application/json", Encoding.UTF8);  }

四、项目中的Dockerfile文件按以下内容完善(多余的可以删掉)

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS baseWORKDIR /appEXPOSE 8001EXPOSE 443COPY . .ENV ASPNETCORE_URLS ["dotnet", "weixinKey.dll"]

并且右键此DockerFile属性,如果较新则复制。

使用Release模式生成项目,管理员运行cmd,定位到当前项目的Release目录下的netcoreapp3.1目录(我用的是.net core3.1版本,如果是其它版本,这个目录名会不同)

然后运行docker build命令打包成docker包

第一次打包的时候会下载所依赖的环境。

五、打包完成后运行Power Shell(管理员模式),然后运行 docker images即可看到docker包已经推送到Docker Desktop中了

六、依次启动多个此docker的实例,本次测试启用了四个实例。

七、查看Docker Desktop中的实例情况

八、下载Nginx的最新版本 >#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; gzip on; upstream wxapi{ server 10.2.18.244:8887 weight=1; server 10.2.18.244:8888 weight=1; server 10.2.18.244:8889 weight=1; server 10.2.18.244:8890 weight=1; } # down 此标记的服务器不参与负载. # weight 值越大,权重就越大,越能多次响应请求 # backup 其它服务器无法响应是会请求此种类型的服务器应急。 server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { #root html; #index index.html index.htm; proxy_pass #proxy_redirect default; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }}

九、启动Nginx(双击nginx.exe或者CMD下运行)

十、访问测试

Docker中会对每个实例虚拟一个IP地址,至此,我们的API成功运行在Docker中并通过Nginx实现了负载均衡。

 


疫情中的一点冷思考,企业该不该借势?

疫情中的一点冷思考,企业该不该借势?


 短视频,自媒体,达人种草一站服务

经过这个让人揪心的“最长”春节假期,如今即将迎来新一轮的“返工潮”,新型冠状病毒的疫情反击也随之进入新的关键时期。

对企业组织机构来说,在灾情面前,首先要做到的是确保自身员工的安全,其次也应结合本次疫情状况,尽量为抗击疫情贡献一点经济社会力量,来应这场突如其来的“生物大考”。

作为广大媒体工作者中的一员,面对铺天盖地的疫情信息,我们也尽力让自己的工作和生活逐渐进入正常时期的节奏,在海量信息中尽力避免焦虑情绪所带来的负面影响,在保持清醒的理智之下,以自身的信息判断力做出一些谨慎而冷静的思考分享给大家。

警惕“危机情绪营销”的塔西佗陷阱

可能是因为经过2019年大环境的转冷,每个行业的营销预算都有一定幅度的削减,也可能是因为春节假期和疫情的缘故大家都还没能完全进入工作状态,至少在目前看来,在这场春节期间的疫情面前还没有企业犯“危机情绪营销”的“原则性错误”。

但在互联网团队看来,处于疫情中的企业组织机构依然需要警惕“危机情绪营销”陷阱。

马尔科姆在《引爆点》一书中提出一个“信息附着力法则”,被广泛用于企业事件营销中。所谓“信息附着力法则”简单的来说就是将营销的关键信息附着在具有极强传播力的信息中,以获得裂变式的营销传播效果。如《史记》中立木为信的故事,商鞅以十两黄金建立百姓的信任基础就是利用信息附着力的典型案例。

2012年10月底,一场灾难式的飓风“桑迪”横扫美国东海岸造成110多人死亡、850万美国人深处断电危机,飓风桑迪成为了美国舆论关注焦点。

“为了让您不在飓风期间感到无聊,接下来的36小时网上商城所有商品8折优惠,只需在结账时输入SANDYSALE即可。”在飓风横扫美国东海岸的同时,美国著名时尚品牌American Apparel在Twitter上发出这样的广告,结果飓风带来的狂风暴雨还没完全过去,该品牌就就被人们的愤怒和失望带入一场“舆论风暴”之中。

所谓“危机情绪营销”则不单单是借助重大危机事件的影响附着力进行品牌传播,也在与利用消费者的“危机情绪”来实现品牌的传播和销售转化。

比如在2018年台风“山竹”期间,某汽车品牌在发布新车后就曾以“不畏风雨、神同步、强势登陆”等字眼的营销文案进行品牌营销。而在彼时某网约车平台乘客遇害事件期间,也有个别车企以“私家车更为安全”等暗示引导公众危机情绪以促进品牌传播和转化。

“危机情绪营销”实际上是一种抛弃价值取向的信息附着力法则的应用。营销作为信息传播的一种方式,更应有道德和法律底线,而不顾底线的“危机情绪”营销则有可能使得企业陷入“塔西佗陷阱”。

古罗马时代的历史学家塔西佗曾经对一位罗马皇帝有一句著名的评价:“一旦皇帝成了人们憎恨的对象,他做的好事和坏事就同样会引起人们对他的厌恶。”如今这一评价被人们引申成为“塔西佗陷阱”。

对企业自身来讲,突破底线 的“危机情绪营销”会使的企业品牌形象陷入塔西佗陷阱,从而陷入严重的社会信任危机。

互联网江湖团队判断,金融理财和保险行业是较为容易陷入“危机情绪营销”的两个行业,一方面,两个行业在获客端都强调“安全意识”也较容易通过营造“危机感”来促进转化,另一方面,营销作为促进转化拉新的重要手段,对业绩的增长有着较为直接的促进作用。

2月3日,据中国证券网报道,银保监会财险部向各大保险公司下达了通知,其中就有新冠状病毒疫情期间不得借疫情渲染炒作保险产品,不得销售吸引眼球的噱头类保险产品的相关内容。

那么疫情面前,企业和组织应该如何应对“危机情绪营销”以及其背后的“塔西佗陷阱”?互联网团队认为应该从两个方面入手:即建立“营销底线意识”以及不断积累“企业公信力资本”。

以营销底线为尺度,积累“公信力资本”

营销的底线意识就是以道德尺度和法律尺度为界限,在突发性公共事件发声时“不造谣、不传谣、不营造恐慌情绪。”说白了就是要做到“营销三不”:不消费灾难,不引导负面情绪,不以转化为目的传播不实信息。

对于企业本身而言,面对突发重大公共事件首先要考虑的不是如何做借势传播,而是要对事件的影响做一个快速的评估,而面对灾难疫情等事件时,则需要首先考虑自身可能面临的风险和问题。

因而,在这场春节期间爆发的疫情面前,企业和组织首先要考虑的是自身员工的健康和安全,其次,在灾情面前践行企业的社会责任做好公益就是最好的“营销”。

第三点,也是非常重要的一点,在前两点的基础上,以企业的能力边界,尽可能的为应对疫情提供力所能及的帮助,从而不断积累隐形的“企业公信力资本”,为企业构建社会信任力基础。

“公信力资本”是长期主义企业所必需的“软实力”,而“公信力资本”的积累是非常难的,同时又是非常脆弱的。

以红十字会为例,郭美美事件之后,红十字会遭遇了自成立以来最严重的公共信任危机,使得其本身的“公信力资本”在瞬间崩溃,至今红十字会的一举一动都触动着舆论的敏感神经,稍有不慎,便会使其再度跌入万丈深渊。

由于“公信力资本”的匮乏,作为公益慈善机构代表的红十字会面对社会危机事件时所能社会效用已经捉襟见肘,更深处的影响是,曾经作为官方性质的最具影响力的公益机构,其公信力的缺失让国内整个慈善事业都陷入被动。

除了公益机构外,医疗行业的“公信力资本”也存在着巨大缺口,莆田系医院医疗事故频发,医疗资源的经济化和市场化使得行业“公信力资本”的积累更加艰难。而医患矛盾的频发是医疗行业“公信力资本”缺失的一种表现。

客观上,新冠状病毒疫情有助于医疗行业的“公信力资本”的补充,同时,这种补充是有代价的,其代价就是奋斗在抗击疫情一线的全体医务工作者的付出、汗水以及潜在的健康风险。

对企业来说,积累“公信力资本”也是有成本的,但这种成本是对社会公共资源获取的一种回馈,同时,也是企业在享受利润回报同时必须承担的沉默成本。

今年大年初一,在评估疫情的影响后,阿里巴巴迅速反应,宣布设立10亿元医疗物资供给专项基金,联系了14个国家和地区的供应商,采购大量N95口罩等医疗物资支援武汉;同日,京东物流宣布通全国驰援武汉救援物资特别通道。

此次疫情中,百度作为重要的信息获取入口,成为疫情期间聚焦人心的重要信息基础设施,疫情发生后,百度APP首页上线了谣言鉴别类别,腾讯也上线较真辟谣小程序来确保疫情期间真实信息流通的畅通。

疫情中我们可以看到,已经成为互联网社会基础设施的这些企业积极践行着企业的社会责任感,同时,在这一过程中,企业本身也在持续积累各自的“公信力资本”,而这些“公信力资本”也将在未来反哺企业影响力的社会影响力拓展,成为企业珍贵的“隐形资产”。

借势的正确姿势:治愈系解决方案

要问最近最火的明星是谁,一定非韩红莫属。

1月29日,韩红基金会在微博公布的实时项目进展显示,第五批物资已经到达武汉及周边城市,正在发放,第六批物资也已经在途。

2月1日,韩红爱心慈善基金会发表声明称,自2月1日17时起暂停接受捐款。截至1月31日,韩红爱心慈善基金会筹款超1.4亿。

相较之下,处于风口浪尖的武汉红十字会则显得“十分尴尬”。事实上相较于“公信力资本”坍塌的红十字会,韩红爱心慈善基金会以韩红个人品牌为背书,而客观上,韩红个人品牌的影响力也随之进一步提升。

类似的还有近期火遍全网的“河南硬核疫情防控”,实际上,河南省硬核防疫开始之前,全国大多数地区还没有意识到疫情的严重性,因此,河南的“硬核防疫”也成为了其他省区农村地区防疫的“样板”。无形中扭转了广大网友对河南的负面印象。

在互联网江湖团队(ID:VIPIT)看来,无论是韩红个人品牌背书的公益,还是河南地区的“硬核防疫”实际上都是为疫情中的公众提供了一个“治愈系解决方案”,即在“借势”的同时,解决部分公众关心的,疫情中出现的需求痛点,从而在不引起舆论反感的情况下获得个人、集体或组织公信力资本的增加。

1月27日,天眼查微博发布消息,疫情期间免费赠送15天VIP,以供用户在假期期间查询相关企业机构信息。其实,这样的在有限成本下对已有资源的合理利用也可算作是一种“治愈系方案”。

一方面,疫情期间确实存在客观的真实信息获取需要,用户也需要通过查询企业信息来帮助证实或证伪信息,另一方面,在这一过程中,天眼查既获得良好的品牌形象,又能在不引起舆论反感的情况下获得潜在的付费转化,可谓一举两得。

实际上,通过“治愈系解决方案”不少亟需补充“公信力资本”的企业可以快速扭转品牌形象,如此前陷入品牌危机的“鸿茅药酒”和陷入“安全测试危机”的大众帕萨特等品牌。但从目前来看,上述两家企业均未有声量较大的动作。

结语:

经过此次疫情,受影响最大的还是那些实体企业,做实体生意的,甭管大小,能经过这次疫情,大家都不容易。但客观上来看,经过此次困难之后,我们各行业的应急处置能力也将有进一步的提升,此外灾难过后的人们总是会变的更加团结、紧密。

我们有理由相信,在全社会的共同协作和努力下,疫情终将成为历史,明天的阳光也将会依旧灿烂!

科技自媒体刘志刚,订阅号:互联网江湖(ID:VIPIT),转载商务合作加微信:13124791216,转载保留作者版权信息违者必究。


2020年广交会外贸企业该怎么做?线上直播的广交会我们该怎么做?

今年的广交会真的是好事多磨,从延期、取消、推迟等等几番变动之下,终于实锤在⽹上举办。相信大家对广交会线上办理的时间线都很疑惑,我该什么时候开始准备?小知为您解答!

第127届广交会时间线

2月3日,广交会展馆发布声明,暂停一切展会活动,截止2020年2月27日,广东省展会延期 、取消、改期共计71场,其中广交会展馆21场;

3月3日,广交会官方发布了关于广交会问题的调查问卷;

3月23日,宣布广交会推迟;

4月7日,正式官宣广交会网上举办的举措,这是广交会有史以来,第一次在线上开;

4月15日,公布由腾讯作为广交会技术服务商

4月20日,参展企业可提前准备相关素材资料 

5月初,平台开放使用后统一上传资料

5月10日,完成展品信息前期准备工作

5月25日,必须完成全部信息上传

6⽉15-24⽇,为广交会起止时间

线上广交会的消息传出后,出口企业可谓喜忧参半。喜的是它给大家带来了新的机会和希望;忧的是企业对线上营销尚不熟悉,更不用说直播这样的新形式了。有人说自己工厂干了几十年可谓好手,但要搞直播却一筹莫展。

关于广交会的布局与参展指引,参考文章:25000人参加的广交会转到线上了!外贸企业要做的有这些

今天先和大家说一下这次线上广交会的直播让出口企业面临4大全新的挑战,就是设备、人员、内容和流量。

1.设备

直播间所需要的设施绝大多数企业都需要从零搭建,而且是一个完全陌生的领域。

2.人员

谁来直播?企业内部的人员可能没有良好的语言表达能力,但是外部人员又很难掌握专业的产品知识。

3.内容

10天*24小时共计240小时的直播时长,45分钟长度的电视剧来算,一共有320集,而我们还珠格格都才有96集;这么长的直播时间,需要多少内容来做直播?难度大家自行感受... ...

4.流量

辛辛苦苦准备后,满怀热血开播却发现没人看,那未免也太失望了。所以啊,开始之前还得思考一下如何吸引买家过来,如何给自己的直播间引流。

这四个问题,我们每个外贸企业可能都会有两个甚至多个问题,有些企业可能要面对所有问题。

小知建议:

1. 心态放轻松;好多朋友咱都是第一次做直播,我们不是啥央视主持人也不是李佳琪,心理压力不要这么大,放轻松点。不管结果如何,这次尝试非常有意思,take it easy and enjoy it!

2. 专业人士帮助准备;咱自己不擅长,但是有人就专门干这活的对不对?专业的事就得找专业的人做,用专业认识来完成直播间的筹备或者提供咨询。

3. 配备专门的宽带;视频直播大概需要1Mbps的上行网速。目前国内的大部分宽带是可以胜任的,但是要是企业的所有用户用同一条宽带,那网络就可能会无法保障,所以建议可以拉一条直播专用的宽带。

4. 成立直播小组;一个直播小组可以由一名懂产品的和一名英语好的两人一组。英语好的负责讲解和翻译,懂产品的负责说明重要的专业部分和回答由难度的问题,还得要树立一个专业的企业形象。

5. 在直播中多用提示板;很多外贸朋友的英语没有那么流利或清晰,所以把关键字的字词或句子写在提示板上,直播中展示给观众看,可以帮助客户更容易理解我们所讲的内容。

6. 充分演练;每个直播单元都要事先演练,最好能在人多的场合演练。很害怕很有信心的开始,结果一开始不知道下一步,为了避免这个情况的发生,要事先演练一遍。一来要熟悉内容,二来帮助克服直播时的紧张。

7.将直播内容分成单元;将直播内容分成不同的单元可以让直播更有条理。单元的划分可以根据产品来分,每个单元重点介绍一类产品,就像电视剧分集,也可以根据别的逻辑来划分,比如按不同的主题来划分。

8.不同时区不同直播计划;将直播内容分成小单元之后,可以按照你的客户所在的不同的时区来安排直播计划。例如把直播分成5个单元后,先按美国时间的上午排2个单元,下午排3个。然后再按欧洲的时区排一轮。这样就能合理地安排直播计划了。

9.多个直播小组轮班;有必要时,预备多个直播小组,轮班。如果直播计划较满的话,一组人马会顶不住的。

10.循环播放预告;没有安排直播单元的时间可以循环播放事先录制的企业或产品介绍视频和后面直播的预告。安排人员值班,来接待在此期间发起联络的客户。

11.提前邀约客户;提前两周通知老客户直播计划,邀请他们届时来观看直播。具体该如何针对不同客户做新老客户的邀约,参考文章《从买家角度看出口企业该如何准备线上广交会》

12.提前线上营销引流;提前一个月利用线上营销的方式推广直播,邀请新客户来观看直播,了解企业和产品。

关于广交会的布局与参展指引,参考文章:25000人参加的广交会转到线上了!外贸企业要做的有这些

有卖家讨论道:

卖家A:外贸人都够全能了,销售,单据,货代,工厂,技术,这还要新学如何当个主播是么,还得英文主播,特么这个行当在社会上来看不是个高端行当,这要求高得离谱了

卖家B:感觉应该效果会不错吧,企业除了可以在网上进行单独洽谈,还可以通过网络直播的形式。因为新颖所以吸引,观展基数越大,成交量应该会高一点。

卖家C:展位方说本次网上参展费用还没有出来,不知道不参加会不会退了。大家有一样的情况吗?因为以前在MADE IN CHINA网3.6w做了一年首页关键词,效果几乎为0,所以对本次线上展会不太看好。

卖家D:最近有人打着网上广交会名义,扩散虚假信息,让企业上传资料、发送相关网站链接等,还提前收费,希望大家能够警醒。

广交会的网上信息上传要求都将通过交易团传达到企业,一定要与交易团保持沟通;企业如有宣传推广等服务需求,企业可自主、自愿、自行选择服务商,主办方、承办方不作任何干涉。如果企业遇到任何单位、个人以大会名义收费的,请不要轻信,谨防上当受骗。

部分摘自:福步外贸论坛

文章来源:https://www.ikjzd.com/home/121043

新网站关键词怎么做优化会更好?

新网站关键词怎么做优化会更好?


 短视频,自媒体,达人种草一站服务

一个新网站建立以后,如果希望能够通过网络上达到引流的目的,就需要对网站进行优化,其中对关键词的优化尤为重要,我们今天就来谈一下对新网站关键词怎么优化?

1、使用更多的热度词

对于任何一件事的形容都有很多词汇,这些词汇有不同的热度,在对网站关键词设置的时候,一定认真去查一个词汇的热度,它代表着当前人们使用这个词汇的频率高低,等用户再搜索一个网站的时候,也会更多的使用这些热度词,所以我们在考虑新网站关键字怎么优化时候,一定要尽量使用这些热度词。

2、注意关键词的分配合理

关键词的设置如果过于集中,就会出现堵车的现象,大家都点击进入的是同一个网页,那么这个网站整个就会出现照顾过于集中在一个网页,而其他的网页还可能是无人问津,所以必须要是关键词的分配合理,是他遍布于每一个网页。

3、注意关键词的字节限制

每一个搜索引擎都得关键词有字节限制,再对关键词设置的时候,既要保证利用好关键词的字数,又不能超出关键词的限制,否则将会被搜索引擎无视,那就会做无用功了。

GM源码之家: p>

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!


2020年亚马逊致股东信节选在哪里可以看?亚马逊22年的股东信都说了些什么?

亚马逊自1997年IPO之后,22年以来贝佐斯发出的致股东信节选精华,从这些信件内容,也能大致窥探出亚马逊一路发展的战略和野心。

2019:失败也需要扩展

随着公司的发展,任何事情都需要扩展,包括失败实验的规模。如果失败的规模没有扩大,那就无法以一种真正能让指针移动的规模进行发明。亚马逊将以适当的规模进行试验,而以我们的公司规模来看,偶尔遭遇数十亿美元的失败是正常的。 当然,我们不会轻率地进行这样的实验。我们会努力做出好的押注,但并不是所有好的押注最终都会得到回报。作为一家大公司,这种大规模的冒险行为是我们可以为客户和社会提供的服务的一部分。对股东来说,好消息是,只要能赢得一次大规模的押注,就能弥补多次输掉的押注所带来的损失。

2016年:每天都要像创业的第一天那样

Day 2是停滞期。接踵而来的是远离主业,然后是一蹶不振,业绩痛苦地下跌,然后是死亡。这就是为什么我们总是处于Day 1。

一家卓有成就的公司可能要经历几十年的Day 2,但最终结果还是会到来。我对这个问题很感兴趣,如何应对Day 2?如何保持Day 1的活力,尤其是在一个大的组织里?

Day 1防御计划的首要因素包括:

「以顾客为中心」

将业务集中于一点的方法有很多。但在我看来,以客户为中心是目前保持Day 1活力的最佳做法。

保持处于Day 1的心态,需要你耐心地尝试、接受失败、播种种子、保护树苗,这样,你就既能看到客户的喜悦,同时获得双倍回报。

「抵制形式主义」

良好的服务流程有利于你为客户服务,但如果你不加警觉,流程本身就会变成问题,这在大企业中尤为普遍:工作流程没有为结果服务,只是走走过场。这就让人倒吸一口凉气了!

在一个每况愈下的Day 2公司里,你可能会发现,问题并不在于流程本身,问题在于流程左右了我们的操作。

「积极适应外部趋势」

如果你不会或不能迅速跟随强大的趋势,外部世界便会把你推入Day 2;如果你采取对抗的姿态,那你可能是在和未来对着干。因此,拥抱趋势,你将顺势而上。

大趋势并非那么难以确定,但是对于大型组织来说,迎合趋势却异常困难,这令人匪夷所思。眼下,我们正处于一个显而易见的趋势之中:机器学习和人工智能。

「保持决策的高速度」

Day 2公司能够作出高质量的决策,但他们做出高质量决策的速度非常缓慢。为了保持Day 1的能量和活力,你必须以某种方式作出高质量、高速度的决策。无论对于创业公司还是大型组织来说,这都非常具有挑战性。

2010年:研发应该遍及每个部门

如果我们仅仅让技术停留在某些研发部门,那么我们在技术上的所有投入都会变得毫无意义,但我们不会这么做。我们将技术应用到我们所有的团队、流程、决策,以及每项业务创新,它深深地渗透到我们所做的每件事中。

这些技术都是隐藏在背后的,比如说当一个用户打开他的Kindle设备时,它总是保持同步,并正好呈现用户想要的页面。这诠释了英国科幻作家阿瑟·克拉克(Arthur C. Clarke)的名言:"任何足够先进的科技都和魔法难辨差异"。 我认为,我们并非无益地去追求这些技术,相反它们将直接带来自由现金流。 正如我之前多次提到的那样,我们坚定不移地认为:股东的长期利益与客户的利益是完全一致的,我们喜欢这样的工作方式,创新是我们的内在本质,技术则是我们用于持续改进和提高用户体验的基本工具。

image.png

2007年:我们改变工具,工具也改变我们

2007年11月19日是一个特殊的日子,经过3年的努力,我们向客户推出了Amazon Kindle。

人类与工具共同发展演变,我们改变工具,工具也改变我们。Kindle始于我们为自己设定的一个不得不说大胆的目标:对实体书进行改进。我们并不是轻率地做出这一决定,任何一样东西如果500年来都保持大致同样的外观,而没有什么大的变化,要对它进行改进是不太容易的。

我们永远无法通过模仿实体书来超越实体书。我们必须增加新的、传统图书永远无法实现的功能。

一件事情如果做起来变得容易更顺利,人们就愿意更多地去做。如果我们的工具使阅读零碎的信息变得更容易,我们就会趋向于阅读零碎的信息,而远离长篇阅读。

Kindle是专门为阅读长篇材料打造的。我们希望Kindle和其之后的产品能用几年的时间,逐渐地延长我们能专心阅读的时间,对最近盛行的阅读零碎信息的倾向有所缓冲。 2000年:即使在最残酷的时期,也将努力把公司打造更具"重量" 著名投资人本杰明·格雷厄姆说过,股市从短期来看是"投票机",从长期来看则是"称重机"。很明显,繁荣的1999年使得市场中出现了很多"投票"行为,但我们是一家想要获得市场"称重"的公司。 从长期来看,我们以及其他所有公司都需要成为这样的公司。与此同时,我们也将努力把公司打造更具"重量"。 你们当中有很多人听说过我讨论"大胆赌博"(bold  bets)这事吧,我们曾经"大胆赌博"过,包括对电子产品、无线技术、以及如living.Com和pets.Com(两者都在2000年关闭)这类电商网站的投资,我们未来仍将继续这么做。作为亚马逊重要的股东,我们同样都遭受了不小的损失。 我们做这些投资是因为我们知道,我们不能在短期内进入这些细分市场,因此,我们热衷于互联网"圈地运动"(land rush)。事实上,这种"圈地"模式在1994年以后的几年中对公司决策起到非常重要的帮助。但现在我们认为,在过去2年中,它这种方式的效用已渐渐消失。 回过头来看看,我们确实远远低估了进入这些细分领域所需要的时间,也低估了一家单品类电商公司要完成这种规模时所遇到的困难。 尽管现在下定论还为时过早,但我们有足够的证据来证明。 1997年:长期价值 所有的都将围绕长远价值展开(It's All About the Long Term)。 我们相信,我们是否成功的一个重要衡量标准,就在于我们是否为股东创造了长期价值。这种价值直接来自于我们巩固并拓展自身目前市场领导地位的能力,我们的市场领导地位越强大,我们的商业模式越具有竞争力。强大的市场领导地位将带来更高的收入,更多的利润,更快的资金周转速度,以及相应的强大资本回报率。 基于我们对长期目标的专注,我们所做的很多决策以及衡量得失的方法都有别于其它一些企业。因此,我们希望与您们分享我们的基本管理和决策方法,以让我们的股东能证实您们的投资哲学是可持续的:我们将继续毫无保留的专注于客户至上的理念。 我们将更多的为"强化长期市场领导地位"这一目标做持续的长期投资决策,而非关注短期的盈利以及华尔街的反应。


文章来源:https://www.ikjzd.com/home/121019

亚马逊站外推广实操干货,教你如何站外引流【亚马逊运营必看】

亚马逊站外推广实操攻略,不多说,直接上干货。

一、社交推广

在国外,流行的社交平台有Facebook, Twitter, Pinterest , Quora, Instagram等,其中Facebook是零售渠道的王者。FB就像微博一样,需要建立你自己的专页,圈粉引流,那具体应该怎么做呢?

以下是facebook的推广步骤:

1. 建立facebook账户,增加目标国家的好友。比如做的是美国站,就加美国的好友。

2. 定期更新内容,保持账号活跃度。怎么打造内容?明确一个要做的垂直领域,运动、音乐、母婴、时尚都属于垂直领域,选择和产品相关的垂直领域做内容。明确领域后,要看一下领域内现在活跃的大V都是如何做的,然后找一个有差异化的点打造自己的账号。

3. 互动。和粉丝互动,认真回复粉丝的留言。组建和加入群组,群组是社交网站的核心,经常和群组的人互动,会给账号带来更多的流量。

4. 使用facebook里的商店插件,在商店里定期推出一些活动,给予你的粉丝一些好处。

5. 操作一段时间后,把账号养起来,就可以定期发布产品的广告文案引流了。

二、博客推广

利用wordpress、myspace、自己建立的博客等做产品推广,都属于博客推广。

以下是博客推广的思路:

1. 内容定位。注册博客平台,定位好要做的垂直领域,然后在博客中发布高质量的内容。

2. 关键词布局。将产品相关的热门搜索词统计出来,再植入到博客当中。

3. 做好内容和关键词的布局后,引入的流量就会精准许多,可以开始做产品的软文工作正式引流了。

三、邮件推广

邮件营销是非常好用的运营手段。做好邮件营销,需要握好发邮件的时间、标题、内容等等几个技巧,才能有效提高销量。

以下是邮件推广的步骤:

1. 利用独立站、社交媒体和粉丝群获取邮件地址

2. 打造邮件内容,安排好时间发送邮件。邮件的标题需要有吸引力,千万不要在标题中直接索评,这样会让买家十分反感。一天中的上午八点、下午一点和下午四点是平均打开率最高的时间段,而上午六点、上午八点和下午一点是平均点击率最高的时段(美国时间),所以建议在这几个时间点发送邮件。

四、图片推广

国外热门的图片网站有http://pinterest.com、http://fashiolista.com等。 这类网站的图片会有很多的标签,很多的长尾关键词来吸收流量。这类网站以图片为主,会给人更好的视觉冲击,能够刺激别人的购买欲望。

以下是Pinterest推广的步骤:

1. 注册Pinterest账户,设置好这些图片的标题及属性。

2. 添加自己店铺或者产品的链接。

3. 优化关键词,将图片的排名做上去,得到更多的流量。

五、YouTube红人推广

YouTube作为全球最大的视频社交平台,其全球活跃用户超过10亿人,它在各地的营销价值甚至远远超越某些市场本土的媒体,而且YouTube上更是有无数的网红可以用来做引流推广,利用好了能带来巨大的流量。

以下是YouTube红人推广的步骤:

1. 寻找红人。用第三方平台像contentblvd、brandbacker、influenster、IZEA、hyprbrands、Scrunch、Markrwatch、Famebit.com来寻找红人。

2. 筛选红人。用http://socialblade.com查询的红人名字,排名,视频数量,观看数量,订阅量,最近30天的订阅情况等等。

3. 合作谈判。准备好给红人写信的模板,用邮件联系。和红人沟通视频怎么做,不要忘了植入店铺的链接。

六、短视频营销

随着Tiktok的火爆,引起全体跨境卖家关注。因为Tiktok是新兴的,具有强大带货能力的平台,是难得的机遇,充满无限可能。

以下是Tiktok红人推广的步骤:

1. 产出垂直领域的视频内容。

2. 按照Tiktok算法指标的完播率、点赞率、评论率、转化率、关注比、复看率这六个要素去优化视频内容。

3. 植入跳入亚马逊店铺的链接,tiktok视频被分配到的流量越大,则引入店铺的流量就越多。

站外推广还有很多思路,像Deal网站促销、Review站引流、谷歌搜索广告等等,都是站外推广的有效方式。新手的话就多去实践,尽量多接触各种站外推广的营销策略。成熟的运营,优化当下的站外推广策略,并寻找新的推广途径即可做好站外推广。希望你看了这篇文章后能有所收获,让站外推广给你的店铺,有效的带来更多的流量。


文章来源:https://www.ikjzd.com/home/121013

亚马逊摊上事了!美国参议院要求对其进行刑事调查!!!

据路透社报道,美国参议院周二敦促美国司法部对亚马逊展开刑事调查,称这家网络零售商利用其平台卖家的销售数据进行掠夺性操作并建立垄断,美国国会议员对亚马逊滥用其在线平台的地位,生产假冒产品,然后与在其网站上提供自己产品的卖家竞争感到愤怒。

984.png

共和党人乔希·霍利一直对谷歌等大科技平台持批评态度,他在《华尔街日报》的一份报告中表示,亚马逊为了在亚马逊品牌下创造山寨产品,滥用其作为在线平台的地位,收集在其网站上售卖的第三方卖家产品数据,这远远超出了其实体店的能力范围。

据《华尔街日报》报道,目前,密苏里州参议员乔希·霍利已于周二(4月28日)致信联邦司法部(DOJ),要求展开刑事调查。

乔希·霍利在给司法部长威廉·巴尔的信中写道:"我写信来是想请求您对亚马逊展开一项反垄断刑事调查,最近的报告显示,亚马逊正在从事掠夺性和排他性的数据操作来建立和维持垄断。"乔希·霍利指出,这种做法"尤其令人担忧",由于政府下令采取公共卫生措施以减缓新型冠状病毒的传播,许多小型零售商被迫暂时关闭店铺,这些小型零售商已经越来越依赖网上销售。

亚马逊在一份声明中表示,公司"严格禁止员工使用非公开的、特定卖家的数据来决定推出哪些自有品牌产品。"

据PYMNTS报道,亚马逊坚持限制员工访问卖家数据。

而众议院反垄断小组委员会主席戴维•西西林表示,亚马逊可能就其针对第三方卖家的商业行为向国会撒谎。甚至20名前雇员告诉《华尔街日报》,他们很容易获取卖家的信息,以确定亚马逊所谓的"自由品牌标签"下的产品。这些产品包括大约40多个品牌,多达24万3000种产品。前雇员表示,卖家相关数据的使用权限规定并不是强制的。

亚马逊的一名发言人在一份电子邮件声明中表示:"虽然我们不相信《华尔街日报》说法的准确性,但我们非常认真地对待这些指控,并已展开内部调查"。

司法部发言人表示,司法部已经收到了这封信,正在对其进行审查。

目前,美国众议院司法委员会和司法部正在调查四大科技平台——谷歌、苹果(Apple)、亚马逊(Amazon)和Facebook,而美国联邦贸易委员会正在调查Facebook和亚马逊,与此同时,一些州检察长也在关注Facebook和谷歌。


文章来源:https://www.ikjzd.com/home/121015

亚马逊新规:销售N95口罩或消毒液,需新增提供这些材料

跨境知道获悉,近日亚马逊美国站发布公告表示,平台对销售某些与全球冠状病毒(COVID-19)大流行有关的个人安全和家用产品实施了更严格的要求,例如:口罩、消毒洗手液、消毒湿巾和喷雾剂、异丙醇、手套、肥皂、纸制品和体温计等。


卖家必须是合格的制造商,才能销售诊断和收集套件以及经过认证的N95和类似口罩。

为了帮助客户在COVID-19大流行期间更好地找到他们需要的产品,亚马逊限制为个人安全和家用产品创建新产品清单。为了申请考虑卖家的新产品清单,请填写"个人安全和家用产品的新清单创建要求"表格。

202004300936235051.png

注意:如果你的产品清单已被删除,但认为它在上面列出的"个人安全和家用"产品中未正确分类,可以联系" 销售伙伴支持"。

申请出售现有产品时,将要求提供以下一些或全部:

至少一张制造商或分销商的产品购买发票

产品或其包装的照片

同意亚马逊的市场公平定价政策

如果面基想申请出售这些产品,或者觉得产品被错误地归入上述"个人安全和家用"产品之列,请按照以下说明进行操作:

在广告资源标签中,选择添加产品。

搜索您要出售的商品。

在搜索结果中,单击该项目旁边的列表限制。

单击请求批准按钮以开始申请过程。


文章来源:https://www.ikjzd.com/home/121005

夏日烦闷?为家居增添一抹白,清爽好看不出错

夏日烦闷?为家居增添一抹白,清爽好看不出错


  炎热的夏季来了,阳光炙热,不管是体感温度还是人的“内心”温度都蹭蹭地往上涨,烦躁的心总是安定不下来,汗流浃背又想发脾气,此时家居的颜色若太沉闷,更是会增进情绪负担,似乎整个人也变得“黏腻”了。

  夏日的家居配色清爽简单很重要,但自己又不想大幅度装修焕新,想买些物件来装点家?在这里,小编建议不妨试试白色系的物品,简单好看也不出错。只需要换或布置一到两件白色物品,整个家就都开始清爽明亮起来。小编在这里为大家搜罗了一些自己感觉比较实用的,话不多说,现在就一起来看看吧。

  1.白纱窗帘

  夏天到了,把厚重的窗帘换成简单的白纱,微微透明的材质,让你可以清晰看到窗外的郁郁葱葱,听着蝉鸣,看着窗边的白纱层层叠叠地被吹起,带着湿气的风似乎也变得清爽许多。

夏日烦闷?为家居增添一抹白,清爽好看不出错

夏日烦闷?为家居增添一抹白,清爽好看不出错

  2.沙发铺巾

  若沙发颜色本来比较沉闷,可以用白色的沙发铺巾盖住原来沙发颜色,带点钩花质感的纹路,让白色简约而不单调,看着心情也明亮了。

夏日烦闷?为家居增添一抹白,清爽好看不出错

  3.白骨瓷餐具

  夏日的食物口味清爽的蔬果居多,使用的食材颜色丰富也会增进夏日食欲,此时可以使用白骨瓷餐具,简单的白色可以衬托出食材本身丰富的颜色,食物的质感也凸显了~

夏日烦闷?为家居增添一抹白,清爽好看不出错

  4.白陶瓷花瓶

  很多人家中都会购置花瓶,那么换一个白色的小花瓶怎么样?把它放在餐桌或茶几上,插上一束小花,不仅用白色,也用生命力点亮空间。

夏日烦闷?为家居增添一抹白,清爽好看不出错

  5.洞洞板

  洞洞板作为装饰性和实用性并存的好物已经火了许久,不仅可以收纳,挂在墙上也十分好看,满满的ins风,为你的白墙增添一点灵动感,夏季不乏味。

夏日烦闷?为家居增添一抹白,清爽好看不出错

  6.置物架

  白色的置物架,可以置于客厅也可置于房间内,简约也实用,还可以放些清爽色系的装饰小物,让家居空间变得有趣。

 夏日烦闷?为家居增添一抹白,清爽好看不出错

       以上便是今天的分享,希望大家的夏日都能过得清爽起来,白色的夏季,不沉闷也不单调,简单却不乏味,你值得拥有。


一龙1秒KO刘二狗?武僧直播中受尽侮辱,能否将对手打得爬不起来_比赛

一龙1秒KO刘二狗?武僧直播中受尽侮辱,能否将对手打得爬不起来_比赛


原标题:一龙1秒KO刘二狗?武僧直播中受尽侮辱,能否将对手打得爬不起来

北京时间4月29日消息,格斗圈内近期最受关注的一场跨界比赛将上演。这场跨界比赛的主角是网红主播刘二狗,跨界挑战功夫明星"武僧"一龙。赛前的直播中,刘二狗表示:"你不把我打趴下,我瞧不起你"!

在新冠疫情肆虐的这段时间,网络直播成为很多人的爱好。这其中,就包括"武僧"一龙。对于这场比赛,刘二狗在一次直播中,这位网红直播利用自己好口才,口灿莲花,用自己是"打假拳的",一龙是"打真拳的"话题讽刺一龙。用一龙在一些比赛中双手低垂放弃防守的"铁布衫"来讽刺一龙木讷,等等。

刘二狗的表现,让憨厚的一龙在直播中非常窘迫。直播中,尽管有同伴给一龙帮腔助阵解围。但是一龙在这场直播过程中的整体感觉,比打一场比赛还要累,在刘二狗丰富的表情,极尽讥讽的话语,如果当时两人面对面,一龙一定会上去一顿暴揍。

刘二狗这样让一龙难堪,惹得他的好朋友"死神"方便极为生气,他在一段视频里这样说:"……你用这样的方式侮辱了我的兄弟一龙,必须站出来给我兄弟道歉。我可不管你是谁,我也不想回你这坨狗屎……。"

对于刘二狗的嚣张狂妄举动,很多拳迷和网友实在看不下去了:"别手下留情,让他躺一年半载,最看不惯哪种说话满嘴跑火车";"来,大家猜猜他会坚持到第一回合的几分钟被一龙用拳头击倒?我觉得最多不超过两分半钟,具体情况取决于他跑的多快。""别留情 要尊重对手 使劲揍他"。

刘二狗也许真的练过一点,但是与具有很强势力的一龙相比,还是实力差距非常悬殊。如果一龙全力以赴,一龙应该会轻松击败对手,将对手揍得心服口服赢回面子。具体结果如何,只能等打过之后才能知晓!返回搜狐,查看更多

责任编辑: