掌握这个套路,80%的问题你都能靠自己解决


版权声明



信息爆炸的时代,信息的获取变得非常容易,但也有太多无效的信息。如何分析,过滤,筛选有效的信息至关重要。对于开发而言,搜索有用信息,是提高开发效率的利器。

下面分享一些Stay在解决问题时的套路。包含分析需求,筛选,搜索,团队协作等一系列开发中可能遇到的问题。希望借此套路能提升大家的开发效率。

分析问题

一个问题出现,必然有它的原因,场景,触发条件。想要解决问题,首先需要冷静分析。

WHAT WHEN HOW WHY

这个问题是什么?它在什么场景下发生?上下文是什么?它是如何被触发的?为什么会发生?

我们要解决问题,需要弄清楚的是why。但是在彻底弄清楚why之前,我们可以通过一些线索来求证。而不是通过抓瞎来找原因。

假如你认真分析了WHAT WHEN HOW,顺着那根线去找源头,80%的问题都能找到原因,只要找到原因WHY,那问题很快就能解决。你甚至不需要通过google,向他人求助就能顺利解决问题。同时,你每一次解决问题的方式都会被强化,直到成为你思考问题的体系。你会成为一个相当优秀的人。

举个栗子:

问题WHAT: 我们有很多推送SDK,但是有个问题总是不好解决,当一台设备有多个帐号登录时,推送会乱掉。

场景WHEN: 发生于当用户在同一设备上登录多个账号时。

触发条件HOW: 如有ABC三个账号登录过,当前登录为D,当服务器推送一条消息给A时,D却收到了这条推送。

原因WHY: 我们借助第三方平台sdk来发推送消息,sdk需要一个设备唯一id(regId)来标识,在sdk眼里是没有账号体系的,只有设备regId。我们一般会将regId跟登录account绑定起来。当服务器要推送时,会在db中查询account对应的regId,调用云推送sdk发送单点消息。但是如果登录另外一个account,但是regId又未跟之前的account解绑。问题就发生了。

解决方案: 通过分析,我们知道个中原因,那只要保证我的regId和account是一对一关系就可以,当account在绑定regId时,服务器先查询是否有已绑定的account,如果有,就删掉,绑定新的就可以了。

扩展1: 云推送还给我们提供了tag方式进行分组推送,既然可以分组,那我把组的粒度控制到account可以吗?理论上可以的,只要tag没有限制。

扩展2: 单点登录如何实现(同一时间只能有一个account登录一个device,否则要通知下线),也就是说A不能同时在device1和device2上登录,后登录的要把先登录的挤下线。简单说说方案,挤下线可以用token失效来实现,通知下线可以用推送。

扩展3: QQ的多类型设备登录如何实现(设备用很多种android,iPhone,iPad,Mac,Windows),允许A同时在android,pad,电脑上登录。简单说说方案,account与regId做成一对多关系,但是要多加一个类型限制:phone,pad,computer。

学会分析问题比写代码更重要。

借助Wiki

通过WHAT WHEN HOW分析出了原因WHY,可能我们并不知道如何去解决。它不是一个业务逻辑错误,也不是自己知识体系中的节点。所以我们需要通过补充相关知识来解决问题。比如药怎么吃,SDK如何集成,微信公众平台支付接口,软件如何使用。等等。这些都可以通过官方手册来系统解决。

药怎么吃,有什么副作用,不能和什么混用。SDK需要如何配置,在哪些地方要做处理,什么情况不能支持等。所有这些常见的问题,都会有一个官方的解释。只要按照上面的来。80%的问题也能迎刃而解。即使你是个特殊问题,也可以通过官方论坛或者提交工单解决问题。

比如微信支付如何接入,友盟sdk如何集成,状态码为何返回error?这些完全没必要去问其他人,直接找官方的wiki,sample,解决不了就去提交工单。假如你做一个SDK提供给其他人用,难道不会cover所有情况,提供详细的wiki以及demo吗?这都做不好,哪会有人愿意来使用集成呢。(好吧,当我没说)

遇到问题要耐心,千万不要病急乱投医,这样反而让自己变得焦躁,更没法集中注意力去分析问题,解决问题了。

有什么是搜索引擎搞不定的吗?

为什么大家都用搜索引擎,有的人能搜出答案,有的人却搜的都是要命广告。

除了一个用google,一个用baidu

还有一个原因:键入的搜索词不一样

想要搞清楚为什么,首先得简单了解下google baidu是如何运作的。

如果你自己搭过网站,写过博客,过不了几天,搜索引擎就来爬你的数据,将你所有的内容都收录。然后通过一些关键字就能搜到你发表的文章以及网站了。当然如果是很常见的关键字,就会优先显示权重或pr值高的网站。又或者你的文章被其他pr值高的网站抄袭了,你的网站就只能排在后面了。

那搜索引擎是怎么收录网站的呢?一篇文章是如何保存在服务器的呢?之前在android上做过Lucene全文检索引擎,我想在策略上是相似的。通过将文章分词,拆解成一个个词语,句子,分块存储在索引里。当我们搜索时,再将搜索内容分词,去索引中找到最匹配的内容提取出来,通过一些匹配度,权重排序,再显示到结果上。当然搜索引擎真正的实现要比这个复杂得多,也智能得多。不过也可以不去深究。只要明白在搜索时,键入的搜索词是相当重要的。

如何选用正确的关键字来搜索呢?很多人搜索时描述的非常生活化,比如xxx怎么实现的,xxx支持xxx吗,xxx可以做xxx吗。哎,搜索引擎终究是机器啊,不是人工检阅啊,你使用的无关词汇越多,越会分散匹配度。最后得出的结果差强人意。

假如你写文章来分享你的解决方案,会如何取名,填相关keywords?肯定会尽可能的去描述它对吧。反过来其实也一样。用最简单的关键词描述你的问题,比如(retrofit multi upload) (retrofit refresh token) (recyclerview onitemclick) (database encrypt) (android webview openFileChooser doesn’t work) (okhttp post 304)(retrofit progress update)

问机器,你要尽可能简单,并且自己做好分词。最好不要搜索句子,别放标点,语气词,助动词这些无意义的字。并且每个词之间加上空格来手动分词,避免被错误分词的可能。


搜索引擎之外的好帮手

有些网站是不允许搜索引擎爬的,比如一些BAT的开发文档,论坛等,如果说微信支付调试不成功,百度推送总有error code,那么你要做的是去官方的wiki或者讨论区里用站内搜索来找答案。这种问题你去问人,对方碰到过的概率极低,所以别浪费时间啦。还有一些第三方lib出问题了,可以拿包名去github上找出处,看看有没有更新,或者去issues里翻翻有没有类似的问题。

有时候甚至都不需要google,有问题直接就在那些优秀博客和收录站就能找到高质量的知识分享。经常浏览上面的文章,扩展自己的眼界,找自己感兴趣的知识来补充。是非常省时间的事。

要注意的是,如果只mark,不实践。那它只是一个知识节点,没有与你的知识体系交织到一起,很快你就会遗忘它。别信自己会先收藏再消化的鬼话。

又如果说你的鸟语比较好,那会如有神助啊,google,stackoverflow,github都会成为你解决问题的好帮手。有些时候中文难搜到的,用英文很快就能找到。中文google的概率也比百度高一些。如果是搜demo或lib,eoe, csdn算是个选择,不过大多数也是从github上翻下来的,如果你想实时更新,尽可能还是英文的好。把lib的包名在github搜下就出来了。

其实最重要的帮手是你的知识体系。如果你想构建它,一个是通过文章分享来逼迫自己将知识节点吸收转换成你体系的一部分。一个是高效的思维方式更快的去转化吸收。

不要寄希望于找到一行都不改的源码

当然,能找到完整的解决方案最好,皆大欢喜。但如果简单的搜索之后,还没找到最优解,那就得停下来分析下。基于目前的调研,把得到的信息汇总下。

WHAT WHEN HOW WHY,我们知道需求的前因后果,是否还需要完善,或者更好的方式去传递给用户。通过搜索或wiki,我们知道目前可行的解决方案有哪些,需要多少工作量来完成它。

别一上来就想着搜个源码直接用,也不要一开始就去画UI。Stay一般是这样规划的:

  1. 先想清楚产品到底要一个什么样的功能,这个功能对产品来说是否真的那么重要,有没有什么更能放大这个效应的做法。
  2. 与产品讨论,理解他们通过APP想表达的诉求,将它们转化成真正的需求,并画出流程图与产品反复确认。
  3. 需求理解好了,可以先拆分调研相关技术点。先不要急着去表达这个功能实现不了,这个效果要花时间。不妨客观的分析下(反正都要实现,为什么不把它做的好一点呢)
  4. 有个大抵的了解之后,团队在一起讨论下,采用什么具体实现,谁来实现。(务必让每个人都对代码有整体上的认识,不要各自维护自己的小模块,不利于成长,也不利于团队)
  5. UI一般都要比业务逻辑改动的频繁,所以最好不要急着画UI,只要有一个大致的UI框架就可以了。先把业务逻辑完善(网络交互,cache,点击事件,跳转)如果有盈余,可以写unit test来测试C层或者P层逻辑的正确性。没问题了再写UI实现。
  6. 剩下的具体实现呢,如果没有现成的代码可以用,可以再拆分成几个task。先自己将tasks通过workflow串在一起,不管是流程图,还是TODO伪代码都行。再针对每个task来搜对应的解决方案。
  7. 所有技术问题不可能是无解,只要耐心,肯定能找到解决方案。别怕麻烦,别图省事,碰到的每一个问题都是你进步的阶梯。如果真不能解决,那就换个折中的解决方案嘛,沟通灰常重要的!

很多人都希望问一个最优解,这并没什么不好。可是衡量一个优秀的技术人员并不是看他有几个G的源码库啊。都能不厌其烦的去问别人问题,为什么不能好好静下来分析处理问题呢?

快速提升的秘诀

最后,说个快速提升能力的秘诀:分享。当有人碰到问题求助与你时,别怕麻烦,你会的尽量去分享,不会的尽量去思考,他人的问题以后也可能变成你的问题,只要你动动脑子,帮助分析,迟早对方会解决这个问题,也意味着你也解决了这个问题。多划算的事儿啊,不用写代码,不用debug,动动脑子你就多了一个储备的解决方案。

最后

以上这些套路并不一定准确,或许你还有更好的方式。技术更新越来越快,当我们很难跟上节奏的时候,不妨停下来。常思考,常实践,寻找一种高效的方式来补充知识体系。如果看到这里,你开始思考了。那这篇文章的目的就达到了。

其实我还挺想说说提问的技巧。为什么有的人发问题,没人理睬。但有的人只要说一句话就能引发讨论呢?这个现象有一定的参考价值,Stay会尝试再写一篇文章来分析-提问的艺术。

时间: 2024-10-09 12:43:33

掌握这个套路,80%的问题你都能靠自己解决的相关文章

Keil4 每次选build 编译(F7)都全部编译的解决办法

Keil4 每次选build 编译(F7)都全部编译的解决办法 http://blog.csdn.net/wchengshen/article/details/50440079 Keil4 每次选build 编译(F7)都全部编译的解决办法: ocean 验证: project--option for target 'xxx' ---target---Code Generation-- 将Use Cross-Module Optimization勾选去掉 再多重新编译一次就可以了.

压测难,难于上青天,80%的直播应用都败在了这里

目前腾讯WeTest服务器性能测试已经正式对外开放,点击链接:http://wetest.qq.com/gaps/立即体验! 作者:Oliver,腾讯服务器性能测试团队产品经理. 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. WeTest导读 直播的火爆带来了海量的用户,也带来了海量的服务器并发.本文分析了目前直播行业存在的难点,从腾讯目前的新直播产品--NOW直播出发, 了解直播应用背后的那些事. 直播,突然成为了中国互联网的一个最流行的词汇.在<2016-2020年中国网络

学会这些“套路”,excel 合并汇总都不是事

在日常工作中我们经常遇到具有相同表头的 Excel 文件,需要将它们合并到同一个工作表中再进行分析.当文件比较多时,手工合并表格通常是件很麻烦的事情,而如果数据量很大,用 Excel 自带的 VBA 来处理也会经常卡死.今天我就来分享一个专业的外部数据工具--集算器,掌握了集算器处理 Excel 多表合并的方法,就不用再编写复杂且低效的 VBA 代码了,简单的几行 SPL(Structured Process Language,结构化过程处理语言)代码就能轻松搞定 Excel 文件合并,即使文件

安装windwos7 iis 出现错误,并非所有都成功更改的解决办法

1.首先排除网上说的 安装的WIN7是精简版的问题,我这个是旗舰版,以前是正常安装IIS的,后来程序问题我卸载了,就安装不上了 2.网上说的修改什么UAC权限,也是胡扯,因为默认都是最低的 3.排除网上说的非管理员权限,这点知识刚毕业的都知道是不是管理员登陆吧. 最终的解决办法是: 先用命令卸载iis  .net 4.0 第一步:cd  C:\Windows\Microsoft.NET\Framework\v4.0.30319    然后 aspnet_regiis.exe -u 第二步:用正常

怎么点击div之外的区域就隐藏这个div啊 找了很久,都没有很好解决

方法一. <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>无标题文档</title></head><body> <span onClick="with(document.getElementById(

form表单中控件较多,加载完成后切换页面都很慢的解决方法

form表单中控件较多,加载完成后点击都很慢,为什么?我一页面中form表单里面上百个控件(如input.select.radio.checkbox等),还有一些js脚本,加载速度还可以,都能全部显示完毕,但是点击一些事件(如切换tab.关闭模拟框,点击radio等)都非常慢,不知道为什么? 当我采用inprivate模式浏览时,以上动作都很快,但老用inprivate也麻烦,有何办法解决. 按理说form都在客户端显示完全了,其他操作都是客户端的操作阿应该不慢才对阿/. ------解决思路-

Eclipse里的web项目名有红叉,但是底下的每一个文件都没有红叉解决方法

问题描述:Eclipse里的web项目名有红叉,但是底下的每一个文件都没有红叉? 原       因:原因其实很多,这里我只记录我出错原因:是因为用了Eclipse自带的basic下面的服务器,然后就出错了. 解决方法:重新new一个Apache(tomcat)服务,成功解决. 操作:点击服务-->右键--->点击 new-->点击 Server-->选择Apache下的你有的tomcat(需要自己下载)-->点击finish .完成 具体如图:

“此操作要求合并单元格都具有相同大小”解决方法

将EXCEL表格按某一列排序时,总是出现“此操作要求合并单元格都具有相同大小”. 解决方法:选中所有单元格,点右键选择设置单元格格式,在对齐菜单下将合并单元格前方框里的勾去掉即可. 提示:把“自动换行”复选框勾选,这样可以实现单元格内自动换行.

xcode6.1调试的时候有时参数都为nil怎么解决?

昨天我在写代码的时候,发现xcode6.1调试的时候有时参数都为nil?曾经有朋友遇到过这个问题,我一直没当回事,昨天我也碰到了: 看下图: 刚创建的vc 和 nav 都为nil,这给断点调试增加了很多麻烦,难道是xcode的bug吗? 群里问问大牛,不得姐,网上有查,最终找到解决方法: 在Project的Build Settings中把Optimization Level 设置成 None 即可. 在运行看一下结果: 果然,有值了.小问题的解决方法,分享给大家. 喜欢我们的内容,可以点击右上角