SegmentFault 志哥的成长笔记最新的文章
2019-02-28T20:39:49+08:00
https://segmentfault.com/feeds/blogs
https://creativecommons.org/licenses/by-nc-nd/4.0/
Jackson 序列化对象成 JSON 字符串,忽略部分字段(属性)
https://segmentfault.com/a/1190000018345361
2019-02-28T20:39:49+08:00
2019-02-28T20:39:49+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>1、属性上 加 @JsonIgnore</p>
<p>这种方式作用于全局,只要是有这个对象的序列化,就会忽略注解过的这部分字段。</p>
<p>2、上面那种方式需要在 bean 上加注解,作用于全局,但是有的时候,我们可能不需要在所有情况下都忽略这个对象的这些字段,下面这种方式可以支持定制过滤方式。</p>
<pre><code class="java">public final class JsonFilterUtil {
/**
* 添加过滤的字段,这里过滤的是 ThinActivityInfo 这个 bean 下的
* "startAt", "expiredAt", "extra" 三个字段
*/
public static void addFilterForMapper(ObjectMapper mapper) {
SimpleBeanPropertyFilter fieldFilter = SimpleBeanPropertyFilter.serializeAllExcept(
Sets.newHashSet("startAt", "expiredAt", "extra"));
SimpleFilterProvider filterProvider = new SimpleFilterProvider().addFilter("fieldFilter", fieldFilter);
mapper.setFilterProvider(filterProvider).addMixIn(ThinActivityInfo.class, FieldFilterMixIn.class);
}
/**
* 定义一个类或接口
*/
@JsonFilter("fieldFilter")
interface FieldFilterMixIn{
}
}</code></pre>
<p><img src="/img/remote/1460000018344464" alt="" title=""></p>
<p>原文链接<br><a href="https://link.segmentfault.com/?enc=e7HgwG8Y8GwkytXAtwyVmw%3D%3D.JoV2xy8d8ThhKSSG90AvsgJtmnAkyLBJ7zEY1c1auc%2FQYNRnXPDj2Lilhr9zeOo%2BOGlqyPGbKw68vsRsnALT1GhIjYZx76KpBvu9G40Co2g%3D" rel="nofollow">http://zhige.me/2019/02/28/20...</a></p>
Spring 执行 sql 脚本(文件)
https://segmentfault.com/a/1190000018344940
2019-02-28T19:56:04+08:00
2019-02-28T19:56:04+08:00
志哥
https://segmentfault.com/u/zhige_me
2
<p>本篇解决 Spring 执行SQL脚本(文件)的问题。</p>
<p>场景描述可以不看。</p>
<p>场景描述:</p>
<p>我在运行单测的时候,也就是 Spring 工程启动的时候,Spring 会去执行 classpath:schema.sql(后面会解释),我想利用这一点,解决一个问题:</p>
<p>一次运行多个测试文件,每个文件先后独立运行,而上一个文件创建的数据,会对下一个文件运行时造成影响,所以我要在每个文件执行完成之后,重置数据库,不单单是把数据删掉,而 schema.sql 里面有 drop table 和create table。</p>
<p>解决方法:</p>
<pre><code class="java">//Schema 处理器
@Component
public class SchemaHandler {
private final String SCHEMA_SQL = "classpath:schema.sql";
@Autowired
private DataSource datasource;
@Autowired
private SpringContextGetter springContextGetter;
public void execute() throws Exception {
Resource resource = springContextGetter.getApplicationContext().getResource(SCHEMA_SQL);
ScriptUtils.executeSqlScript(datasource.getConnection(), resource);
}
}
// 获取 ApplicationContext
@Component
public class SpringContextGetter implements ApplicationContextAware {
private ApplicationContext applicationContext;
public ApplicationContext getApplicationContext() {
return applicationContext;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}</code></pre>
<p>备注:</p>
<p>关于为何 Spring 会去执行 classpath:schema.sql,可以参考源码</p>
<p>org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer#runSchemaScripts</p>
<pre><code class="java">private void runSchemaScripts() {
List<Resource> scripts = getScripts("spring.datasource.schema",
this.properties.getSchema(), "schema");
if (!scripts.isEmpty()) {
String username = this.properties.getSchemaUsername();
String password = this.properties.getSchemaPassword();
runScripts(scripts, username, password);
try {
this.applicationContext
.publishEvent(new DataSourceInitializedEvent(this.dataSource));
// The listener might not be registered yet, so don't rely on it.
if (!this.initialized) {
runDataScripts();
this.initialized = true;
}
}
catch (IllegalStateException ex) {
logger.warn("Could not send event to complete DataSource initialization ("
+ ex.getMessage() + ")");
}
}
}
/**
* 默认拿 classpath*:schema-all.sql 和 classpath*:schema.sql
*/
private List<Resource> getScripts(String propertyName, List<String> resources,
String fallback) {
if (resources != null) {
return getResources(propertyName, resources, true);
}
String platform = this.properties.getPlatform();
List<String> fallbackResources = new ArrayList<String>();
fallbackResources.add("classpath*:" + fallback + "-" + platform + ".sql");
fallbackResources.add("classpath*:" + fallback + ".sql");
return getResources(propertyName, fallbackResources, false);
}</code></pre>
<p>参考:<a href="https://link.segmentfault.com/?enc=6SowayfCP4S62Akpp98mmg%3D%3D.fq99aitcWxrOLCmh0RjqnvUKDP7aRY8acIGOGXn%2BirvgGY9TNarinKZkMsmBhdhPURJNRElZHi%2B%2FUYab89aR3A%3D%3D" rel="nofollow">https://github.com/spring-pro...</a></p>
<p><img src="/img/remote/1460000018344464" alt="" title=""></p>
<p>原文链接:<br><a href="https://link.segmentfault.com/?enc=N56HcH2j%2FTj9SI50WLRSrA%3D%3D.nhejFqTdZvHROAFBD91QEU9AQrKG7inu67DZdxJOm1T%2BaC6%2FFV%2F%2BFSF5a22Dfqf38cTZDPA7mZx5K%2Fusx3DQkg%3D%3D" rel="nofollow">http://zhige.me/2019/02/28/20...</a></p>
idea maven工程显示灰色(不亮)
https://segmentfault.com/a/1190000018344459
2019-02-28T19:11:54+08:00
2019-02-28T19:11:54+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>用 idea 开发的同学,有可能会遇到下面这个问题,工程下面所有模块或者部分模块显示灰色,造成这个问题的原因是忽略了 maven 模块,只需要将忽略的文件 ignored files 进行恢复就可以解决这个问题。</p>
<p><img src="/img/remote/1460000018344462?w=468&h=412" alt="" title=""></p>
<p>解决方法:</p>
<p>1、打开 preferences -> maven -> ignored files</p>
<p>2、把相应的勾去掉就可以了</p>
<p><img src="/img/remote/1460000018344463" alt="" title=""></p>
<p><img src="/img/remote/1460000018344464" alt="" title=""><br>原文链接<br><a href="https://link.segmentfault.com/?enc=UG8QNF0HnaIWn%2BVHYq4YNw%3D%3D.U9O1DznOwNXV7VzNL3q%2BLIXh7gagRUgP5eKCg4YwprO%2F1eUR4fPufq9BzV35N%2FArswB5z2EcXWNQ%2BoSu8VSZsA%3D%3D" rel="nofollow">http://zhige.me/2019/02/28/20...</a></p>
sourcetree password required
https://segmentfault.com/a/1190000018049486
2019-01-28T23:54:51+08:00
2019-01-28T23:54:51+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>sourcetree 不停的让输入密码,报 password required</p>
<p>1、在终端(terminal)打开你的工程目录</p>
<p>2、输入</p>
<pre><code>git config credential.helper store</code></pre>
<p>3、拉取代码</p>
<pre><code>git pull</code></pre>
<p>4、输入用户名密码</p>
<p>后面就不用再输入了。</p>
<p>原文地址:<a href="https://link.segmentfault.com/?enc=imy%2FoO8EBkPcuojjWxyfRw%3D%3D.d03pIFt%2BbAGZAqjO9n5YvOhIMsi4WIfh2fRPnapknB2SgABgbwOR4iwgXkLMTgx%2Bk86Z6oaVM7h8gCr549mKalmVQhKrIipiPe3vJWyx%2FLA%3D" rel="nofollow">http://zhige.me/2019/01/28/20...</a></p>
【high-speed-downloader】百度网盘不限速下载 支持 Windows 和 Mac
https://segmentfault.com/a/1190000017219222
2018-12-01T17:48:32+08:00
2018-12-01T17:48:32+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>之前已经推荐过几个工具:</p>
<p>【proxyee-down】支持 Mac 和 Windows,<br>【BaiduNetdiskPlugin-macOS】仅支持 Mac,<br>【pandownload】仅支持 Windows 。</p>
<p>参见:</p>
<p><a href="https://link.segmentfault.com/?enc=Xv93xhFpdMzmHrrKJmX1fA%3D%3D.EMOD%2F6%2BQPE2k5Jkc6eymZ0rTGeIoIyF%2FujRXeiJD5M%2F%2BN0xyfesQl1pc8uxqv5%2BxtgxdXtXaaXlxMSx56rMQlQ%3D%3D" rel="nofollow">如何把百度网盘下载速度提高 100 倍,我推荐这个下载工具</a> </p>
<p><a href="https://link.segmentfault.com/?enc=nfvJYkMacoE8zCwTFb4rWQ%3D%3D.Gvw%2Baakj%2BU5njd0U60jFWjC9cXcwsgPYvxSNPccySB2lyurENaajTUvK%2B00VM3yAyFeg2zepY9SySzwY0%2Bto7g%3D%3D" rel="nofollow">【破解 SVIP】提升百度网盘下载速度的另一种方法</a></p>
<p><a href="https://link.segmentfault.com/?enc=DO%2Bdr4M4rkyHI3FiFQ%2FLeA%3D%3D.ZuQMTbztJnNPwuPuK6RQFh8qoTad5YMrJEdLclVvvUU%3D" rel="nofollow">PanDownload</a></p>
<p>可能有些会不定时的出现不好使的情况,所以又找了另外一种方式。</p>
<p>开源地址:<a href="https://link.segmentfault.com/?enc=rHVrYf%2BhM09Z6VjqlgIsAQ%3D%3D.0Nl1lzsJgQLx%2B9e6IVLQTymkJkiZlCNl%2FfQMou3fFlO6I%2BCN7%2FmkrEuu2ft8fxJmjK0MHa2C4xgknQETbnSbGg%3D%3D" rel="nofollow">https://github.com/high-speed...</a></p>
<p>看效果:可以说是非常快了,比其他几种方式都快。</p>
<p><img src="/img/remote/1460000017219225?w=1768&h=392" alt="" title=""></p>
<h4>使用方法</h4>
<p>1、需要安装客户端和浏览器插件,</p>
<p>2、完成之后打开浏览器百度网盘,点击高速下载</p>
<p><img src="/img/remote/1460000017219226" alt="" title=""></p>
<h4>下载地址</h4>
<p>微云:<a href="https://link.segmentfault.com/?enc=cdpyeiNue9Nj%2FtCmAJ4JnQ%3D%3D.4RQhcwCgf9uQVyH3BFcoDSsjsqEHoUyYVzQ0Mp7vrv0M%2Fr4y%2BvrxWp%2BH1doXbZko4qw01Cb8pWpn%2BcxAhv8lUg%3D%3D" rel="nofollow">https://share.weiyun.com/2d1d...</a> 密码:7vtB9P</p>
<p><img src="/img/remote/1460000017219227?w=2060&h=794" alt="" title=""></p>
<p>有对应的客户端和浏览器插件</p>
<h4>安装方式</h4>
<p>很简单,不会的就去 <a href="https://link.segmentfault.com/?enc=KciBttZ1CvlALvFN0ni%2FEg%3D%3D.PjWxJNOpbalbIgQaBKmUciMtf3ymm4K6vlJte7CU0VzsUmscVNhlSzlBDryZ0blI%2Fa4g50m6%2BYFofvQTpZHCag%3D%3D" rel="nofollow">https://github.com/high-speed...</a> 看具体安装方法</p>
<h4>注意事项</h4>
<p>1、Mac:如果出现已损坏的 Mac 文件,或者来自身份不明的开发者,</p>
<p>看下面文章解决 <a href="https://link.segmentfault.com/?enc=BtWgk97DVqmTxv0fo4kqiw%3D%3D.1WmxGm1dx3GArmZlg2GyiEailAqvcJALUlkfXeRxemZU2Skyl1G%2Bl11FeiInNYLUnIyJLQPNSkJWPktxgofyXQ%3D%3D" rel="nofollow">macOS Sierra 提示已损坏的文件如何打开</a></p>
<p>2、频繁使用,账号可能会被限制,以上下载工具都有可能发生,但是我还没遇到过,如果遇到,我也没办法。</p>
<p>福利:我这里有一些电子书的存货,估计有上万本吧,各个类型的都有,关注我的公众号「志哥的成长笔记」(ID:zhige-me),后台回复 「阅读」 获取。更多好文也在这</p>
<p>转载请务必注明原创地址为:<br><a href="https://link.segmentfault.com/?enc=IFcfULwcjED%2F68qWxfFX9g%3D%3D.frR%2BP3DQxreG2nHQF%2BB87YygnzWhcAdVXv2oJieGi%2FL3P9C2jCYyTNaM8gUZpu%2BRPONfaJr522txNFJb51TtFQ%3D%3D" rel="nofollow">http://zhige.me/2018/12/01/20...</a></p>
<p>往期干货:<br><a href="https://link.segmentfault.com/?enc=XumJHhSSEqtUaXH%2Fn1YwmQ%3D%3D.z34GZyUvrSNwX5kfe9sOe6XTdIokYT4fJI6Cqffm06y17SVvn72%2BH31Pue%2BcdiUX42035Ywaojwe9FD57%2B%2F%2FYVLt9xrfD%2F2J1It2tOCrR7sh48rCJtOOpGy20qiMXGH%2FzLV%2F4nAPmj4yPT23utvhltPyL7SWihxzw1g4vH%2F%2BEBunenl8hiZZ9iaQCncOMDt2Vryn55kwsReBjb3v03P2lZLXrmHexwNE%2FwE1gebOk%2FB08Kg4dM1DzhOHSdL9Ii%2BWMvyFXGKCjh%2BYYzMLhgfG4Zchl4R8fs3N2AeB54qi0NUP9WkpD4U7d6KbvVZSxW7wfqcfSGPyPvgv85HsT9U6nw%3D%3D" rel="nofollow">Picsew | 推荐一款长截图和长图拼接工具</a><br><a href="https://link.segmentfault.com/?enc=FnWPaz1K0PbUTBHxBQlZZw%3D%3D.56FzK3AcIL5C7poRIqQ%2BBe1ccezjrGB1EesCCI1BiIka%2BkH9L2MqWlcA%2B%2FNORc3R6j4Z2ZCeKKkvCoCHNbd0wf7XdNUUMEo50z0q7hSEcYK1bF6FSfavveLgVbLmYXNsONr2cN3CA8TqyKeV0e0uutHJjVMuWGzHNpeW7TEebZochv%2F11xJ4UmUu7ViUU%2BxlpD%2B35HRQnPfxd7mx%2F8PaTNuBLnjItECVASwecSUbdDWRLkaC4TqG59uj2lGJOmWHuJ3fTzF%2BvUfUvYgHn%2BE0Qz7N60kiZ3uS2n7aLeqrGBhi4jbv6Zo6L%2F8ILm3fxHzhhHL641X9VR7fY8pIX049Ag%3D%3D" rel="nofollow">滴答清单 | 记性差的人不能错过的任务管理神器</a><br><a href="https://link.segmentfault.com/?enc=aoYXjPNWwguM1oIfrfs2jQ%3D%3D.goc8NiVoW2c6ZXO5G2CUMNyQEVMlYtmqeQ1ou2%2FE7kbFDq1tBIHY4q1wD4Q7a7O8GrI4kxDyPap6vSceDZ0CZDZ28RtMBzAVpwJdkFqLMFo2FThnHvEBfXcvf4HqfinG%2BLeS%2F%2FjCqDuqua4aYkdgudqFz0p1sNV4RqK8lF4Rma388nb6d7SnKOUE3pScAETBrLjUzKDt6y%2FRsKJ3TXXPlW%2BN6y2y5gMQUbCJFNISJ6KXDQjFvR5zed7bIcXnVScr%2Fjwxx95zKF%2BTRjduxprGteM4vhzJaPS982LzKKEIoG2WnBJ7nCc%2BtX4KMYX6rET2zZ%2BJMlmJBbk6Cv1DPUi3JA%3D%3D" rel="nofollow">别告诉我你会笔记,告诉你两个实用技巧</a><br><a href="https://link.segmentfault.com/?enc=cQ2gd0fUIooyTEADmpVGsA%3D%3D.vGx4jhn085FmeOPJytHrCgbEBLIfWY1giMRGVEBT4TspV1f9X4eTYC9EiV%2BTaCz3PBJrIWd3Oz6ey9t765TQ%2Buv%2FSu21PD0ERunHQ%2F%2FrHSXyimPHWCckXdnq9jZj8Yk2v7ezCz37B0Pxb46VnxX%2FwPO9KcZ0IZo4m065%2F87eGrCgzoQMXc8ubp1Q%2BHhzXupZ2nR6HZZqq5KDwOqxtniEvup9ZTk8JPBKdlv81fNgk4VP2f1mpBWdD9U53NUssIlhNK5ZVCEkYt33Ai29hAaYpAnML2NzeaoX9oD7rl%2BhiRKCSqLzlDDy%2F7LvMw0KeH8K2kDlBl55NbOxigzDUInHaxdb0hrlf5cWdOt2udB82Mg%3D" rel="nofollow">学会这几个搜索技巧,你的效率将提高 10 倍</a><br><a href="https://link.segmentfault.com/?enc=pWRv49D3p6qRbQfDTtyVtQ%3D%3D.GCbSfo%2Fk1Jh7MVGMy0JWFP%2F89UiKVfVIJuawMTgKUWlx4d79LHUQHvAneifRYke%2FbYjTHdMZc9T13JI5fg9mRsHKtttuzxqfrKk05RWvmjJLaXDPeWQarXIQDMi22DPQeyqx6iP%2B1mzF5amE6fT6G0ollTyVhT6Ykcudb8emd4UVQNQqTvp0euFpLQlmMThStbOZeP6du9gWhbrPhriwYbQ2UuIvgOP0pENWhgmV8wMok4WZ1VzyliSNuONVuftcASi361VKQNihFmlD67qgn%2FP3y1BwTtcBcfRGd1%2FADaZHIJcH%2BG%2B%2F2XWSws7XB2QKTmCge0a%2B4zCaBPSwCTc38A%3D%3D" rel="nofollow">白描 | 有了这款扫描软件,从此摘抄更加方便</a><br><a href="https://link.segmentfault.com/?enc=Dw2f2clbsCORUkIlent4Og%3D%3D.vtq0uCiiOS1V7XguYAD5lxo5lOLRRCbRLLL9i5YC8B9nbckSUiWTrEvL2Efre9RIgjY55CEh%2B3Kc9t6lhscCpVyBpm4GdmQCO0DCYf7X4DY3ecIJYHd8OBLaG03yyMbeOw%2BcfzWQdRsNr4VTSILC0S%2BK4Vhj8sX1nMtPc51%2FqTHJaFI7zFNiXMpJV3pzYQyT7dE56g677EvEvt%2BO%2BorHxkksDHIL2xT9KbgnDpnp9q5piPcxF4B9mhv5LNcv8re3IidEMIZE1xIKWL0mhsCiaUJpMMgtaZKOEblCT6jgd%2F%2Bx3EzXYtEvUq3jGpuCxXtTopE7gWWfI3tv9lTLMfZG4B4YpvpgCj0A7XalU2rvzDg%3D" rel="nofollow">跟着 Apple 中国学习顶级中文文案排版</a><br><a href="https://link.segmentfault.com/?enc=wT%2BxAuurUXr25Tk649OXcg%3D%3D.zjYea%2BjKosuvWUMP4D1xMEaJzOW5eqWxQd0DNGQrCNInY4eUybq89CWM77LEpIL9kdYHp9wdG3HcsK%2Bs9yHu1f%2B6HJrSVLsocOWg9i2G6%2BLknpUZVdh0wcGEkAX%2FinxlBfbIMrcMtP7UCqScSlkgQzjpWyyvl3i9oA3l1N%2BzRoY3AT9fYF3CFQfj28q8VI9AnfhnEZn%2FMHLNvQlqFQ2zCSOICPqVdrJALXNUujalNTEHfp17oV7NfUEnK%2BJDw3sm2hu%2BdyOEinbec769Z3VujBNUFYSI%2BsULbKkbXnYu4sR6CLfWUU6CpWI9NjyW7%2Feb3WqjsJogV0z132muVWYrRnAtN4dsoqlY9Vxz0MWGB%2BM%3D" rel="nofollow">推荐一个免费阅读神器</a><br><a href="https://link.segmentfault.com/?enc=5RXgFCqUCNqc0uGPprSa%2BQ%3D%3D.9R%2BDmqRHsW99ENdXbMwPtCx3hQ2qhjrTCXni57oO9cGmmlMlZPoNi1wDzdyRpJ9OcfDGybRJ%2FXTNkq6tHI8jZkD5uh1IKe%2FxACpHEUzzWyea9QAcpTsyx%2BkhmEgOzM5tjtspAEMAr2XArWSjZtPaJO0oBvbOSuouv7ysTg%2B5nuZ5%2FX79OsdBJ2aAQoVnKGacbHoZ6DlRVlWMzhWyK4NSIDsvDKINBaUbpaZqI%2FZO6F9o9U%2FM1bExy2KMzieKoJgqvK28siyE31CMbFbRjoryEo%2FpR22RapGFD6R0K76EIHbssRknmnuuqsfvGhICT79rOGSUJIv8foWKcX2BisGBi%2BL5VlTR3%2B%2Fen2vUmH56Eww%3D" rel="nofollow">推荐 9 个免费图片网站,我的存货都在这了</a><br><a href="https://link.segmentfault.com/?enc=aWfvtVV%2BXkqYM8PxNYhRAA%3D%3D.TDyCqRnXmoIahYcyvTtGaYiHTQbU%2B7D5I%2Fm%2BNxpWEPFCSSD01PN0D0F9pBGXZLnzPiAh6U8ArPgW2yt4u8D5z7xuZKmfcZ0wlE7UyJ7cCZk40Sr7NTHY0fypzL1l3JeCiHroc5cSQxA02ymYrapoOsiBpEifbO%2FrKwt9JEyUF50ijipPchzxCUuTW1L68Xu9IC3Kc7zYSHDcshaq2%2Bz5GCsXL3zIolTAI5WQNBSzU%2F17N9r21rHToWEtmaFzaReOWZ0YlMkljVe95wI%2Fn5skVkH%2F8lwJzsLI3I0oy6ZVw8zT1IyHUS1T3ytjkBVwSoJLQ7lVzWnuleEumVOViv9B%2FqEin1i1SplEENRGzkapHrQ%3D" rel="nofollow">推荐几款公众号写作必备工具</a><br><a href="https://link.segmentfault.com/?enc=pgm23z2qxCDYf3WgTDXS%2BA%3D%3D.7LBvDEebxEQ7jcyfgey9bMs5ftaWKsbUEKvVFmn1HG%2F1Li0Np1QkKEJ1rH9U7y4OCcqlrInXpKhQRFk%2Bp9B2otfjEvgyB1jYatoF4ZT7sSEf5r%2Bgg9edJax4JQJar5sfLRvN6RVlT%2F5s0yiTVKuCBY6dsJRc4sAyMj83GtbOGb%2B0vwhNL8WDu%2BcDWIXvh6pU9Q9Nano0r78%2FXNcNCGDApT%2FhJ6PuhL4ZrZ5p57f6K6ObzOrtzCGXxrsgeQRKkBs6puTo%2B5uVuIjqBCf7q9aLkKpWXXAVLO5cAi4DmS1eo%2B8BI5NGNTekPRW%2FTE8tVrdip9H2Xm%2FL2T0l5jfOdHZTxwbvQjHrWdQZdBI6FigjsLk%3D" rel="nofollow">如何让豆瓣和 IMDb 互相显示评分</a></p>
<p><img src="/img/remote/1460000015935780" alt="" title=""></p>
【破解 SVIP】提升百度网盘下载速度的另一种方法
https://segmentfault.com/a/1190000017217872
2018-12-01T15:15:14+08:00
2018-12-01T15:15:14+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>友情提示,如果不好使,可以看看其他几篇:</p>
<p>其他几个类似工具:</p>
<p>【high-speed-downloader】支持 Mac 和 Windows,<br>【proxyee-down】支持 Mac 和 Windows,<br>【pandownload】仅支持 Windows 。</p>
<p>参见:</p>
<p><a href="https://link.segmentfault.com/?enc=OZhRpnWi5qluTa7VO2cfvA%3D%3D.tReBbYApYchoZYwQA7icny7WzRs%2B0EE7cOPbhZMwdeh3RcJ3aaiTRQDo%2FrvdbOVb5KQNRybGUK%2BErZLC8MmTVQ%3D%3D" rel="nofollow">【high-speed-downloader】百度网盘不限速下载 支持 Windows 和 Mac</a></p>
<p><a href="https://link.segmentfault.com/?enc=APDFUdJ77lMSbpXC7%2BNrIw%3D%3D.F8o7vlc7mpV7Tyvk7rvWn58bGz83JHlh5%2FPY6hR4hrP%2FZwiw9yaqumEnE8wZqj5fAL%2BiPWy2U2YzCz%2FJ5cNPHw%3D%3D" rel="nofollow">如何把百度网盘下载速度提高 100 倍,我推荐这个下载工具</a> </p>
<p><a href="https://link.segmentfault.com/?enc=wQPjJYN6JwKddNfITFV%2FaA%3D%3D.xtJpqMVTshwlGBL3TwnRw0aSsQnTP8LZauQI5lbhtaw%3D" rel="nofollow">PanDownload</a></p>
<h3>正文</h3>
<p>之前写过一篇 <a href="https://link.segmentfault.com/?enc=LajEB1v%2B5PgbHyR4lS1rhQ%3D%3D.1sHvONkbx4cIRZ%2BoN2d0rc07zP%2Fs4n9lWxaVb0DtppLrEih4JRJUlc%2BCbo%2BOxG9TBMzIMDxJGNVpXrQMgzyNFw%3D%3D" rel="nofollow">如何把百度网盘下载速度提高 100 倍,我推荐这个下载工具</a> ,</p>
<p>用到的工具是 <a href="https://link.segmentfault.com/?enc=7I50ZYPsTWCDyNdgi64Gdg%3D%3D.qBeEQiQPD%2B96rurf9XvfsrBQyieoU62%2BEnptY0kk14kLnlNIq%2Fo6W7dvVI0utg9hxYNBcwYsgCkjvfALGG96AA%3D%3D" rel="nofollow">proxyee-down</a> ,地址是 <a href="https://link.segmentfault.com/?enc=3YJyUTq6csFZRWaxKsMXhg%3D%3D.%2FkN2sAJrCYWBsMnitE3gU2pMg2aMZWnasHy3egNKDWvgRsRGTcCN7GEvmKDhR3iVnmmYR3EPmwF3qJmcbjoHYg%3D%3D" rel="nofollow">https://github.com/proxyee-do...</a> ,</p>
<p>不过有时候它会被限制,百度应该做了封杀,这两天我也不能用了,就去找了下还有没有其他的方式,然后就发现了另一位大神的工具,地址如下:</p>
<p><a href="https://link.segmentfault.com/?enc=%2FP9JuuqFWGv8sl8tAz55RQ%3D%3D.KD8OGWKfdrO1H2%2FPU5%2ByZK7p7nUk%2BVlabwjOxxoMm2AMRZxHFzDAsvc%2FVYAXBZbhS79TRpMI3haCaNk4xIvA4Q%3D%3D" rel="nofollow">https://github.com/CodeTips/B...</a></p>
<p>这个是用破解百度云盘 VIP 的方式,提供的是插件,不过只支持 Mac OS。</p>
<p>看一下效果。</p>
<p>关键点:左上角的 SVIP 的标志、下载速度、试用超级会员剩余时间 8 秒。</p>
<p><img src="/img/remote/1460000017217875?w=1698&h=310" alt="" title=""></p>
<p>具体方式,上面 GitHub 链接里面已经写的很清楚了,其实是通过试用超级会员的方式,并且把过期时间设置的非常久,也就是剩余时间永远定格在 8 秒。</p>
<p>简单说,<strong>基本步骤</strong>就是:</p>
<p>按照地址中的步骤安装插件,安装完毕之后,重启百度网盘。</p>
<p><strong>优点</strong>:</p>
<p>速度很快。</p>
<p><strong>缺点</strong>:</p>
<p>1、只支持 Mac OS。</p>
<p>2、必须安装百度网盘。</p>
<p>3、速度不稳定,如果发现不稳定了,速度降为百度初始的几十 kb/s,就要重新启动百度网盘,重新点击试用超级会员。</p>
<p>4、下载过程中,点了暂停,再点开始,就不生效了,只能重启。</p>
<p><strong>注意事项</strong>:</p>
<p>1、插件安装完成之后,启动百度网盘需要输入电脑密码,作者有说明。</p>
<p>2、频繁使用,账号可能会被限制,作者也有说明。不过他也说了,这是他猜的,他一直可以用,我用了很多次,也是没有问题。</p>
<p>转载请务必注明原创地址为:<a href="https://link.segmentfault.com/?enc=TzOHL2ZfpTe5CtK8wiN3Ww%3D%3D.tPwCGapDvAP19f4M8LB6svWZNgKC8tb2U8YWvIG7q30sgMhz9oFX3gdqNZEQ9KOp9fD%2BSOwAK5DFeFPkT3CGgtm5tmR8TFJg3dI8C4Da82aorw23gdIYqj%2F%2FRGE2UCC4R72nOYLRryVZRsxw2%2Bs74EaJKmY4okAm0n0wXh2QB2yIwZ0cZOsH0yMQweTq5RfUxjgwKQX9VAUr8xYGBEp2%2FsCKN%2FboeEyGaYcPY4%2BVk25f8EY%2FTNSyDTz0St8Lxrb4avi9fTnhNjozLSvsDP%2F1ZPA5GMf3i3XQQVLVmzj2FqU%3D" rel="nofollow">http://zhige.me/2018/12/01/20...</a></p>
<p>往期干货:<br><a href="https://link.segmentfault.com/?enc=IGP%2BPSUIV84RT7ggN4H8Rw%3D%3D.SVG0OpdZ9nWHVQWC9zzk7796MGkePlaTVOgCwU8TWYLT4tW4W4cplpxxAF9ltysnaZDXc0IRqv82XuWsCc%2FJssH2XYPy5MRkWhGolS0ZC6Pz3T9EPXFDlS40DW5qAcjrqx%2BHo6YwlH%2B8avciqkrskqLVtPHUKKbUfHLm%2Bx79WwQz55Fk662Xw%2Br2mrBWH7LyqPTyUaWjGW%2FEmfen7%2B1uoDZJnLBt4IiiMFhEgGDRnk8YV%2BOOMHYth9ITU1hzz5kDadS7FTKoxVJTIqB2YK1MzmzsiucoUkfuXdG%2FVt%2FH39cxAmOXDK29lKobu68to9RUG%2FoDMnpRC3ax00TBsbUMAA%3D%3D" rel="nofollow">Picsew | 推荐一款长截图和长图拼接工具</a><br><a href="https://link.segmentfault.com/?enc=pG36yUc1yKDoEMpbipVb1w%3D%3D.ZlTFazK6fmeGedBEA6ZGtWUI67K2WYQYlk483f92ZYpkpzjRXdwV4%2F9s2S8HHGPKkYDi7X3PBmFCpN0QvjMC2H%2BeqSIhPMKalMAiKkF8Q%2BJdf%2BFlv1sU2V%2BFWKSOg8hLBAtiyzjOkL1SJ9NOakMWKbGwCHtZ0%2BB7WWjKYTYkOJbSV4z2vSXMAHG8HXHXBsnK%2B%2F1Ns%2F4Zyz3hDoNya%2B%2BCc4gLt53ux1xBAu97bnyRx1EVl7S3ouVEV5zMt8%2FzKiJdwCW3zsqIFWWVzkvUGbsfZzKROMx0WygG8c82gI2BBgm40UMmCACa2JYdw4ifSh4tk%2F5evFU5Ml8khm5NFtPKJw%3D%3D" rel="nofollow">滴答清单 | 记性差的人不能错过的任务管理神器</a><br><a href="https://link.segmentfault.com/?enc=adS5RQndWgM9IgY7JuthAg%3D%3D.b5M3Sk74qRXVFQNh6q9XgHNJH6bW72DlPGKXN4Du9zHuEsKiOtsyVp14IZJ8Pus8eUlzMHce%2F8TIup1I1w1s24AUuGTw0hH8%2FmCFTBkX95MQc5aEDAnZdvBOyRXn2SrCfsnljw7d6kUYGC3kfGCONu8qf5J3EvAjCeWjOza8AsDkBKXv4F9g9LS4YbBTmhi2x3SbvaR9%2Fj%2F2ttl5BEbI6CmcRxxVrfkzMrToH0apXaWqHigeSoqxtRpNPQM%2BYlhRdTux%2Fg0me7j4uT0IJyPzmn1r2Roes38dFv6G31Cy5dBv15%2FzkzX39d1IBVnVrjPVeCYUuA%2B4U26novTLlL2k9w%3D%3D" rel="nofollow">别告诉我你会笔记,告诉你两个实用技巧</a><br><a href="https://link.segmentfault.com/?enc=FkJ1YWwm5xlkWe9WIrKgzQ%3D%3D.Mtx%2FZnyB6F4jvsQDkvRhTgwilOaNWXKqeUMP9kIyQ%2F4hPaAMqiGegnq76zv9%2FWmqr44tOl2%2FcDH2HHOqHGZ9Ygy5y%2BeLQX3MLu4zV35kGUPyWW%2FYp1YJ8DVH8kwmLJv9VHTUSThQb8NaTpFZWCALPS8OKYmTezF9tJU4kEDfEnY0v1T7gX1gRhWg2K7cbughwdRHj7x%2Fjj%2BE2TiQQopdAWt0fEvBJeKlL2p7z9Bn5Ryc44KGKUnZaCRKSJV3k65hdUqN5r7zZVsiDFPZAHk7TKKQHaaOWI8f2u0Lcjy8kW8HaDvTUCebbj8LhrMk2bVL%2B62df72jZWU%2FbXHwGppQbhNpHLn8%2BvUL4kZLUws%2BssQ%3D" rel="nofollow">学会这几个搜索技巧,你的效率将提高 10 倍</a><br><a href="https://link.segmentfault.com/?enc=jA9i7nbiqSarPJGQ4BdULQ%3D%3D.weNakfXAuwb0A7FAZSyDEK%2Br5G8i7nddEThYyMgjBEvNW6rRcwJA2nfl3ZzzzFjBoeEVqD%2F9BBLKLm5fjjJd1oVSRUpbEjDTtK8aXde%2BOLJJhj0RVt4MUHiZQCXWSQGCEiKitXTI5b31mxbfN9hLMbnmYxVEOSFls5uTGo207EjBvB2kvNB47EDDOqt1QWopIjdRFxMuehlv7sYpHf6RY8WwKUyZ5e%2FV7tbEWZUf9lUvXDqX%2BgzupDGGpVAa%2BrAQgxv1h%2BP%2B67W4MmzhLV1eDYYpdf6%2BDSv4sK3O4CFWIoFmfTanF6TK%2B9o9mrPvkLpIYthSVJQPJXWat3ihvV8lSg%3D%3D" rel="nofollow">白描 | 有了这款扫描软件,从此摘抄更加方便</a><br><a href="https://link.segmentfault.com/?enc=4uCNovS%2FfOYQQwEnHDwfGw%3D%3D.NFtlHg1oZyV9AsSyp1v9cQEVJxQ9KR7fLNJKk%2FOgUPfsPpfElOwYPrXV13H37UZBW%2FLLNGQDg5LpT3mzjrHbxkvWB%2BdJ%2FnCGaWO%2FD6QiGARCkLUNnEB3wVNdx%2FWVVpkc%2Fv1NHlePYzqgsKPiYwqzcPSlDcG7ySg37nkV5ZwRvHnKLF%2F0NaIRfUkZoxJiuxFpnJeewLwBK%2FVk5kKLiAFTIdmqmefUePmDU%2B4VkaIyue9QcZi%2FvSr8lcFkaxCFW05990pqNdH4X1ISqjMgpv0uvdfBJrP7Z8m%2BRfSCf5nAMiLMZc9g2xX83Vg%2FIgStC2uK3PKTzVkUZAJ42goLa8bWWWkrWJfjD%2BOtkq86m1rps40%3D" rel="nofollow">跟着 Apple 中国学习顶级中文文案排版</a><br><a href="https://link.segmentfault.com/?enc=LceB%2Fj%2BDj0HZL2hQlaOWiA%3D%3D.P4BFjXjNHoc45ODpYWkettA3AmTREL5Lc3LqJiR4ndZYndJrssztYHWa7gmZJpdZeIG7TOGs341T%2BNLP4iKumeZbWIkbKJcF%2Bb5mVClmAw1ZlQ4VsdTm6ltWBt5kR5DOCgYfS2DZNQCqWdtH7lLGuQVYjftC%2B8uL1Qxo1CVf8LNr77D8d2K1%2BxH6KsL7Q5Ak88iwdgFH7aasSiapXuhfrbPasal%2B3QViAhXAuW70gX9hXN3iG6EtJ98bPH2zcFZO%2BqTIpEcxyL%2B%2Fyx%2Bq3zsefA1omhHRNP6A4RgKxZs%2BNjKC2iWUn9llOgV6iK7EMMQSDRmZiogJMbmN6ckPMSicvMd8as67fe6sV7jMnQVphNE%3D" rel="nofollow">推荐一个免费阅读神器</a><br><a href="https://link.segmentfault.com/?enc=KTmz%2Fcc165%2Bga67RfVzgJw%3D%3D.QINIW2absOSE2OJVyI61YSzMmwxcNPKQgAcGGNb4OmVjKF03sJWhfTU3M1nSn%2BlAf0bqa6QV241876SKH6e7bOC6b6KbTkMJrI4CC0UnZaJxPjyTF6xEB9%2FjQOe2YMpfhdh98O4gyLXQRBVFZDHuU%2FfqvRoNkJhn6gJazHR8MCfJKn5d%2FEmai76b1m6NQmlfTVW2tDrmz%2FptNaz247VOznXnx1utIewm7Qv6lWWsQiBceJZdKzZT59wigiFjaIMmRkTjlGvRvkEI6OCYP7ILYIo1t9GgZ%2FOt4aqmvwyw0WqTBvYbbVRd5Lv2F2gbKiK1bkWue9ISnZNwe2x01ujdbPBGBIygiPcBuO1Tsr1MIbY%3D" rel="nofollow">推荐 9 个免费图片网站,我的存货都在这了</a><br><a href="https://link.segmentfault.com/?enc=uYBXW%2F9lqB81hgVdLGG1Zw%3D%3D.L0UWriWtF5Qv77zIp%2Fo2OMBuKqFsil%2F6ZHdYOvVPoXlPYPH%2ByTwhGMtVxkOyl3wYFM0yP5lVY4R0vLp9UqboJkwozwtAEzd%2BErceLCIV5as%2Bvdhrhs5KDA%2BjIGHx7HpzTjhwvT%2FarH5Z3bMrNIQozM06mS35cog1Xvaj240RcZxjCB8NfFcgORua93SqFWtK2zDRlihG6k%2F8h59OIObTk4EVkWD47AZLY5HBhUOSY53i47HewI8frS1H4ArFmwqr3KfMDNmyICveaBIieX5QdUNs3ssbTu%2BAym0k1%2F8y2Bq0av5XNlsaRvKopOA2qLfxENZ2IP%2BOsnJSryZYDJVp2rWBcyY1F2W7iVUG%2BspI9OM%3D" rel="nofollow">推荐几款公众号写作必备工具</a><br><a href="https://link.segmentfault.com/?enc=I8c5uqY501AI0mUMua%2BAWg%3D%3D.s9mFoW9o%2FSJ3ePmb3r0xza24xjdAyODhi9No5ok%2FxjEPLSiOafh%2BfbctbspIgSvPFMBotgmgMdXxDp0fF%2BIhtItvwrrRSQNb9svU%2FkUAzxNgkXnkYFwwhEO2gfQBlylTQBIfF%2FLgPaRlBpvGG3iZCLj73NeCNML8ZsZrvtkZXcDDCEiF5eAxHKG1uNdip6s8aMBRfhRQ58G0vESskH7Hr%2FPRmJau8P1EtMcpcAW2gAJUkquGPkwqWPdpo%2F28efKvsfmDoxzSN87Hvm9BzQL5Fs7bNpAHkQn1iptWmXosDef%2FTixuAsMKQJkNp3W7uimqPvnjyVO54iUxeFZdKbPuzCp4KjCtLv0OZKZqtuQYBLM%3D" rel="nofollow">如何让豆瓣和 IMDb 互相显示评分</a></p>
<p><img src="/img/remote/1460000015935780" alt="" title=""></p>
推荐几款公众号写作必备工具
https://segmentfault.com/a/1190000015822555
2018-07-30T22:58:18+08:00
2018-07-30T22:58:18+08:00
志哥
https://segmentfault.com/u/zhige_me
6
<p>有很多小伙伴说我公众号排版不错,我喜欢简洁清爽的风格,不喜欢花里胡哨。</p>
<p>这里介绍一下我用的排版工具,当然还有其他几个我写作用到的工具也一并介绍了。可以说,我写文章用到的东西除了脑子和手都在这了。</p>
<h4>1、Typora —— Markdown 编辑器</h4>
<p>简洁好用,功能强大,用了几款比较之后,选择了这个,然后就一直没变过。</p>
<p>地址: <a href="https://link.segmentfault.com/?enc=hbTuWNPEPLFOW%2B%2BsMdZcdw%3D%3D.5O75Dy2tIMtbXmzgXCrqzpjDmPQXJBBD3t32uRZQTe0%3D" rel="nofollow">https://www.typora.io/</a></p>
<h4>2、iPic —— 图床工具</h4>
<p>图床神器,Markdown 写作必备。</p>
<p>支持拖拽上传、复制图片直接上传,在菜单栏可以点击切换普通链接、Markdown 格式链接,非常方便。</p>
<p>可以去这里了解详情 <a href="https://link.segmentfault.com/?enc=S11ijtGkLFytUQkc%2BJO%2Bxg%3D%3D.aq%2BF5mv09niImIPW4rndVGkIlcSVPnB7kSXxrLn1aNE%3D" rel="nofollow">https://toolinbox.net/iPic/</a></p>
<p>不过不支持 Windows,Windows 用户可以自己查查有没有类似的,或者看到本篇的小伙伴在留言区推荐一下。</p>
<h4>3、排版工具</h4>
<p>市面上的排版工具很多,下面推荐的这两款是免费又好用的排版工具,并且支持代码排版,程序员的福音,当然不写代码的人用着也很爽。只需要把自己写的 Markdown 格式复制进来,然后就排版好了。</p>
<p>第一个只支持选择已经给定的格式,基本满足大部分人的需求,如果对排版不是有洁癖的话,只用这个就能超越大部分人的排版。</p>
<p>地址: <a href="https://link.segmentfault.com/?enc=FJJYBz71Oj2%2FuaIZy3Vspg%3D%3D.Wn%2BJgq3U5QG5yaGor3ndTyiJEO%2Bxu0OOUQWVxGWgjZ8%3D" rel="nofollow">http://md.barretlee.com/</a></p>
<p>第二个是可以支持自定义 CSS ,修改成自己想要的格式,当然也有默认的选项,跟上面那个一样。我最常用的是这个。</p>
<p>地址: <a href="https://link.segmentfault.com/?enc=YEqSWXblgzHl8jfTXzG1rA%3D%3D.%2BXZOEGqXpn62H3FRclL5N76PGRfDYxngs%2FSHLPsKYbI%3D" rel="nofollow">http://md.aclickall.com/</a></p>
<h4>4、思维导图工具 —— MindNode</h4>
<p>其实上面三个就能覆盖大部分的写作了,不过有时候还可能会用到思维导图。<br>图文并茂,方便记忆和学习。并且分享的文章,别人先看看图,也大概了解了主要内容,节省读者时间。</p>
<p>地址: <a href="https://link.segmentfault.com/?enc=MJmozWFqR1%2B3ydiYURuigw%3D%3D.p7QTgronZJBWiqzSUebmuEGiQEAQ05TJtOiKSg3EWXA%3D" rel="nofollow">https://mindnode.com/</a></p>
<p>这个好像要破解,Mac 版的我有,破解版不方便公开分享,并且链接容易失效,如果需要,可以私聊我。</p>
<p>相关文章:<br><a href="https://link.segmentfault.com/?enc=qT5v5AKRYxV%2BeLuc8o6vbQ%3D%3D.boSst0GQYPJkGEpiNDmG7pi33OITeNBjOb06h0Bx9VoNXqeTNj0XpYigb5rh9HHP" rel="nofollow">如何把百度网盘下载速度提高 100 倍,我推荐这个下载工具</a></p>
<p><img src="/img/remote/1460000015712916" alt="" title=""></p>
读书到什么程度才能算融会贯通?
https://segmentfault.com/a/1190000015811111
2018-07-30T09:49:00+08:00
2018-07-30T09:49:00+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>我是一个喜欢读书的人,因为面对这样一个复杂的世界,我渴望了解它的真相,我想获得关于这个世界各个层面的知识,从而提高我的认知,进而成为一个不糊涂、有趣的人,这就是我的原始驱动力。</p>
<p>我们也应该都读了不少书了,但是始终有一个问题,书读到什么程度才算通汇贯通呢?</p>
<p>我觉得可以从两方面作答:纵向和横向。</p>
<p><strong>首先是纵向。怎么做到融会贯通呢?就是当你读一本书的时候,还能推荐这一类的其他几本书。</strong></p>
<p>比如说我前一段时间写了几篇文章:</p>
<p><a href="https://link.segmentfault.com/?enc=b1kmk58SMAwlR35OhqQEAQ%3D%3D.4v%2BLHyo1fktOx3kwLkl1RGNT%2BzCJ32lvzjO0mLIJEGDNrb%2FBA%2BsGH1XlkOqXRsqDvGLLUXNl5EcVsm5i5PbDVqFMNC8fZLMXi%2BBkUN5054f2EymLbrLpNBqp43wyq2OTDjEqnzWQUw%2FTXHIHHeNG2YZSoOyZ30MCiWjscmnkhi%2Bm515xmno8PFrQhjI0vRPBQhWsplu6PiKnpFQ2fSAyzwDiGS9MxQMGIlGAQh7RCBDqugRh01voqiSOd55t%2B9Z8i4zMGICi5KSsocgiOxh%2Bv%2BWFy0aNzXrxr8klLcAQ8dU%3D" rel="nofollow">关于读书,请你丢掉对书本的敬畏感</a><br><a href="https://link.segmentfault.com/?enc=O8h6FDm6i57V1c3p6AwMmQ%3D%3D.tE3nZhR%2BvzdtqUS1dTlc5sHKzYn6Ptdk3GBWdIa9vHJqgGvx0ATausA4%2B9evNFBdo7sHZNUZfyeo3tf7qG615H3kNuGPK3NuqpD81CAr3zWSRyxXC%2BBII9OoFq58fImCptCrdjxz8W52qc3w7dBj9EPCoF39BHkc4gaU9r%2Fq%2BC8B02tAW2MZ3Fx%2F%2FRCswIBjsSKVUZMWIb%2BSG%2BJ40FjVCW0onJ5AJzuGBYqnRFjwFnG%2B%2B6TwVF63gldqawrargE03t8ERw094YvXThF8x%2BRNclYNUaWYFWM86zhKXyoXHIg%3D" rel="nofollow">关于读书,为什么需要速读?</a><br><a href="https://link.segmentfault.com/?enc=PzO98E2hvrqNt79%2BXpCEWg%3D%3D.7%2BJ2Rey7d8C9AXq1WFbu6njS3QzdI%2BPTSjn8Nm%2Fcgqt9QV2w7hmJUA9SARcehVOYhIJsNKXmf9Uv72ICCtQxkMOM2%2FlWiIvfe5fr8y2E3ZGIaAygtGFcQBkgFpOZOaGhgauOT3Egk%2FP5eNZQjSpSomhxmFnneifp8DPO9f7ieBBSZn4eLVoBxf9NHP%2BIcLesHisUVtT8bxoVV5ckAJF2vZ6kK9t2jwUOSZg%2B6YSQdQ56cznK85ZKUyRI4CbG4V4fhTJ03eV6lD9gHLKWjQRD1vMj3m3T2Ao67k7OjBlCwPk%3D" rel="nofollow">关于读书,千万不要忽略输出</a></p>
<p>只看题目就好了,想了解细节的可以点进去看看,其实这几篇文章阐述了读书的几个基本步骤:<br>1、摆脱对读书的敬畏感。就是别怕。<br>2、速读。先看主题,再看结构和脉络,找你想看的重点,提出好的问题。注意这部分一定要不求甚解。<br>3、精读。根据你的问题有针对性地仔细去看。<br>4、输出。或者叫反馈,这里指写作。</p>
<p>其实我的观点主要是来自于我读过的几本书,并且我也是这么实践的。如果你看完我这几篇文章,觉得要是志哥也读过这几本就更好了,那里面有个什么什么观点比这几篇文章要好,那你在这个小的领域差不多就算融会贯通了。</p>
<p>列一下这几本书:<br>《如何阅读一本书》 ——莫提默.J.艾德勒 <br>《这样读书就够了》——赵周<br>《如何高效读懂一本书》——秋叶<br>《如何有效阅读一本书》——奥野宣之<br>《书都不会读,你还想成功》——二志成</p>
<p>当然还有很多其他类似的书就不多介绍了。</p>
<p><strong>另一个是横向。也就是不只是读书,在做其他事情的时候也是能够用这一套方法的。</strong>我举几个例子。</p>
<p>比如读源码,我是一个程序员,平时肯定要读源码,有些人一听到读源码,觉得那都是牛逼的人才读的,我等渣渣就算了。那现在我们套用上面几条读书心得,来看看这个问题。</p>
<p>首先就是要摆脱对读源码的敬畏感,很多人怕读源码,其实这种心理大可不必有,你想想看,你新加入一个公司,或者接手一个新项目,如果不是你从头开始开发的话,是不是需要先了解这个项目的源码,难道你自己项目的源码就不是源码?只是那些优秀的开源技术框架写的好一点而已。</p>
<p>第二是先速读一遍,根据需求文档、技术文档,先去了解这个项目的大概内容,找到关键的点,提出你自己的问题。同样注意,这步要不求甚解,不要去跟某个小的函数里面的实现。</p>
<p>第三是精读,可能你急需改这一部分的 bug,或者你想弄明白这个地方是怎么实现的,这就要你精读这一部分的代码。这一步就要求甚解了,每一行都要明白是干嘛的。</p>
<p>最后是输出,把你遇到的那些坑,或者这段代码写的比较好的地方记下来,留着以后回顾,还可以分享给同事,或者写篇文章,加深一下记忆,还能帮助他人。</p>
<p>你看,是不是和读书一样的道理,读开源的框架也是一样的。其实同样的文章我可以再写几篇,只要把关于读书改成关于读源码就好了。</p>
<p>上面那个可能比较技术一点,再举一个生活中的例子,就是前几天发生的,我朋友圈的都知道我装了个桌子,有人说装个桌子还不简单吗?你先听我讲啊。</p>
<p>我和两个同事合租的三室一厅,我们买了三个桌子,要自己装,刚开始一个室友尝试了一下,说不好装,我大致瞄了一眼,加上他说的话,也觉得不好装,于是就在那放了一个月,我每天没桌子也挺痛苦的,但是那句不好装加上拖延症,也就没装,其实这就是对装桌子有点敬畏感。</p>
<p><img src="/img/remote/1460000015811114" alt="image" title="image"></p>
<p>上周的一天,我决定必须得把它装了,这就是摆脱敬畏感。</p>
<p>就去客厅,先大致看一下,什么螺丝应该装哪,桌腿该怎么放的,这个大致的过程,我们可以称之为速读。</p>
<p>然后就是一个螺丝一个螺丝的拧,这就是精读。</p>
<p>最后把这个安装过程分享给室友,就是输出。</p>
<p>客厅没空调,流了两斤汗,就没给室友也装了……</p>
<p><img src="/img/remote/1460000015811115" alt="image" title="image"></p>
<p>最后一个例子,是我表哥的例子,他要给孩子剪头,一般人肯定是找个师傅剪剪就好了,你看他是怎么套用这个逻辑的,当然是我瞎想的,他有没有用我读书的心得我就不知道了。</p>
<p><img src="/img/remote/1460000015811116" alt="image" title="image"></p>
<p>首先摆脱敬畏感。不怕,不就是剪头嘛,剪就是了。</p>
<p>然后是速读,剪头嘛,先两边后中间嘛。</p>
<p>然后是精读,一下一下的剪。</p>
<p>最后是输出,分享一下剪头心得到朋友圈。</p>
<p>来,看看效果。是不是很完美?</p>
<p><img src="/img/remote/1460000015811117" alt="image" title="image"></p>
<p>不管是纵向还是横向,要做到融会贯通,都要多读、多思考。</p>
<p>相关文章:<br><a href="https://link.segmentfault.com/?enc=cjyTO4hVzwPsLqwqxMgefw%3D%3D.qmQS2tT0HPSULUGGRcV4yQzLmaoFW8XOJ5LLn9xZDMVY8HvwCk1jMaQ75oN8CmmkS9OabjZ3WSH%2FJnTZvyH8Sk8qKhLOd2BUUDGhHHi50ed5AAdFubAXiFmBtNYJBeQx6k76vOQd43J%2F76cCSY5uMyHK%2Bm%2FfJ27itEAY80eL97hM1neCrHOQJ%2B9TwP6eXbhskR6Es7alYifmBPqftG2vDxuMEH9Sbp4C2biWoJVByZSFwFXpTbhDBM8BpOYTp%2FUoDi8cwYDPPC33a9u9aebyakQXoK%2BhE5G4RvzWDiW7aXY%3D" rel="nofollow">关于读书,请你丢掉对书本的敬畏感</a><br><a href="https://link.segmentfault.com/?enc=3A96qHSFFfP%2F4e9uaZcJFA%3D%3D.iAEaeZQtFloYn0UL%2BzWEci%2Bnk3MQROQmfQ33uGPtutGvCtQlzrugRGame0%2FT2jHq2MItum4xH3P6lmtneqmXg7weFoRYf0cRqqKKVAPpFEF%2BUxHLQ%2Fb%2FeQhRP0Y%2FZDC2JpMabfUIFHDIaOiXNUPnoJUN6NzpQYS5TqzkUkBtd%2FC8rgitC5iy4yRSSsi31snBdOEHSjnu1Ic2Sg%2B3MAnXsJS%2FLB73ku7EZ3fF7xV3OsAsKycIksZ4e9OFDJ1ogNwLWlpaj9wKU2yU%2FWpirioTCgfy4OrD6X8P4noN5YfJHfk%3D" rel="nofollow">关于读书,为什么需要速读?</a><br><a href="https://link.segmentfault.com/?enc=8UeBwpaKayyRNbNIVPuRUg%3D%3D.8wU5F81dbgZSkC%2B%2Fci9oSAgqUMbYqfu%2BMFt%2BRXN8PkEdCgx6hZsy9D%2BxIS4Ni9qs%2FYYnHut0pV3VS6kRUqQJm4yid2asopKaoKS8ygAiGIo6zGgkaECm7m9nXJ5hFMRiUAbdbl35HWMjVMVWktr23oNAzIdEYPXw5d%2BDVj%2BgWHYB8AZurmt8%2B550dQxw%2FZfSJkF7HBd7M94j5eWpsQWLJxa8CHk6ev18MUqpuB94HRXZfyNcztQ4z52ZmVGiNBRjj7ojGOCfUgNu1bMJbnLhu9YqxEHecZ23%2BArXURFRE2U%3D" rel="nofollow">关于读书,千万不要忽略输出</a></p>
<p>精选文章:<br><a href="https://link.segmentfault.com/?enc=TfFTYgcIlnfQ%2B3TR4U5ZBg%3D%3D.mbTb8sela5Q49jFxy2EAuJfK5QF7thDg2z3zwI0%2BsWo4ITtveLB74dquxToVVYRxNBDRWRHMIFmnb65V%2F5%2F1YwVX9LCGvBH1DSMEb1yGaud%2FDNe0ykc0IhQZVc4sI325yHlo6tagnEslbvebn862sdth77T6szdZfyIgemccsVYFAQMbJsvrqRwkvll7frJdyr7q%2FmjRtKgUibg1h%2BVcVYrugEBCUmI7i8j0s9IxgQexvHwqSmVFv34EIYlz3jqFOtPqyDRM56IGdBHFx7sdgzDeBpOsoMu6e0cVqabNXyc%3D" rel="nofollow">如何把百度网盘下载速度提高 100 倍,我推荐这个下载工具</a><br><a href="https://link.segmentfault.com/?enc=K8GafcOfdjUeHq7dauIEgQ%3D%3D.bp9lUex1Xym2CLNofV14GBBFa24jkw3bEU75OJ%2B6CamE0%2BX55IeZP0F%2Bl4TxfBkWA2wZAs9WAPAtwyDcrLRqZ33ftMe7SR2uqIa5w5c7F0hKpEj2sgl7T1s1%2FO5tmRjAcCLcM84ghjrN4DvSIv4dDZ%2FoPrl2cVWX0tC65Zo1X%2BZOfUQ%2F7CtN638FBt6KfVhpkz54pA36DMEjvQjCpQhfgcboeUMzJYcKBq57PEBI%2FTsEQ3MKmQpiUbRnm6OR890Bp7UyFJ1%2BYWPIxiTmopPZkOV3kGQrimEcW40gRMnax5o%3D" rel="nofollow">《活出生命的意义》:人生有何意义?</a><br><a href="https://link.segmentfault.com/?enc=uOjirqnJVG5kR1%2BhOfK9tg%3D%3D.vJApAXiOsu9uQRuTwArigNYYgS2EO6kM3M8wDVIzdbsCu5n9AsOEtJPHD2FBOo%2Fzp7SZrsG8KxZLVbdjnSug48godv4OgoTrul6PL32Lo5HjCCO4XszTDnoyB%2FcONC8gy2QneJrodTRlWJKBAwhC%2Bfn7mjWHgxg8nIrWEH%2BysCSbKLhBZ4XhZw1Fd%2FfYMSuZrjeatdw3OstcCoYNiTEPbmj3U0LBnYIP4vGLK3Qydejj53SB48mgQBas54ghn1v9bXhgfBcKu4o7%2Fwweip7BnSmmdEeTZ%2B7V4uqQbg%2BeVpw%3D" rel="nofollow">从疫苗说起,为悲剧性的乐观主义辩护</a><br><a href="https://link.segmentfault.com/?enc=rVOUdfHuBOk8kXaR5Lk0jg%3D%3D.NQFJWYWqKLfBrTI33uE0HTR4pG9302EmPBGiaWOI6fzig%2BNwaZk8Jv%2BNSyaqrVaosAiPRy9XlPcd%2Bzn%2FhKhVuwzhJ62Wrl%2BnuDsozrOd9%2Fmkc2vKiHwTR360O8S9TvK3GDuIRDpGUOFhEJZ%2BEfezUp10s4a0r15qUGEKW7OXe0IpvbdEbF%2FYkmViR9AP%2BWUuG9e5DgfW6qo5g52qmHCYJ7EgWHjTnb8fhJ%2FCA51Ya5%2F76JWbIdxJybppgUjq4QlYaZr4xf1bEYRTR3hP%2BdiqtvfLrvfaZ0VO6PjvE7HXnMU%3D" rel="nofollow">如何有效训练你的研究能力</a><br><a href="https://link.segmentfault.com/?enc=igXMN1wHVTUlilUiomY70A%3D%3D.scfRUeJcBu%2BPdsFIlW0%2FSaygW7b0gS6zFuI4mHeM347Lmg0fmKOydYgWHUzQ80j3mfYP%2BB3yxu1Ui3%2FrWjgod%2FKbr0TtjY0rz4l44sZcnaXpHU3G4VXijWtnNtgZWp7D3IHOAh6UrUdg%2BWiofkDmSAR2el%2Fh1EL5GxR7J1hzpxuOAIjOt6VE7krsm0l6flAl%2BaFEMFNNEJQEQCKknaaGCCq2xl91%2FxyjWd0ThjOUA57j%2BDKpbcvtgGUX0ZM%2Bi8kxtbkWcEilzYXe%2FXRAL7GdgeC8yWoDLyOu6KsZ1Dn7VL0%3D" rel="nofollow">新手如何摆脱教程魔咒</a><br><a href="https://link.segmentfault.com/?enc=ADA%2FwjtrLfvp86Y4TbFiPg%3D%3D.SYPOUcUd8TbYtINSfbMYawm%2F6jYQsEA9Sf%2BFhmJdESblS2XW8N4LsX%2BJ80%2BKk7L9InM8Um1nFyX2FWmp89K8F104KuAwgYGUoi%2F92kD7ZFCccCGoxf5peoJeLBJI1juDDP6DT6BE6XvQlqH6QHi2YhdzdYsXDjtTo%2F5zeqLactyD1gTKJhzzlthywwDDf1YpT%2FJlVyBW%2FEBk4NGXQV5qY4LDxnDG4LlB0C065SyeAaqWe0kCS%2BXTOYeeuHnoBJKhfYQHNBK%2FUHWWpbKyX%2FDZZTtD4eDJ2W%2Fv8FhMQa9WBO0%3D" rel="nofollow">这个世界会好吗</a></p>
<p><img src="/img/remote/1460000015712916" alt="" title=""></p>
《活出生命的意义》:人生有何意义?
https://segmentfault.com/a/1190000015773392
2018-07-26T11:06:47+08:00
2018-07-26T11:06:47+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>在你一生的阅读体验中,如果能够有一本书,它的某个章节、某种思想、或者某句话能够触动你的内心,解决你的困惑,甚至能改变你的命运,那这样的一本书你一定要视如珍宝,经常翻阅,维克多·弗兰克尔的《活出生命的意义》就是这样的一本书。</p>
<p>人生有何意义?我多次问过我自己,如果我早知道这本书,就不会有那么多焦虑。</p>
<p>讲道理,一个道理不如一个好故事给人启发大。看过这本书,了解了作者在集中营中的故事,才渐渐去思考如何活出生命的意义。</p>
<p>本书第一部分主要讲作者弗兰克尔在纳粹时期,他的全家都被关进了集中营,他的父母、妻子、哥哥,全都死于毒气室中,只有他和妹妹幸存。</p>
<p>他很少谈及自己在集中营里忍受的常人无法想象的苦难,而是更多地谈论那些让人坚强活下去的勇气。他对那些因放弃对未来的渴望而放弃生命的狱友嗤之以鼻,他们的死不是因为食物或者药品的匮乏,而是因为他们不知道为什么而活。他则不同,他无比思念着自己的妻子,期待着有一天能与她重逢,他还不断梦想着战后能到各地举办心理方面的讲座。</p>
<p>对未来丧失信心的犯人,很快就会走向毁灭,他们会自甘堕落,精神崩溃,成为行尸走肉。他一位老朋友告诉他「想活下来,唯一的办法是,看上去能干活。刮脸,挺直腰板站立,精神抖擞地干活」,作者活下去的决心,让他即使在集中营中也没有自暴自弃,而是去精神抖擞地干活,这让他成为了那个幸免于难的人。</p>
<p>就像尼采说的「知道为什么而活的人,便能生存」。</p>
<p>举一个书中的例子</p>
<blockquote>进病号房的第四天,我刚被指定值夜班,主任医生就跑进来,问我是否愿意到另外一个集中营看护伤寒病人。朋友们都强烈反对我去(同行中也没有一个愿意去的),但我执意要去。我知道,在工作队干活会死得更快。怎么都是个死,在那里死多少会有些意义。我想,作为医生,为帮助自己的狱友而死,要比作为不中用的劳工消耗掉自己的生命,无疑更有意义。</blockquote>
<p>作者即使在集中营中,也在尝试着做一些更有意义的事情。正如他所说,「人所拥有的任何东西,都可以被剥夺,唯独人性最后的自由,——也就是在任何境遇中选择一己态度和生活方式的自由——不能被剥夺」。</p>
<p>第二部分主要讲他作为一个心理学家通过自己在集中营的经历,结合学术,开创了意义疗法,帮助人们找到生活下去的意义。他不仅超越了自己炼狱般的痛苦,还在世界上留下了光辉的篇章。</p>
<p>我之前读过胡适先生的《人生有何意义》</p>
<blockquote>生命本没有意义,你要能给他什么意义,他就有什么意义。与其终日冥想人生有何意义,不如试用此生作点有意义的事……</blockquote>
<p>在一定程度上解决了我的一些困惑,让我与其终日瞎想浪费时间,不如去做点什么事情,于是我开始忙碌起来,去做一些事情,但是我并没有找到一个内心里能支撑我长久做下去的事情,为了生存必须做的事情除外。就像没有诸葛亮的刘备,只知道瞎转悠,到处依附,没有《隆中对》之后的战略愿景。</p>
<p>弗兰克尔发现了三种不同的方式来发现生命的意义:(1)通过创立某项工作或从事某种事业;(2)通过体验某种事情或面对某个人;(3)在忍受不可避免的苦难时采取某种态度。</p>
<p>可能我的理解跟他意义疗法描述的些许不一样,但是不重要,我觉得他帮助我找到了人生的意义。弗兰克尔在狱中有一段话是这样讲的:</p>
<blockquote>忽然间,我一生中第一次领悟到一个真理,它曾被诗人赞颂,被思想家视为绝顶智慧。这就是:爱是人类终身追求的最高目标。天使存在于无比美丽的永恒思念中。</blockquote>
<p><strong>爱才是我们终生奋斗的目标。</strong>我们大家的目标很多应该是过好自己的一生,能够让家人幸福,如果还能影响一些人,那就更好了。</p>
<p>那什么是家呢?苏轼曾说:「此心安处是吾乡」,我觉得爱之所思即为家,家之所以为家,是因为有爱、有思念,所以爱才是我们一生追求的意义。我理解的爱,也可以不单针对人,做事情也是可以的,爱是不求回报,爱一个人,爱一份事业,无怨无悔的去爱,即使最后没有回报也不在乎,但是爱要有回应,如果没有回应很可能会心声埋怨,可能会放弃,而回报都是在不经意之间得到的。</p>
<p>如果你找到了一生要爱的人、一生要从事的事业、并且有即使遇到艰难险阻也保持积极态度的心,那我想你就找到了人生的意义。</p>
<p>关于这本书的相关文章:<br><a href="https://link.segmentfault.com/?enc=Z83ZpL7FOGVTxltJ%2By2dZw%3D%3D.SJdu9ZEStTMe3amzebMoK3rX2GYnp5B89exYdhCWeYQwtiuzD7BpsmfFkQBju1lOhO8e6zYpsU9egX%2F6J0%2FIbc6LlmpzD0gc6jiC6N58KvRwMQKR4tAem%2FLs4gQTQRXsQqojrkEUv47kh7JiLLztLj1bqFyxGnAlG79n5cOlb321CTYFrPb%2FFo8CM8wxOm2QCPgqXyUzlu2dPZkzqVMI3jvTpqWAdYaVYzQOKp%2B2sWA20fFgz3apbcg6AMCHBbmW0g7TOhwCs15E82yr1LjR9gF%2FuiVocoPBK9NlJa4%2BNSw%3D" rel="nofollow">这招或许能治疗你的失眠</a><br><a href="https://link.segmentfault.com/?enc=Bbh%2BTTF3phcnzHxuZX3jBg%3D%3D.OwUTqnsuP8J29jvJVxzIGNI2yOPZRVvYZCm2Q3vUdvTITrKVdlZAvKkqrK%2FzLARfyfHtB48phNGYZKOFriiTXvPI9BykHIJEWM5JonTlJdstV%2BMQOHhnYUf1P3Hp5X2xhrzK%2FjsDYdlPg1AEq8FHwHBjTWoLGsHtFpuBYjCAy0Sg7Tt9bLtaAc0Y7kygHBM05yRJR%2F9QcA4cI8w61AAW6ObK02OG2FLAOh8e8YTFqy7Kv995fUQRcQYKU7Rjx1%2FoPDDmxBrINWwbhMmpjDgPXXo20Uzj%2Fj7AizsaVOpkOTY%3D" rel="nofollow">从疫苗说起,为悲剧性的乐观主义辩护</a></p>
<p>精选文章:<br><a href="https://link.segmentfault.com/?enc=wVWcVyw4Ds4gGCqdTxRw8w%3D%3D.TtxssT79gW8w%2FRuhqgKDNlVzfX2XwcNLF4ZcYV%2B0CjzOivc4vyi7q3GN%2Bud58Axy3a8%2B8%2Bh2LlkxhGNekIZe8Qrbg91j1JJh65pMXQp%2BdFMRRfAuN5ZU2iw3r2Cc8mN4Ho4MBkS0yXJNfVJfeo0K3bAyPtcgmKL4TMAnW1uZfxskBpP8SxyrzGcD64lrg7za1jmSOHzGgjAMmD4i19se3BD3juOUjY54hdYXeJQ3OfJhjAb0RoZ%2BWGDHSX%2BohY3rg2TQini4id%2BN%2F%2B66k2fmVXP%2FuP7yZhUvdJDQhcwURiU%3D" rel="nofollow">关于读书,请你丢掉对书本的敬畏感</a><br><a href="https://link.segmentfault.com/?enc=bB%2BY0wmh1lrVIick4RwwFA%3D%3D.tavt3%2F2ibbthJP4ER1QYAz7BfxQF%2Bd%2FNLrlRX0XIPVjwfMtwf5140mRDJWjtPXmKi8d%2B2lHkepUdCY0RuU0SM%2BdKisEIsFWxB%2Bxzq0Ka7330TY55ddT83pCdJHYgVuDI0RiAhHS0IDVqsTKumTI70XKON%2FsWVpSjnHwTNNslsF4pzYqfZzgk0pFIoHd5Nax3RJC4xcqP88j5sGPX%2BrLkzYRrmuiyFRqRqDzYpcTaxHa4Y8c3u3J9ubAEQY%2FpWd7bk9F1XhVJqydUSdJ9kujsUnSWjUicoPFFMY%2BEjD%2Fc1To%3D" rel="nofollow">关于读书,为什么需要速读?</a><br><a href="https://link.segmentfault.com/?enc=4HuX0efcLD%2ByxQNomprakQ%3D%3D.5khYMoLV%2FtS0tydDULvxuxyXF3eE0FSTF9yO7cjZQeOZzXzgNrkOsMVMOYJOujyoDW088SF%2FkFsqE%2B5dVfUfblPjwFSes8TL20a98wpTpijO8dv8N1ih6eEzbW35VsKwD0e%2BiDENZGQn8BMMDk9SLeLg7tR9KdDIuSq2QPCB6BWswMqde2qX7MdTSLfhBrybOrwZ0Vz2W1GCRZMRBakKEcorOJahU7eUcCzWuOUWy4Mfhp8kHNZ5298QvKvkbkcrpEZin5LrzVSY3gCT%2BTJjKtkkDxV3IBNmDsC44DJtVoQ%3D" rel="nofollow">关于读书,千万不要忽略输出</a><br><a href="https://link.segmentfault.com/?enc=cV93b50BEyD2UldN6kncKA%3D%3D.OGRYwaC6G3YCNWivTgS9nJYoIMA6wYEwFXjKLOTde2aNLX3OP%2BlLdInxBWSkBzOBH1DKuNWAjHv3p7bYPiqASiMrKH4a8lWL4hvKYAbRnK63lJV59BTHShjtTs0y%2Ba6rK26xKbC%2F2Dos6OBjgzJm2gTu1sIqYojp85yfeo4f1mI31ab67z76OH1N6SUVl07gG9Jh43bY6Z53ctQ0gPWhEWTWY9KAv6tQUNQ%2BDhe8mwiGghOh9FSCE9htSS%2Fw00WwWjG8pF3GSvnujO7UhCSkahieHhR5Qlwj5VtWNuvdf%2Bs%3D" rel="nofollow">如何把百度网盘下载速度提高 100 倍,我推荐这个下载工具</a><br><a href="https://link.segmentfault.com/?enc=FOw11x4rEAUx%2BziIVfcf%2Bw%3D%3D.w8tdFHzK4CTWXodEZf7u7GYLiZTn1FODu9HRsIEH%2F2mx4l%2F1DRkjVGlwf1LHJqKayPIDBJOagM6Q5zR5HUpiXRMxIbS%2Faf1X7vbtmMeu8cXxyhRHzSQUAOnD7ljxZLl1kpJEiLfZIlTaJKqhtKCz5uIsmXQXfQXzr%2FsVhsML9oFLZy3xIvODy1nv96msL%2FJMkEsjRv05hIz%2F63X%2FWn9SrXT4%2FlLiG6BfAWDSg%2FspRUpk7RxeV0oKCp4okVArYS4w8vMiyCTYulKa7kNntsuYdSLY7nlfXqQFCgFChQWxnQs%3D" rel="nofollow">如何有效训练你的研究能力</a><br><a href="https://link.segmentfault.com/?enc=uReoYwlmWUb02pPSRQPxbA%3D%3D.HoWldlp3LnywO6Nbr1lHHBgDhHMKm5KiisKKEfLkx1aw9X%2BYEITG7igkgJFOK8ryCInHikEphVoOtbEJzODAWSgvCUn9Emq5UZFXTzP2apXi%2FYlRgN%2F%2BP2O4uCmSM%2BO7qjKfAyNVb%2Fa%2F%2FE7pfdJSAG1%2FXBNwy7onsUR7JT%2BvA7bmLcyUZY5CnniceUEdnGhwhMHvZiEGGBGLePR%2FQf8ZFEmVhHAk%2FsDXTr01koCnpaY%2BTSumnr%2B4oJd2UwRMHZLcSY32QXBsCyPI7R1m5pISD08efw3aTBewsLk6GcUtvto%3D" rel="nofollow">新手如何摆脱教程魔咒</a></p>
<p><img src="/img/remote/1460000015712916" alt="" title=""></p>
从疫苗说起,为悲剧性的乐观主义辩护
https://segmentfault.com/a/1190000015726615
2018-07-23T00:19:36+08:00
2018-07-23T00:19:36+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>这两天比较火的新闻是关于疫苗的,想必大家比我知道的还早,我们自己或者亲朋好友可能就打了这样的疫苗,大家都很愤怒、失望,甚至感到绝望,朋友圈有人调侃说,「真难相信自己能够活到现在」,相关人员简直畜生不如,我们痛恨这样的无良企业和没有责任感的人,希望他们都得到应有的惩罚。</p>
<p>我们都知道,谷歌把「不作恶」当作公司的口号,当时觉得没什么啊,现在想想,谷歌是真的了不起,「不作恶」说起来容易,做起来很难,就像马克思所说的,「当利润达到 10% 的时候,他们将蠢蠢欲动;当利润达到 50% 的时候,他们将铤而走险;当利润达到 100% 的时候,他们敢于践踏人间的一切法律;当利润达到 300% 的时候,他们敢于冒绞刑的危险」。</p>
<p>这一段时间的各种事件,会让人很痛心,我看到有一句愤恨的话是「先灭狗,再抓人」,我实在是不能理解这事儿跟狗有什么关系,可能是我理解有误吧,没明白他的意思。我没有更多的建议给到大家,比如家长该做什么,这个可以参考更专业的人士的回答,我只是希望大家不要失去对生活的希望。</p>
<p>今天读了一本书《活出生命的意义》,是著名心理学家弗兰克尔作为犹太人被关在集中营的自传,以及他的意义疗法。本文不是重点讲这个,可以自己去看一下,强烈推荐。</p>
<p>快结尾的时候看到一个小标题——为悲剧性的乐观主义辩护,突然觉得好喜欢这句话。</p>
<p>什么是悲剧性的乐观主义?书里给的解释是</p>
<blockquote>悲剧的乐观主义,它指的是即使身处「三重悲剧」当中仍然并一直保持乐观的情绪。而所谓「三重悲剧」包括以下三种因素:(1)痛苦;(2)内疚;(3)死亡。</blockquote>
<p>换句话说,即使身处灰暗之中,也应该保持乐观的生活态度。</p>
<p>在书中有这么一个战争结束之后的故事,让我印象很深刻。</p>
<blockquote>有一回,我跟一个朋友穿过农田正朝集中营方向走,突然到了一块长着绿油油庄稼的田地。我本能地想绕道走,但他拽着我的胳膊,径直从地里穿了过去。我嘀咕了几句,大概是说不该践踏青苗。他生气了,恼怒地瞪了我一眼,吼道:“你甭说啦!他们夺走了我们多少东西?我老婆和孩子都被毒死了,更别说其他了,你却不许我踩几根庄稼!”</blockquote>
<p>作者的观点是,「谁也没有权利为非作歹,哪怕别人曾经这样对待你。」所以,我们再抨击的时候,一定要警醒着自己,不要陷入作者这位朋友的这种怪圈,恶人的确需求得到惩治,但是自己不要成为恶人。</p>
<p>虽然我们身处的环境有很多缺陷,但是希望我们能当一个乐观者,相信这一切都会变得更好,并且付出我们自己的努力,而不是自己变成社会的缺陷。就像作者所说的</p>
<blockquote>重要的是如何充分利用任何给定的处境,面对灾难而保持乐观。人类总是有能力(1)将人生的苦难转化成成就;(2)从罪过中提炼改过自新的机会;(3)从短暂的生命中获取负责任的行动的动力。</blockquote>
<p>精选文章:<br><a href="https://link.segmentfault.com/?enc=Wc84bgTvSMhwIeqo39jcnQ%3D%3D.TDhD7B51BpJM3KoZsaIqu8vceLO5P8aFVP7sMjL%2F6e8M2e3cY93HwUi1YisnoSt4dvrPNuK05w24zvULnNf%2FVVJjGP3kLnTiP3wuURpBO20cvtNyEmfpXKfmXDrMrNf6KM294BhVtCZQKhlcJyXPh2qFfZUcZhsC1kR%2BkOH8cF8L55L5wonEbnnSe89wrrFoX6AIqUVsPpNAR9VTT2N1kqBL6CIOnN4dhLKn91amqE6qIP5o7aZ7GSbLx4LL9yJYtuM57YgrDFQ%2Bs6m1w0tarfiCGeuVReRpT2JIShSXO%2Fk%3D" rel="nofollow">关于读书,请你丢掉对书本的敬畏感</a><br><a href="https://link.segmentfault.com/?enc=%2F70hEdWbNpgvi7lLVx0%2Bvg%3D%3D.00UtfI33yRtN65%2BbVEift0K1rW29DIWN9cWXKpurAl%2Fof432XIqneAucVJ7nVK7jGCiWdhgYFLpkalQtEhlI4rImDvYh7QhSofoTDTzZHZ112M6qXrEz54C3dFD41e1qT4cnUklSqzGrksB7n0E7UJGb0SPJYPRIgTLHsbveWxpyWzGLMFY8f3CAoJhOgWWK%2B32Nfkv82BRg2diVvjYWm7v3Rx0ci8Cs0lQGmY65W1H%2FDnS9eAoUN0r5oDepyGhQ6JiAbtaKyTfP1hBkkH7U9K3ofhEOk2MuhCuyILMJELE%3D" rel="nofollow">关于读书,为什么需要速读?</a><br><a href="https://link.segmentfault.com/?enc=XhNZ2fhtLV56vIFVLt6dGg%3D%3D.1qYnKnWmRH3clLyxgmlDmQSge762fZle80qSz%2BnmoBbWlUtTXOYr6veXlU1EYI7MwgnQJH9EjJs8ejP4VxKsoESGRveAUAjktKJilmasLqjyRQsI5MRUszPY%2FWYXhcyJYxRAUj9jHUbAdlAa%2F01LLe1UvUfzGNzAuK6RK4ULO%2BnN%2FRwDH7wlf9OCfPOT3yRZbCnPugqKoKU9wP8UFy5EwSkkgMCmeCoqQYk0hzU052wQWhQloswusN%2BDKyBMZLaadIXH25uElvM2VZb5efbFtQ0r2N6PAcoc3KMnXXEpd3g%3D" rel="nofollow">关于读书,千万不要忽略输出</a><br><a href="https://link.segmentfault.com/?enc=0xsEP7fUP5PWSPFhks6Mjg%3D%3D.AXPrKtZ3Au8QipiWwvJS7brId%2Bf%2BO%2B6sKNjy7Rn7I%2BCnaLrVbvPJxqnnbLIseEH0gmIuJSQTa6%2Fzs%2BVIYRMiifY6De%2FR8LhnH4ocvTLiWx4cad%2BdZ4Sob%2B0gCMPSZjE85bZr3Fe2yW2I3QJelhfwXPUOjtHlPfbe16eqJ0DjEw2yadBREWZK%2F%2B%2FMBI7PFuKryZCvruhsF%2BytYDlTQSIgxe2iaykil1ltaRH5WKICEwMWDd3sS7YM8c2s1TeS3ZQPdaWL2Eui4sVtaoIfEHQ%2FKGEcuK4ubo%2FQnlO72094fHw%3D" rel="nofollow">如何把百度网盘下载速度提高 100 倍,我推荐这个下载工具</a><br><a href="https://link.segmentfault.com/?enc=v6znTyiCbBK566OXAHRvgg%3D%3D.8AdUjskF%2Bma3Q6hHHtxHuBxrCP7pynibVqJhNpJHuj7AUXPfgBFPEgl5pC%2FzNzgcUeMJ304FncLWE1U%2FKomn7gBJcHP%2Bk77Hn%2B8%2BKRvQBaCR2RarrJwHtt7Tdie3a4KdqFX%2B%2Bz6jVWnvcXx25hYy5QqMMDyMRt%2BcACMhoGOUUDCPXWnt%2BPAgwWH%2B4DXp016Y1tRIfSCVMi8A4Pw7k9AtNHA3fdT9dz%2BUVXXP%2BGizrwSAqv15Ni2fPZRPNhhhV%2FagbSixcJH8PP0UPzgLs2GJ2yNdN26TJBHjvprdVT4pZ%2B0%3D" rel="nofollow">如何有效训练你的研究能力</a><br><a href="https://link.segmentfault.com/?enc=kEegIbX13P4uWGLEI2aU0g%3D%3D.WumOjAdqsiC2rBMlwIm5faWzEkaxlWIaxep7sIzZ77Ssj9EXj6bM7UeDazaTL7tm6v2KczcOvm3MUSxG7D63E5rlv5T%2FIPwRUwedoqgHvxqTqsXL2kc%2FuJFCdCczCvHj8Uzhtj941cfJ7zUxxHBwi3CsUWsxLpdFHuaqIz6hLWnw3OLnbTgqDi2byzxj2kWryrGNzn1c3FeTOGAr8Ok9cT696j8gY76Wk8PZfanknuJbNdd7eNR5WIWq%2FmBK93o1N%2FgulkWnR0BYjDK39FH7z0hlfU5d54Qp6A0M3Exlyxs%3D" rel="nofollow">新手如何摆脱教程魔咒</a></p>
<p><img src="/img/remote/1460000015712916" alt="" title=""></p>
关于读书,千万不要忽略输出
https://segmentfault.com/a/1190000015718534
2018-07-21T20:13:00+08:00
2018-07-21T20:13:00+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>上一篇文章(<a href="https://link.segmentfault.com/?enc=5YZeYoJmK5eA6qeWkAGfZQ%3D%3D.7%2Bf9G6EWgyCkeIMbU3pDO5HbpcKFP1Bmhh1DY3oqcYnIGBRKKPGp3xxG%2BDXwjqVY47wtpLJDIeOiqGbPsQ%2FFU1SB8wvc6SOpzwqnvzJypy5ZTUf00tTAXc4OXlTKVX3KZDnKhW9jMy8rsOAbic1r7scrE9BKelaxxcriuEpHiLQrMIT%2B1lGNBVWAvGyVF49K8e9T6vucbJumpjqYdL%2FBy9LGPvTDpkn9QgY9zfPK5IATzB9Dg9YoV6dcnbrHXq43eDlSlgVx6E3%2Fe3GOFdYLiGo0In7No2c5H0wFkVPCw2I%3D" rel="nofollow">关于读书,为什么需要速读?</a>)最后我强调了阅读的几个重要步骤:<br>1、看主题,看是否需要花时间在这本书上。<br>2、速读,了解书的结构和脉络,找到书的重点,提出好的问题。<br>3、挑感兴趣的仔细看。<br>4、输出,如读书摘要。</p>
<p>最后一步,也是尤其关键的一步,就是输出。读书其实从输入到输出的过程,很多人只做了一半。</p>
<p>不知道你有没有这样的经历,看了一本书之后,过了一段时间,几乎记不得这本书里讲了什么,当别人让你推荐书的时候你把这本书推荐给了他,当被问到它好在哪里,推荐理由是什么的时候,你却印象模糊,不知道该怎么回答。</p>
<p>这就是缺乏输出的表现,其实只读的吸收率可能只有百分之十,你给别人讲出来才能到百分之九十,给别人讲出来没那么容易,你一定要先搞懂,思维清晰,才能讲出来,写作就是一个很好的梳理逻辑的途径。</p>
<p>那怎么做到更好的输出呢?</p>
<p><strong>读的过程中要有目标感。</strong></p>
<p>跟之前一样,这篇说的书也都是非虚构类,假设你看完这本书就要给别人讲一遍,你可以讲什么,哪些是有意思的,哪些是有思想的,这些才是你重点需要看的。这里假设你已经速读过一遍了,因为速读是更靠前的步骤,能让你找到书的重点,提出好的问题。</p>
<p><strong>尝试着去理解,并写摘要。</strong></p>
<p>看的过程中,你总有一些感想,以及通过这个感想得到的联想,或者觉得书中写的好的地方,记下来,琢磨一下它好在哪里,不知道它好在哪里也没关系,以后再回头翻看,而不是突然想到这句话的时候找不到在哪。</p>
<p>只要你能坚持做笔记,写摘要,你肚子里东西就会越来越多,等到有一天你觉得撑的时候,就会不自觉地想表达出去了,这就是为啥有的人随随便便,滔滔不绝就能几千字。</p>
<p><strong>尝试着用写作描述清楚一个观点。</strong></p>
<p>刚才有提到,写作是一个很好的梳理逻辑的途径。很多人一听到写作头都大了,刚开始可能半天憋不出一个字,那是因为自己总想着写出一篇完美的文章,所以轻易不肯下手。</p>
<p>写作跟读书一样,第一步就是要摆脱对写作的畏惧感,互联网产品思维里面有讲到,「小步快跑,快速迭代」,也就是说,你先搞出来点东西,然后再慢慢迭代。于此类似,你先写出来第一句话,然后再写出来第二句话,并且这两句话可能没什么关联,没有关系,先把你想要表达的东西写出来,接受刚开始的不美好,好作品都是改出来的,等到整篇写完了,再开启你的完美眼光,去挑刺,去完善它。</p>
<p>阅读是输入,写作是输出(当然输出也有其他的形式,比如口语表达),用输入支撑输出,用输出倒逼输入。我们公司每个人每半年至少要分享一次,可以是公司层面的分享,也可以是部门内部的,你要先定个主题,可以是技术,也可以是其他,这样你就只能强迫自己去学习一些东西,不然到时候没东西分享多丢人啊。</p>
<p>相关文章:<br><a href="https://link.segmentfault.com/?enc=22Rqrr5XauXo1RuJFbgQLw%3D%3D.Hz1GPNiDFTfP1VGEW0ZgVAQScRkJreEiSJWa%2Bdo2BQB1%2BXAjCzO3bj2yk9twKUfyPdXOhT%2Bfsx1dS7zyzRDPMA5y8l%2FVrO5HH7MrTJbaWOFZMW87cFxMC9GYIQLdh2p%2BZ7cM8KBrN%2B%2Bc0nvaek13cWbwX0H6UDqJ0sToF9AIaNhT67waPLny0wwpIHeI4u8R3WCvAmKHp0Qax41zTtKk9WSwvMxBpkbeaI2N4e587%2Bn%2FiGXDlcNV9SCAIvNveN6QcQwzwH%2BiBimvyhmMeDwLB2uRte3cQvYEWWXJk8H3Mu0%3D" rel="nofollow">关于读书,请你丢掉对书本的敬畏感</a><br><a href="https://link.segmentfault.com/?enc=0LnDDD7H%2BQ94mBT7uA10Kg%3D%3D.1VAw%2FG2HQK0QVO0%2BU%2FOfruyuk3PixxlyaYLWxUI14BBoEHqk1iZSCbEjQXz02UrlmI10Q07ybfHrauoQsYHckNppnmNDLbhXJsPRs35LXFnYjTmgpVvFuzTpzKQbtb34R4hANZVOx6ygMAMrkNZZ%2FuD9HLkJS%2FzkZsNxmCsDjzAq5Byw1BsEFHx1BKWZ66qxj07Chc8JaXoBrZbHXRnJsMpe6x2WpwwdxV3KpF5Z39VxPWKDKSJKDM5qQRweLXbomrBP1caiFZt91fGpXIaixX3e3j%2B6NEj9LceNAdGNcGQ%3D" rel="nofollow">关于读书,为什么需要速读?</a><br><a href="https://link.segmentfault.com/?enc=9RcK5x0DTuWOJ3c0sMYKTw%3D%3D.ztGUPdRRRSHy9S%2Fd2krf287rmx6GxqK4dNJW2Of3H186IRhXyZ0cXTv2jaRFm6lTX%2B3LTUjVR6z%2BJAjSRegP%2BI5BL9iOr2qeyd3Tf5jtLUACGrgZ1q8Jn%2FGMnOfOXoBzQoGxgzBwEycTESYzxTl7u%2F%2FSFK%2Fz4uUrVYi%2F6OfY6%2BN0154jW%2BMrAlVLvQF7NJc6g6a3qcqZPcBwTrJnUxs74McpxQ%2FlIzxDJdg%2Fv5tUF2lFiThDuhmp1dJ1Q0gtneoXuHtLETp0DLHxD2GdMzpqLfsF%2Bolg8FnsK2cSWBKppKM%3D" rel="nofollow">我为什么会放弃读书?</a></p>
<p>精选文章:<br><a href="https://link.segmentfault.com/?enc=rAWm7KXeafWUpeBRCBpGmg%3D%3D.SbOzEEIJekPoGvszPcAgMv1QTSYDcHd%2FHXdO8ikEt0kSDOIQq9X8eF1gzRm2c5IaWdB0rIHrg%2Bp3bQtts%2FHdAKJq6%2B1Cns%2BbQZSFnJqm7HnXB2Q1P1vXQt8sZxFKpslBE4vafLdIRRX%2FvGjnIiupwH6%2BN0dXoZzephzPC4DYDueLEe2MY1HqdQkjCm6ZCa68MDvTa85SzTmRlQdThfe88bxGFCoMWTBpb59HvfmIMq68uKcW08fcFZoFG2kJhzSO2c1WE%2Bof6EpZx8b%2FQpt83HNI4M559a6RThiXQieA2yc%3D" rel="nofollow">如何把百度网盘下载速度提高 100 倍,我推荐这个下载工具</a><br><a href="https://link.segmentfault.com/?enc=ETGDbF4jIHKbxXnWGUgWYg%3D%3D.mZtX%2BwrWBR7kGg4mZai5plkOnn8A3JyA7Nj3HM7k%2BuP8rh3%2FtvXUtUPbYSqqrjj%2FVWO%2BYMO%2FfErbsKmqydFvkwyEosFdKLWK4xY9z4%2FhtWgZ7M57bDeubXl3%2F7hucrWfaLtFIKIhzsJG8hs2UDSXGN%2Bkj9f5xICWidTXYc5tDMrLWGRVv9OIkk0yHYHv1vjs7%2BvyTxkeHv9grmYnrHhv3o5mlzpH443rak3XqZY2ZUHXdM5B55fv6%2BjL6FM%2Fcqn7tALT570O%2F%2F7HAMxpZ%2BlsYwRURabQRpymPeHPGxdLjog%3D" rel="nofollow">如何有效训练你的研究能力</a><br><a href="https://link.segmentfault.com/?enc=e6%2B02jL1ldCDmKiZFuewyg%3D%3D.Hb3avRJjRUcn2WDpUcWQB0CEeedyD4%2F6Tig8zRwNwl7tJQ2pOhp51eTIPVDsgNhjjEmyh69ZuxkmiIkp7KvIVK%2Bq5VPfBkkKqBEwibal5CFWBVMd8KOxm0bnlOIC9ckQ6kKSXsrrpRdsmfIWYJkKFkX0wbMJP3fpOTXkl84BuLHsiRzAKbaSZzAxB4tBlCmANP3uvBYNjQLYdNWxYFHuLBLyVG5zTVafV2VZ2pSxuVxKsAtizWU7bN%2B22hru3%2BRyCyXBxrcri91p%2FwxNMwhYlt6LFn6qOtBkPcx%2B8HGf6ds%3D" rel="nofollow">新手如何摆脱教程魔咒</a></p>
<p><img src="/img/remote/1460000015712916" alt="" title=""></p>
关于读书,为什么需要速读?
https://segmentfault.com/a/1190000015712913
2018-07-20T23:47:23+08:00
2018-07-20T23:47:23+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>这个时代充满了焦虑感,渴望知识但又缺乏知识的人逐渐变得越来越恐慌。</p>
<p>作为一个普通人,获取知识的方式也就那么几种:读万卷书、行万里路、名师指路(或者各种课程),而读书是获取知识成本最低并且很有效的一种方式,不过很多人都觉得自己读书慢,获取知识慢,就会造成新一轮的焦虑。</p>
<p>读书慢,其实这大可不必在意,因为有些书确实要慢着读,慢才能有时间去思考、去联想,才可能有一天突然顿悟。刻意地慢下来并没有什么问题,但是快不了可能就是方法不对了,所以快速阅读就变得非常重要了。</p>
<p>快速阅读,其实它并不是一扫而过,草草看一遍,而是在一定速度的基础上能够得到自己想要的信息,这是一种有效提升阅读效率的方式。</p>
<p>你第一需要清楚的是,有些书只需要速读,慢了就是浪费时间。现在出版业发达,阿猫阿狗都能写书,就会出现大量的垃圾,明明一句话能说完,非得写几百页。所以对待这样没有营养,或者现实意义不大的书,大可不必细看。</p>
<p>即使遇到一本好书,也要先快速读一遍,(本文所说的书都是非虚构类书籍,如果读文学名著,那还是慢慢看吧。)这不仅可以帮助你了解大概,还能激发你的好奇心,很多人读一本书不知道为什么读,也不知道前面有什么,怪不得看着没劲儿。先快速浏览一遍,能让你带着问题去细读,毕竟非虚构类的不像虚构类的书情景那么吸引人。就好比让你读一本字典,你肯定是要睡着的,但是找一个你想学习的字,你就来劲儿了。</p>
<p>有人说,我读书就喜欢一个字一个字的读,那也没有关系,你可以跳着读,抓重点去看,而不是什么都看。</p>
<p>在挑选出需要重点读的内容之后,就需要你多读,慢品了,读的过程还要伴随着思考,这是最关键的一点,也是最容易被忽略的一点。</p>
<p>速读还有一个关键的点,量多。很多人总觉得一本书需要好好的看才能吸收更多的东西,其实真正靠一本书改变人生的几乎没有,都是读一堆书潜移默化产生的影响。我看书有个特点,一个类型的书我会都找来,这段时间只读这一类的,第一本很显然会看的慢,因为不知道的概念太多,读的多了,再看类似的自然就快了,大部分的内容其实都是换了个说法而已。</p>
<p>无论是传统的读书方式,还是快速阅读,前提都是选一本好书,涉及到如何选书,简单说下我个人选书的方式,先看书名,再看书评,再看目录,再看前言,这样下来,这本书的大致内容就有个了解了。还有个方法就是你喜欢的作者的其他书,或者他推荐的书。</p>
<p>最后说一下我认为阅读的几个重要步骤是:<br>1、看主题,看是否需要花时间在这本书上。<br>2、速读,了解书的结构和脉络,找到书的重点,提出好的问题。<br>3、挑感兴趣的仔细看。<br>4、输出东西,如读书摘要。</p>
<p>相关文章:<br><a href="https://link.segmentfault.com/?enc=pwGXR8yln4rQ58Mu%2BAg4Vw%3D%3D.XseGTtR%2FKZW9psE1Zf9rhdWe4oV5juPyppw8J1D4QULh9gfbtPTzSrSPbKeQsQStwOumOlCmUdkn3%2FQiobw0N%2BuzTAzXzxtMMsP%2BDkCLIG4jyEJn4rycGxuc5HQDPri7VKXdNQeRC2EfTg40ZbRh83nsZ11irjVXTI%2FAfu5SxHudkNsz8HpKaufy9EV8jIvw%2FRn1gfCAv9ipSUumo05lSV97x8TgtW0UDSJn6QMGMSdl0bCUaDVTRceZrPSXCEGlLHWJUPDuX5Q06O1z3fzEoPu63kh1ixQM5sxLLROFYvk%3D" rel="nofollow">关于读书,请你丢掉对书本的敬畏感</a><br><a href="https://link.segmentfault.com/?enc=xZBCF5ogpkNtDK4MIa2iQg%3D%3D.ZAcFVb4ivhJ41nSVpMasG6zH%2F2kjFlU80pvP3ydiDNNMwzYzKRf%2BnuyP3GNPrPLuWGw7rv0zYxrGA%2BwUaFyh%2FGy4a%2BYo7fjAPXWVLNlmIep4yAkrIabqaM4A%2FZmfPr3mHV8Qodyuy4RxJyvOQvnt%2FWvKuzfWhvFkjbMSnaz1BN3wYlhFi4CpYVZYQMqH84qUrrDBuaFAqXd6k%2BfJXfYiYDyvFWIsY%2F0gxfVHiqDXDHC5DqbMhnOebuRUD90Fzqt922utc12Vfr0UQhmDcUXGc55WGRQUQsXan8f0rVCUbPc%3D" rel="nofollow">我为什么会放弃读书?</a></p>
<p>精选文章:<br><a href="https://link.segmentfault.com/?enc=ZlstuUE5Pu5eXbUbv%2BkKTA%3D%3D.sZ9vl55Y8qCm0HFk08J0xfl52UCVFzOxWLNRX2SNCR4ikbfIiO5Q3o0UifWot78JWmnj5roZSRlnIzWz1nGxvWbV3kNbdrRHfj8McVEJgfPfIp0LyQgXo5o3Y820EayVjrvf27qFYtIeJ6Y%2FuGkee0RdXUR5CbSs1QGz%2F6JB0flmkyVIUMHA8I%2F11w%2Bmb3Oimi0%2BaRBOfmZ2jj0JHUq5NR81bMRpDgzPPUIy6BUHQUxiRVhIVpBdCDQNV%2FSFrD2oHYZLKzrevea2HNQeha6JLlrki4q8phbAESvKLV2IGwA%3D" rel="nofollow">如何把百度网盘下载速度提高 100 倍,我推荐这个下载工具</a><br><a href="https://link.segmentfault.com/?enc=5cQOkmiiZWKUpoyAbOePAg%3D%3D.68cRN73yDv1B5BeCfgnsv%2FvcgHyoE8ivd0%2FL6z7BK0%2FbwkqWWJp8DmWbgVjy442Ch3eWpiNe12skPRbbpQUJXqhHDoELQzCEmfeCkEP5u0FS8qsIZXiEIbrm4n%2FZb%2FPodFp4%2FarrXvT73BARV5jwwMZ9bMkVgyCbU4YbRDqcoYJXYjfr%2BImq%2BWCvWF0p2Br%2Fvd3GMXVbisUFemGtDJY9pK4eMxVK%2FmjAuifjJskZHnyaxBwsOyi0s6w90oYyOqGxrYk3TAQVZiErds07a6VUe0DpmCHMvdhjw4VriYVWRDQ%3D" rel="nofollow">如何有效训练你的研究能力</a><br><a href="https://link.segmentfault.com/?enc=OZEYiWLAIoghFJ%2BkPjFEIg%3D%3D.%2BkNJpmdUWwKHdBcAIW94wEAGau1XbvONuLc47szfKERBONUOrI5GojNz8dV2ahOyGv8RUp9x6N%2BQ4oqFsVFT5YLyyrpkt8ia6qELVtFkLzeJmpsLyugLo7Oi05GSuLrN74IDx3vjXFU8w9GpXeFxo25bzD1FmnNivU087yz7P1TiiOXYmFoLppJGRnxyBruVRbZEiIXMcLYSo2NcGJ4KfoWqo%2FhrgbyIK3PIJsyh5DJeSvqUah9lze8JvYiSQhHJFt6Q%2Fxd2rddKjSecQ6LGUJifPwT2RFqLTnppFVNPYQ8%3D" rel="nofollow">新手如何摆脱教程魔咒</a></p>
<p><img src="/img/remote/1460000015712916" alt="" title=""></p>
算法:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数
https://segmentfault.com/a/1190000015700159
2018-07-19T23:44:17+08:00
2018-07-19T23:44:17+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>给定一个整数数组和一个目标值,找出数组中和为目标值的<strong>两个</strong>数。</p>
<p>你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。</p>
<p><strong>示例:</strong></p>
<pre><code>给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]</code></pre>
<p>题目原地址:</p>
<p><a href="https://link.segmentfault.com/?enc=Fxe2U9JjNmADxyJpI7xYTg%3D%3D.bEAbCCXoTqjc2I2eph8nPJp5fhulM6V0zTi6pi6ByW3a4IlJIzAVl%2BLwesovMn3RCAm%2BE3sZLOyKyLUyAEEkaFR%2Bx9nB1VP81pSnYohyz9tMECxcOZLzo7RsHZhXzpwu" rel="nofollow">https://leetcode-cn.com/explo...</a></p>
<p>可以把写好的代码去这里提交,验证是否通过。</p>
<pre><code class="java">/**
* 首先想到的肯定是拿第一个元素与后面的依次加,看是否等于目标值,
* 然后再第二个、第三个...
*/
public int[] twoSum1(int[] nums, int target) {
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[j] == target - nums[i]) {
return new int[] {i, j};
}
}
}
return new int[]{0,0};
}
/**
* 把数值作为 key,它的下标作为 value
* 遍历数组,判断 map 是否含有这个目标值-当前数值,
* 有直接返回,没有的话放到map里面
*
* 所以以后写代码,如果有双层 for 循环,首先考虑一下能否用 map 替换一层
*/
public int[] twoSum2(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(target - nums[i])) {
return new int[]{map.get(target - nums[i]),i};
}
map.put(nums[i], i);
}
return new int[]{0,0};
}</code></pre>
<p>这个好像有点简单</p>
<p><img src="/img/remote/1460000015700162?w=1636&h=819" alt="" title=""></p>
互联网三级火箭论:为什么火箭是三级的?
https://segmentfault.com/a/1190000015670324
2018-07-18T00:12:49+08:00
2018-07-18T00:12:49+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p><img src="/img/remote/1460000015670327" alt="image" title="image"></p>
<p>大家可能都听说过互联网圈的三级火箭理论,比如 360,搜狗等等。但是我们考虑过一个问题吗,为什么火箭是三级的?今天看了梁宁的产品课其中关于三级火箭的论证,了解到了张云帆的《互联网三级火箭论》,突然变得很清晰,下面是摘要。</p>
<h4>为什么火箭是三级的?</h4>
<p>为什么火箭是三级的,不能是二级或者四级吗?</p>
<p>因为火箭和其他所有的交通工具动力原理不同,它要保证能在真空中飞行,摩擦力无法使用,必须向后喷射燃料,利用牛顿第三定律产生反作用力获得动力,火箭的升力跟燃料成正比,推力越大,需要燃料越多。</p>
<p>研究表明,如果只有一级燃料,火箭突破不了地球引力,别忘了火箭的目的是什么,是要发射卫星。所以只能把火箭分级,最少二级,最大无限多级。</p>
<p>我们来看二级火箭。如果火箭只有二节,燃烧完第一级丢掉,然后第二级再飞上去,需要多重呢?以 1 吨卫星为例,需要 149 吨重的火箭(包含燃料)。三级需要 77 吨,四级 65 吨……</p>
<p>我们要考虑综合性价比,不仅仅是燃料的重量和火箭的重量,还要考虑火箭的安全。因为火箭每增加一级,危险度可能要增加 1 倍,甚至更多。如果只做二级火箭,149 吨才能推 1 吨。三级只需要 77 吨,如果用三级火箭能够省一半重量,价格差不多低一半,故障危险超过一倍,实际上还是能够接受的。到了四级火箭,危险程度变成四倍,重量仅仅省了 10 吨,就缺乏性价比了。所以,三级火箭是最优选择,成本和复杂度刚合适。</p>
<p>这就是火箭三级原理。这个世界很多东西可以进行跨行业借鉴,三级火箭是能够把卫星发射上去的最优性价比的方式。</p>
<h4>腾讯 的三级火箭</h4>
<p>第一级:通过 QQ 获得大量用户。<br>第二级:做了 QQ 空间获取内容留住用户。<br>第三级:做游戏等数字内容分发盈利。</p>
<h4>360 的三级火箭</h4>
<p>第一级:免费安全卫士和免费杀毒工具。<br>第二级:从免费杀毒工具变为安全网络平台,进而推出 360 安全浏览器、360 安全网址导航。<br>第三级:商业闭环。从安全浏览器和网址导航的广告收入,获得企业的经营利润。</p>
<h4>搜狗 的三级火箭</h4>
<p>旧的三级火箭</p>
<p>第一级:搜狗输入法。<br>第二、三级跟 360 类似,浏览器和搜索,再用这两个模式变现。</p>
<p>大家都知道,曾经王小川拒绝了 360,清退了阿里,拥抱了腾讯。<br>现在搜狗的新的三级火箭是</p>
<p>第一级:头部流量。腾讯带来的流量。<br>第二级:微信、QQ等内置搜索。<br>第三级:商业变现。</p>
<h4>罗辑思维 的三级火箭</h4>
<p>第一级:免费脱口秀、微信六十秒的公众号。<br>第二级:得到 APP。<br>第三级:付费产品。</p>
<h4>小米 的三级火箭</h4>
<p>第一级:小米手机。<br>第二级:一系列零售场景,小米商城、小米之家、小米小店。<br>第三级:一个高利润的产品,还没推出来。</p>
<p>你看雷布斯比其他手机厂商厉害的地方就是,别人手机是利润来源,他只是头部流量。相信等到雷布斯推出来这个产品的时候,肯定能扛起小米财报,我们拭目以待,买好股票,坐等发财。</p>
<h4>一些思考</h4>
<p>到这里,我们可以总结互联网公司的三级火箭模式为:第一级,头部流量;第二级,沉淀某类用户的商业场景;第三级,完成商业闭环。</p>
<p>火箭是靠自己把自己推起来的,就像我们这些没有背景没有靠山的人一样。我们想要获得更大的势能,就要懂得割让自己的利益,别人挣钱的地方,我不挣钱,以此获取更多的用户,从而得到更大的势能。</p>
<p>我们终其一生,追逐名利、构建人脉,其实这一切都是为了积蓄我们的势能,打造属于我们的一级火箭。</p>
<p>但火箭的目的不是飞的越高越好,而是为了放飞它携带的那颗卫星。</p>
<p>有多少有钱有权的人,都拥有巨大的势能,拥有他们的一级火箭,但是又有多少人只是享受无限上升的乐趣,而没有一颗要把星星放到人类文明顶峰的心,所以当他们势能耗散,也会迅速被遗忘。</p>
<p>你呢?</p>
<p>参考:<br>梁宁:产品思维30讲<br>张云帆:互联网三级火箭论</p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!<br><img src="/img/remote/1460000015315799" alt="微信公众号:志哥 (ID: zhige-me)" title="微信公众号:志哥 (ID: zhige-me)"></p>
如何有效训练你的研究能力
https://segmentfault.com/a/1190000015636617
2018-07-14T19:39:38+08:00
2018-07-14T19:39:38+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p><img src="/img/remote/1460000015636620" alt="image" title="image"></p>
<p>许岑得到精品课《如何有效训练你的研究能力》摘要</p>
<h4>1、为什么要具备研究能力</h4>
<p>研究能力是跨界能力,如果能够掌握,就能让你更好的适应新环境,更快速的进入状态,更容易做出短平快的决策。昨天看了《未来世界的幸存者》,阮一峰老师也提到要具备 B 计划,其实就是跨界的能力。</p>
<h4>2、研究必备的三种意识</h4>
<p><strong>研究的本质,是为了更好。</strong>研究不像学习,学习的特征是跟随者重复练习,研究是探险,是获取新东西的能力。学习最高水平是到你学习对象的水平,要想超越他,就要靠研究能力了。相比来讲,研究具有艺术性。</p>
<p><strong>研究精神的起点是建立研究的驱动,也就是研究的主动性,可以称之为作品意识。</strong>研究是艺术,艺术的表现最重要的就是细节,从小处出发,比之前好一点点。作品意识的最高境界,就是把自己当作一个作品来对待。</p>
<p><strong>为了防止研究过程跑偏,要有目标意识。</strong>比如我之前就经常在工作中,突然喝了一口茶,就去查茶的发源地,然后看一下那个地方有什么好玩的,然后去群里问问有没有人去过,计划着去玩耍一番,一晃几个小时过去了,本该干的正事儿还没有动。</p>
<p>研究的过程中,一定要时刻盯着你最开始的目标,并不间断的提醒自己,现在做的跟主线关联大吗?不过,你总想着自己的目标是有困难的,所以你还<strong>要有旁观者视角,也就是局外意识,</strong>不要在一个地方过于沉溺,并且保持客观。</p>
<p>当然有人会说,虽然跑偏了,但是还是能对自己陌生的知识查漏补缺啊,这是好事儿,但是不要让它影响你现在做的事儿,你可以把它写在备忘录里面,等你完成当前的正事儿之后再去查。</p>
<h4>3、搜集资料:足量,但节制</h4>
<p>研究在英文中叫 research,search 就是搜索的意思,勤于搜索,才适合做研究。前一段时间有个段子,群提醒,本群与百度达成战略联盟,有问题问百度就好了。很多新手总是喜欢问别人问题,其实新手百分之 80 的问题都可以通过搜索引擎获得答案,问别人问题对你的研究能力基本不会有提升。</p>
<p>很多人都会低估了搜索的能力,觉得没什么啊,搜集个资料有啥难的?但是我要告诉你的是,你可能真的不太懂如何搜集资料,这种能力需要把握两个要点,足量,但节制。</p>
<p><strong>怎么做到足量呢?首先要有主动性;第二要有宽泛性。</strong>主动性不必多说,是足量的保障。宽泛性是要跳出单一的维度。</p>
<p>但是也不能盲目的搜集很多资料,会浪费很多的时间,所以还要做到节制,更有针对性的去搜集。</p>
<p><strong>怎么做到节制呢?第一是要避免沉溺于文本;第二是对人的研究要去粉丝化;第三是避免情绪化。</strong></p>
<p><strong>过于沉溺于文本,就容易跑偏。</strong>比如许岑老师本来想着学习如何做好精品课,就去听得到上其他老师的课,听到严伯钧老师的《西方艺术史》,结果听的入迷了,就去买了一把小提琴,准备练琴了……</p>
<p><strong>如果是对人的研究,要去粉丝化,多视角,求客观。</strong>比如你是乔布斯的粉丝,你就要避免老说他的好,要有局外意识,听听负面新闻,去发现事物的本质。</p>
<p><strong>无情是做研究的高贵品质,避免情绪化</strong>。对研究所获得的资料产生了感情,结论就会有偏差。比如一首音乐,你的第一反应肯定是这个音乐传递给你的感受,是欢快还是悲伤,其实这个无法避免,但是你要研究的话,就要跳出你的第一反应,思考这个音乐是通过什么方法激起你这种感受的。</p>
<h4>4、处理资料,运用批判性思维</h4>
<p><strong>怎么运用批判性思维去处理资料?要把握两个重要方向,抓本质,找规律。</strong></p>
<p><strong>通过对比,探究事物的本质。</strong>找一个跟你研究对象类似的对象,时刻提出疑问,多维度出发,思考他们有什么本质区别。比如电影艺术跟其他艺术表现形式的区别,电影中有美术有音乐有文学,这些又是独立的表现形式,区别是什么呢?</p>
<p><strong>通过类比,找到相似事物的规律。</strong>同样,也是找类似的对象,这次是找相似之处。比如得到上的讲师讲课有什么特点?经过大量的猜测,试验,反馈,纠错来验证这个规律的正确性。</p>
<p>当你摸清一些事物的规律之后,再借助这个规律研究相似事物,就很容易掌握,比如你 PowerPoint 这个软件用的很溜了,现在让你用苹果系统的 keynote,短时间内就能掌握了。</p>
<h4>5、创造输出,督促研究的完成</h4>
<p><strong>用写作促进你的研究 。</strong>将你的研究成果化,最好的表达形式就是写作。可以写一些独立文章,也可以以问答的形式,但是最好严谨地写出来,对你对别人都有好处。</p>
<p>怎样才算是合格的、研究结论成果化的文章?应该用学术性要求自己,<strong>学术性具备三个基本特征:足够系统 、相关文本支撑 、严密的逻辑论证 。</strong></p>
<p>系统性。可以了解一下 MECE 分析法,即「相互独立,完全穷尽」,把所有情况都包括在内,并且没有重复的地方。比如时间管理的四象限法则:重要紧急、重要不紧急、紧急不重要、不紧急不重要。</p>
<p>文本支撑。可以有自己的判断,但不是臆断,每一个结论都要有相应的文本支撑。</p>
<p>严密的逻辑论证。要有相关的文献或者足够的证据证明你的论证是正确的。</p>
<p>「大象公会」这个 APP 或者公众号里面的文章就很有学术性,想了解的可以去看看。</p>
<p><strong>给你的写作找一个「导师」。</strong>一个好的导师既能跟你碰撞,又能提点你,还能纠正你的逻辑论证,他的见识比你广,他会告诉你哪个地方有更强有力的证据用以支撑你的观点。</p>
<h4>6、学术论文的写作要点</h4>
<p>不是特别必要的话,做到上面几点就算是熟悉了研究的套路了,这部分是加分项。</p>
<p><strong>学术论文写作有四个要点:正确性、可靠性、可持续性、普适性。</strong></p>
<p>正确性,就是要保证你的论文逻辑不能有漏洞。虽然我们平时工作和生活不用这么严谨,但是多学习、多注意、多与高手探讨,就可以增强你观点的正确性,这对你肯定是一笔财富。</p>
<p>可靠性,就是你说的话要有出处,不能只是你自己的想法。引用的是哪本书哪一页的哪句话,不能出现「我认为」「我相信」等词。</p>
<p>可持续性,放上上百年也是站得住脚的。</p>
<p>普适性,普适性差往大的方面思考,可能就会出现正确性或者可靠性的问题。</p>
<p><strong>掌握英文才能做深入研究。</strong>在西方学术体系依然发达的今天,掌握英文还是一个必备的技能。</p>
<p>经常有人问怎么学习英文,一般学英语都是刚开始就去学单词和语法这些基础的东西了,枯燥乏味,很难坚持,我的观点是想学什么直接去学就好了。你正在研究什么,就硬着头皮看相关的英文资料,边看边学习陌生的词汇,这样才会有一种成就感,才能坚持下来。首先要确定一个目标,你研究的东西就是你的目标,我们很多人的目标很模糊,比如人家都学我也要学、学英文好……这些都是很模糊的目标,我学英文的目标就很明确,看懂技术文档,那我就直接看技术文档好了,看不懂没关系,一句一句的看,一个单词一个单词的查,多看几遍。当然不是说基础不重要,只是刚开始看基础会消磨掉耐心,进而打击信心。可以看这篇文章了解更详细的阐述「<a href="https://link.segmentfault.com/?enc=WgZKoAhtny5kYIgzF%2FZP7A%3D%3D.r4f3AKIJqNP7NX5%2F%2FmGl1C5wdCDhl50icDsxXEb%2FG6ldgydApK4ezX6Zklu07RYprJWF9Rh7PJwpavsQCenNRpnlc%2BQoxWB3hyMW2X2d5t2ou5cCbd0%2FiF0Akg4Q7R9obzIU57HypcurbblqQZf6eQdAx6IzK1aQbELjlibbMkm4NU6JwyqX90MX2Cd9XKnluYu6j8jXRVG6vepx1truCpGk7EArJgWqdGTm5WlIliZQ6oKt7kQWeH8ZC6xUuj7vCaQi6h1Hio5sbMbW5dc1GEl7GXpJ28Cpo%2FY8ffw2jwM%3D" rel="nofollow">直奔大师,不必从基础开始</a>」</p>
<p>相关高效学习的文章,可以看下面</p>
<p><a href="https://link.segmentfault.com/?enc=VvBFPSxWrErtou3VG6B8Bg%3D%3D.KUKW%2Ber75HH%2BRyAU70f2Mo4mf10UgSnw8bxQNBAcY3SXKpYCp88E%2FFieW59lNZc3gaOI9bAIwXSUzdubfrc3TXLW5uwqkj9YWzzrkq8PJC3euhGWLaJY%2FSGKS6b4A9pCVrv6YyAn2nhprugjpTiaxauU62Ihk19IRbwZyf88ML%2BFiGcOloRLjgZZlty7JEfU8z4N2amMDWWUYeg34XQwobuIx7lU0MH%2FVoeirOOwX%2BcUOKffqVx0QqAi2Mf7e8LvfJwA7s8%2F9%2BpTWqjUp4swjOpzoKRIeNHH8HW8GDJzwIg%3D" rel="nofollow">原来,你的学习方法一直都是错的</a><br><a href="https://link.segmentfault.com/?enc=oawxqOanZOHDOn2lNjS29Q%3D%3D.7pwwF%2BmCVmnbX1jXjPDxkhslKi3nbbMSENZKu%2BQLtkSO16fVkuIgUSh8AgqpgFs3BDrbP0FQZjVKxuCjOXIlssU76xTZz8dsqmMp0F4Y3cByrxeyeqR44efYwjCJWkN%2FWa72M0cDs0uRiD791cBonVrbbkezbc98dKts8QtGMMNddzTnEYHnb0OEtculWtjXlPT%2FjQ76HfZ29%2FAlQuH%2BvP5ZF4Kncu0rSBZt12Uoh0yoO%2ByoIp%2F0vLG4rFBMf9OQJeRyUGKZ6D96e4ySQc0qzjXIRtnET0gdNt%2B5nwHeCB8%3D" rel="nofollow">碎片化学习不是学习碎片,看这篇了解碎片化学习的真相</a><br><a href="https://link.segmentfault.com/?enc=6O65ps6CaHXlU8EQ2hq%2BGg%3D%3D.lmsD7ac5fH0wQp0tPxcIdUFaRDomgjcH8imjG7JcLJpyMzQgNmnDgp4wenLJNlNuYxU1XQh6tABh03qdSQVXJZynbgcA10XLDGCTKhDId88FeXwoRWO8zvesjoXZ%2BLvPo0rHxGzvjz0ae%2FHjc%2FbPxYMOAuhNLYBPM0QWvjxQN5IrHx4WdRHV8Aknst0fJNLqkU9CxJ4aL3l0R7hZwxa4TBtmXEXHcFr2BB%2BwYqT1%2BtavpwnaUnjEDCVBWBWkxdurD%2FNgXM3DMTgoLlUJJrdd2bcLz8dWoGy%2Fv1wmTi15k7w%3D" rel="nofollow">不要再谈没兴趣了,那只是你不学习的借口罢了</a><br><a href="https://link.segmentfault.com/?enc=%2BjgRD3nCtd8OHgyTTYPEkg%3D%3D.rSS5zfqza8PbRy2mxr1cITknAKUpXea3egN26WJakeZAJLjcXDxTbKw8et%2BltjiUKGi195R3JFW5xao9P8CifDEpYdcg%2FBKZTo783PL6IdJjvmMckNNcHy%2FNoa0sAMw2jJVep25ro1CjxH5p3JY6ReIBwFG6f%2FBPI%2FUVWYr1KBfEi%2FdrfISg%2FCEXmlVoxA%2FFK1QfTQcPqUVHIcqikMzUq6rVR7lbYJiiQSAERI31Ypv6ipoFTk8HFhQUvmnlP%2BOT14R0GnZH19QsgW8k6JS7X7yRAvd1Orw7ur70I2hpSAg%3D" rel="nofollow">如何有效治疗拖延症</a><br><a href="https://link.segmentfault.com/?enc=ZIH2DCyln0aNHUn4NSyVyA%3D%3D.1dhClL5gLLachkJIksA4LNN3PnGAy1NIDpdgBTHm17TemMZnK3GoGgwNm0Lvbp%2BFJNK70mO5RPiOEJ3yFK%2FLobwoDhYFlqd8xsgwV8jYlVNlvJehPwnLUNSA9teqPLgqEquDmWzGus4PhRPClE7bq50AwAZ0A1yjcCNdYqjRTE74ScHpmUof0NwCFxULNQBybeM6w53qTuZt%2F%2FWi4nY6j2o43AAQoZU%2BNyZPUS4G057lGNHSYh792xxf3XI1PWT3csRzLbfrU3KVn1zQrCvOg6Tb761cLvDYlaIub40VRo8%3D" rel="nofollow">在衣食住行上训练专注力</a><br><a href="https://link.segmentfault.com/?enc=Ti%2Bm0%2Bk8FVoYVft9KLvPag%3D%3D.fcjJiahmEelZUF9T10KsBkPj%2BzgI10s98q%2BFI8WNh9BphKDn7YKh25wsihUzumSX7lCtb8uXc%2BnzjkvQOsiUV4CJs3KxjOPcKOx00FbzPs%2FRk5XrXzIcwWqSh4c3kvVJIsTdt5oqrFoHSc3coHzL%2F3Iv5y8EPKTenfHkdYwpWJhgcQZ%2FOAoJVHykzcFn%2BSCMJ4kt4g1fISAjnL26MO8XlNq6ku8RgN%2BrHeTx5BW%2Ffb4wlO7ewWwp0E6QhEnChGHj4XswBlYY2hIgZ9Q1vSr5mViLL0IszF0vLMjP45Uwkrk%3D" rel="nofollow">直奔大师,不必从基础开始</a><br><a href="https://link.segmentfault.com/?enc=lEQ3aNtOKkKp5oUamAlBmA%3D%3D.9NOcJ8BRPEcGbNJ4UYLpNwai%2FVMJdq%2FeMGlJkKWSnqkdZWvMtD9XfCRlJW42t0QT%2BwfpKK3kTmR5aRul7sK2U4iwYKYd1ck%2FkDr%2BTlvWNUBucGpBNkwf0JrOQVHKNEKCEMey6BdxhqCKmtErafo7Qve4Hbd6zLlko3hpM6X90EWHCNf57vxmcl3idPuTrm%2BHqd788mOLEfNXn9ntLm92Hnc6EMn%2F8NGldwiD639A2gFeZRPZW4bAjS1h4WYP8wKtkQr2nXXRcCI7vhJYhMOFe4Wvfh6BUt98S81c7k5Ob0s%3D" rel="nofollow">如何给自己制造反馈?</a><br><a href="https://link.segmentfault.com/?enc=em3%2Bmi3NDwCthh66yHttbQ%3D%3D.OyJcaV3iDJvB36w0lMb81GPBtJZE58rJ28ZbqZqWBmZSAGGD9xQyyHXak5ycp%2Fe6EweqUjRk85yj4AK0KQDCgywpXYbYw9Gnj24JdESQD%2FEvclitHdc9vm5aeKjt5bWx8UWkDViYc1EtaLBRMdWQJKxhNwpEv%2FODrO5O%2B1UeCY6Z6Gub%2FV0%2BbkbeWtYpX2CE8G07Si67Tw3dxdTCVcouU3nsH9PQgB0JhmEZtydZasO1jY47jvlqJVOLFKdVAvvZOyL9hDDUrxs2AAQZ%2FfQL38k7T%2F%2FjgUMZ7x%2BZMRXNNKk%3D" rel="nofollow">如何突破学习的瓶颈?</a><br><a href="https://link.segmentfault.com/?enc=yEjejxYfh%2FmVETp07tIdPA%3D%3D.Gi%2F2oq1El8fG%2BZgtzbuST%2Fyb%2F1kZ%2BusvAXUiNz7FcBxTjmOaSaVR913ARN2OZEfR%2BDRUQKzry%2BdkUJljlt%2FPUUO1JqwwS2bNIZ20AnsAwBbfAl49aoEj66D65Wi84DfYNGL31jQV0coktVYhM%2BgBm52Rv6AtEqDPsyiRoeRUwEt6XZeiv32qWo5rU5euUDMa4v8vnI2Nk6RJ%2BMDKFFdf%2BfA7uC1rAoHhTp21VcLtEBZVdw9WOORDMXBpB0heUtPcjm6t%2BTVBY4WR1noLjhbsiD9mc3Tmz7axjBIZGx4wJDI%3D" rel="nofollow">新手如何摆脱教程魔咒</a></p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!<br><img src="/img/remote/1460000015315799" alt="微信公众号:志哥 (ID: zhige-me)" title="微信公众号:志哥 (ID: zhige-me)"></p>
你真的搞懂了负数取模吗?
https://segmentfault.com/a/1190000015581794
2018-07-10T09:25:27+08:00
2018-07-10T09:25:27+08:00
志哥
https://segmentfault.com/u/zhige_me
7
<p>如果现在给你出下面这道面试题,你能答出来吗?</p>
<pre><code class="java">-7 % 3 = ?</code></pre>
<p>那这个呢?</p>
<pre><code class="java">7 % (-3) = ?</code></pre>
<p>正整数的取模大家应该玩的很溜了,(什么,正数的都不会,那自己去谷歌吧,百度也行。) 对于负数呢,上周有人在一个群里问这个问题,我以为我是会的,后来发现我的答案是错的,索性就去研究了一番。</p>
<p>带着问题我打开了维基百科 <a href="https://link.segmentfault.com/?enc=hUUKcfibTZyXtjSYGeylPg%3D%3D.WvVmAnCPTAwrmNLH1zXvVT7VLKh0vrHnxjeykdlwOFTAD6sSpCX%2B%2FY%2B%2FZnGmvQd%2B" rel="nofollow">https://en.wikipedia.org/wiki...</a> ,看到了这段话。</p>
<p>在几乎所有的计算系统中,取模运算都满足下面这个公式:</p>
<pre><code>a = nq + r |r| < |a|
假设 q 是 a、b 相除得到的商(quotient),r 是相应的余数(remainder)</code></pre>
<p>然而,取模操作又依赖于编程语言和底层硬件。</p>
<p>我们现在用这个工具地址 <a href="https://link.segmentfault.com/?enc=MPdajtyyAGV4scPBOVGfNA%3D%3D.ktX2yBjdyAL9vArq5WDJ8%2B%2FZKN2XsCfJeuqKhi3vgsg%3D" rel="nofollow">https://c.runoob.com/</a> 打开我学习的语言,比如 Java/C,会发现</p>
<pre><code class="java">-7 % 3 = -1
7 % (-3) = 1 </code></pre>
<p>既然编程语言决定了结果,那换一种语言,比如 Python,发现结果竟然真的不一样,你说神奇不神奇。</p>
<pre><code class="python">-7 % 3 = 2
7 % (-3) = -2</code></pre>
<p>这是为什么呢?</p>
<p>我们知道,当余数不为 0 的时候,取整除(符号是「/」,叫法不一样,可以纠正我一下),可能出现多种方式,下面是一些你应该知道的例子。</p>
<p><strong>向上取整</strong>。向 +∞ 方向取最接近精确值的整数,也就是取比实际结果稍大的最小整数,也叫 Ceiling 取整。这种取整方式下,</p>
<pre><code>17 / 10 = 2,5 / 2 = 3, -9 / 4 = -2</code></pre>
<p><strong>向下取整</strong>。向 -∞ 方向取最接近精确值的整数,也就是取比实际结果稍小的最大整数,也叫 Floor 取整。这种取整方式下,</p>
<pre><code>17 / 10 = 1,5 / 2 = 2, -9 / 4 = -3</code></pre>
<p><strong>向零取整</strong>。向 0 方向取最接近精确值的整数,换言之就是舍去小数部分,因此又称截断取整(Truncate)。这种取整方式下,</p>
<pre><code>17 / 10 = 1,5 / 2 = 2, -9 / 4 = -2</code></pre>
<p>我们再来看刚才的公式</p>
<pre><code>a = nq + r
我们知道商 q = a/n,从而得出
r = a - (a/n) * n
而 (a/n) 这个结果取决于上面几种方式用哪个</code></pre>
<p>下面我们就重点看这个 (a/n) </p>
<p>常用的计算机语言用的除法方式是下面这两种,<strong>truncate 除法</strong> 和 <strong>floor 除法</strong>。</p>
<p><strong>truncate 除法</strong> 即是上面的向零取整,也叫趋零截尾,而 <strong>floor 除法</strong> 即是上面的向下取整,也叫趋负无穷截尾。</p>
<p>而 Java/C 等语言用的是 truncate 除法,Python 用的是 floor 除法。</p>
<p>这下就明白了吧,现在我们再来看开始的面试题。</p>
<p>在 Java/C 中,</p>
<pre><code class="java">-7 % 3 = -1
7 % (-3) = 1
// 下面是推倒过程
-7 % 3 = -7 - trunc(-7/3) * 3 = -7 - (-2) * 3 = -7 + 6 = -1
7 % (-3) = 7 - trunc(7 / (-3)) * (-3) = 7 - (-2) * (-3) = 7 - 6 = 1</code></pre>
<p>在 Python 中,</p>
<pre><code class="python">-7 % 3 = 2
7 % (-3) = -2
## 下面是推倒过程
-7 % 3 = -7 - floor(-7/3) * 3 = -7 - (-3) * 3 = -7 + 9 = 2
7 % (-3) = 7 - floor(7 / (-3)) * (-3) = 7 - (-3) * (-3) = 7 - 9 = -2</code></pre>
<p>如果是其他语言,先去搞清楚是用的那种方式。</p>
<p>本文参考:<br>Modulo operation:<br><a href="https://link.segmentfault.com/?enc=b2iwSm18I5bJvs73tnF68Q%3D%3D.wcUpJ964mG1A%2B5NU%2F7eAFhjizINc2nePspWEOvxmzMeTMyg3UPyPI7Z5BtbDXCxh" rel="nofollow">https://en.wikipedia.org/wiki...</a><br>负数取模怎么算:<br><a href="https://link.segmentfault.com/?enc=5LuSXnEUwxRwy59z9Vx0Tw%3D%3D.UvBZfILFpyRkl81MqYrJ%2FOu0lZbBpSWQAsY%2Fg9hQi50iGyBWSRxo9G4T4jjXwLYT" rel="nofollow">https://www.jianshu.com/p/452...</a></p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!<br><img src="/img/remote/1460000015315799" alt="微信公众号:志哥 (ID: zhige-me)" title="微信公众号:志哥 (ID: zhige-me)"></p>
给身在大学的你 7 条建议
https://segmentfault.com/a/1190000015572789
2018-07-09T12:41:37+08:00
2018-07-09T12:41:37+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>这次大 B 哥布置的作业,看到了很多大学生的计划,不得不佩服现在的学生,目光比较长远,不禁感叹,一代更比一代强啊,压力山大。</p>
<p>作为一个已经毕业三年的老学长来讲,我建议所有在大学或者即将进入大学的同学,向上面的这些同学一样,能去做一份长远的计划,四年之后想达到什么样的水准,每年要完成哪些事情,写在纸上,贴在自己抬头就能看到的地方,再像张哥说的一样,分解成半年或者更细的计划,一天天去落实,你的目标定的再大也没关系,分解到几年、几百天,也就变得更小了,分解到天之后,你实现的可能性就慢慢变大了,重要的是坚持下去。</p>
<p>一份计划就像是指北针,能够帮助你指引方向,不断修正偏移。没有计划,像我大学时一样,一天天随意过,你会发现大学很快就过去了,因为人都是随波逐流的动物,如果你方向不明确,很容易被周围的环境带偏,比如别人都在玩游戏,你玩不玩,别人都在刷抖音,你刷不刷,因为这些东西明显是比你真正要做的事情更能吸引你的注意力。可能你一眨眼,四年过去了,你可能会像我一样发出感叹,我还什么都没做,怎么就要毕业了呢?</p>
<p>列出了计划之后,一定要去努力落实,一旦出现偏离的时候,希望这张纸上的字能够让你记得之前的梦想。</p>
<p>除了你们列的那些计划之外,还有一些我的建议,希望对你们有帮助:</p>
<p><strong>拥有健康的体魄</strong>。身体是革命的本钱,有一个好的身体,才能有更好的未来,上了大学之后,尤其是工作之后,很容易忽视这一点,我身边的很多同学,到大学之后就开始发福,因为没有高考的压力了,就很容易控制不住自己,不要真到影响你的时候,再去试图恢复健康,那时候可能就难了。多去运动场、篮球场、足球场等等。</p>
<p><strong>学好自己不喜欢的课程</strong>。我在大学的时候就没有学好自己不喜欢的课程,这对我是一大损失,我数学系的,没有学好数学和编程,当时我们数据结构、数据库、C++都有学,等到我毕业的时候从事编程这个职业的时候,才后悔莫及。你不喜欢做的事情才能更好的培养你的学习能力,适应能力。喜欢的事儿做好相对容易,不喜欢的事儿做好,才见功力。你要知道工作中即使是喜欢的事情,也可能会因为公司的压力变得让你烦躁。喜欢都是相对的,你可能比较喜欢自己在那玩玩,但是到了企业里面,就会有时间上的压力。</p>
<p><strong>找到能让你有成就感的事</strong>。兴趣只是开始,能让你不断投入时间和精力的是正反馈,是成就感。你需要找到让自己能够有成就感的事情,兴趣总是可以培养的。如果没有,就去找一件你不那么讨厌的事情,刻意练习。以大多数人努力的程度,和为自己不努力找借口的程度作为参考,只要你坚持正常的学习就可以超过大多数人了。</p>
<p><strong>学习如何赚钱</strong>。平时空闲时,或者长时间的假期,不要让自己在宿舍或者家里躺尸,尝试着去赚一点儿钱。当然,你可能赚不了多少钱,因为钱不是那么好赚,但是你要时刻有赚钱的心,你可能已经看到了最近比较火的电影《我不是药神》,世界上最大的病,是穷病。当然我不推荐做兼职,但是如果你实在不知道做什么,去做也是可以的,最起码你会知道工作不易,及早的知道赚钱不易对你是种财富,这对你来讲就很有意义。</p>
<p><strong>阅读写作</strong>。阅读是输入,写作是输出,用输入支撑输出,用输出倒逼输入。有些同学可能只觉得读书有用,而忽视了写作,其实只读的吸收率可能只有百分之十,你给别人讲出来才能到百分之九十,给别人讲出来没那么容易,你一定要先搞懂,思维清晰,才能讲出来,写作一个很好的梳理逻辑的途径。如果你不知道如何开始写东西,就从读完一本书或者听完一个课程,去写摘录。有一本书叫《刻意练习》,这本书里经常提到一个词:反馈,要想高效学习,一定要及时的反馈。可以看我这篇去了解 <a href="https://link.segmentfault.com/?enc=dnZ1DyjTRJ1argoURZp8%2BQ%3D%3D.g6qTUtqzUqmFI5yvS%2BjwFQcbrB9jfDEV5bMCY3yyU7tYDVQV1mZLgPamWopzWDY08z4DoxRwyFZqlFXYs99KMDioqrOxFupm5e%2BtDMIFervzUQWPKkqCDEO0gbW5kN8zPe0wDR2TbPcHGDiq4u9e24%2FZR%2BqZXOKyki%2FS7N4sH4gdPHHJr4Mivk2iMyvZqdZKNZ2i5HEthjcQoEYfCOaRbVqEjuUmM5Sg67WPGDyrZ2sfimXBw1EsIOJqdDxdkk%2B7ezWyLRT6dr8Hg4YLICCzesyEJPuBDyRe%2B6s2KWEq2p8%3D" rel="nofollow">如何制造反馈</a>,里面会教你如何去写摘录,还有其他的一些制造反馈的方法。还有要量化你的指标,刚才说了计划的问题,要做什么,列出来,读书,一年要读多少本?写作,找个博客平台,或者开个公众号,一年要写多少篇?再细化到一周,一天。</p>
<p><strong>掌握英语</strong>。学英语如果只是为了考四、六级,然后像我在大学的时候一样忘掉,那是一件很可惜的事儿。上半年的工作,让我认识到了英语的重要性,要和老外交流,感觉很吃力,当然也学到了很多。掌握了英语,你的世界会相对更有优势,因为这个世界的主要交流的语言还是英语,最优秀的东西还是英文为主,短时间内不会有变化。掌握它,终生受益。</p>
<p><strong>谈恋爱</strong>。大学之前情感比较压抑,无论是家长还是学校,都不允许早恋,觉得那会耽误学业,到了大学一定要抓住机会,去谈一场属于青春标志的恋爱,这个时候的爱情比较纯粹,并且这时候的压力很小,还有大把的时间相处,可以一起成长,是多么美妙的事情。即使失败了也没关系,我就是失败的典型,不过恋爱也是一项技能,技能总要在失败中得到训练,失败来的早一点比晚一点更好。离开大学后,工作中有了更大的压力,更承担不起失败的成本。当然,如果你真的没有遇到心动的、喜欢的那个ta,也不必勉强,下一个路口,可能就会遇到更合适的人。</p>
<p>好好把握这几年,让自己稍微难一点,回头想想你会觉得更有意义,更有趣。因为你以后就会发现后面会更难。扎心了……</p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!<br><img src="/img/remote/1460000015572792" alt="微信公众号:志哥 (ID: zhige-me)" title="微信公众号:志哥 (ID: zhige-me)"></p>
算法:数组中只出现一次的数字
https://segmentfault.com/a/1190000015483461
2018-07-04T23:48:33+08:00
2018-07-04T23:48:33+08:00
志哥
https://segmentfault.com/u/zhige_me
1
<p>给定一个<strong>非空</strong>整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。</p>
<p><strong>说明:</strong></p>
<p>你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?</p>
<p><strong>示例 1:</strong></p>
<pre><code>输入: [2,2,1]
输出: 1</code></pre>
<p><strong>示例 2:</strong></p>
<pre><code>输入: [4,1,2,1,2]
输出: 4</code></pre>
<p>题目原地址:</p>
<p><a href="https://link.segmentfault.com/?enc=zL4pb6yf%2FGLE9cL1hN4VUg%3D%3D.hdqlEhhu%2BAJH6FR6Yo3Jng30xFk0xtDrl5QuNIeP5Uclunwvsv1xJEIbwNJ6NLKe%2BVUJ6rrXcAYD2MmYhTfO2bzqNS3eB29MvLkX6JNZLtaKcv8a0Ue7r8AIEdUT2BSb" rel="nofollow">https://leetcode-cn.com/explo...</a></p>
<pre><code class="java">/**
* 我能想到的第一个方法就是把所有的值当成 Map 的key,出现的次数当成value
* 最后次数为 1 的就是那个单个的
*/
public int singleNumber(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
if (!map.containsKey(num)) {
map.put(num, 1);
} else {
map.put(num, map.get(num) + 1);
}
}
return map.entrySet().stream().filter(r -> r.getValue() == 1).findFirst().get().getKey();
}
/**
* 看到重复元素,本能的想到 Set,可以考虑把出现两次的数字先添加到 Set 里面,然后再移除掉,
* 最后剩下一个就是单个的值。
*/
public int singleNumber1(int[] nums) {
Set<Integer> set = new HashSet<>();
for (int num : nums) {
if (!set.remove(num)) {
set.add(num);
}
}
return set.iterator().next();
}
/**
* 异或(^) 运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1)
* 除了其中一个数字是一次外,其他的都是两次,相同的值异或结果为0,用0异或所有的值,
* 最终结果就是那个单个的值。
*/
public int singleNumber2(int[] nums) {
int r = 0;
for (int num : nums) {
r ^= num;
}
return r;
}</code></pre>
<p>如果你有更好的方式,可以分享,共同学习,共同进步。</p>
<p>相关文章:</p>
<p><a href="https://link.segmentfault.com/?enc=rOQoTbnNIZo%2FmffFMqwCsQ%3D%3D.wiBvKe25SUD%2F5HM22gCS88%2BmviROAHo53BiEsi958hRMJS6xaRwDxYYi8jlagCOcgw8bRtffH5ZYw0iLfEJOJnN8qjBqJyIAkaqa7TNsTs36ijDOJbjdnDhZ32%2FwsnP7i14HTGJ7%2F3WodyXunGxcxE9tK6j6SLBKrIy44nJ2d277K179kkHZVE4Flf0qOrz41GOgkGQIJM5bs49KFRbV7z52tNImIlwnuKOR0y1eZs%2FqQOMUs8%2BQjhuiFxSPErneke2iphNv2awu0qt1nrQCbLT0EajYp5AR8C8KfJyYgSg%3D" rel="nofollow">从排序数组中删除重复项</a><br><a href="https://link.segmentfault.com/?enc=GkbVj6N5ghsSqVrRf64GCQ%3D%3D.IcBezKuix3u%2FbnGeanzKjCM%2FoNewob177n7oLG%2FIf%2BdZWAcWVZ4meijvqoflIcLY" rel="nofollow">用Java实现一些简单算法</a><br><a href="https://link.segmentfault.com/?enc=3Tx18w9euladHf1BYoX05Q%3D%3D.vN1Co0mZvSWY8hrlBuDwSTqiXTHLS1NNZhI1djGyiX4iOyFty8YgjSLgjgJOoB5C" rel="nofollow">统计一个字符串中整数的个数</a></p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!<br><img src="/img/remote/1460000015315799" alt="微信公众号:志哥 (ID: zhige-me)" title="微信公众号:志哥 (ID: zhige-me)"></p>
关于读书,请你丢掉对书本的敬畏感
https://segmentfault.com/a/1190000015455845
2018-07-02T23:48:03+08:00
2018-07-02T23:48:03+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<blockquote>书中自有千钟粟,书中自有黄金屋,书中自有颜如玉。<p>读史使人明智,读诗使人灵秀,数学使人周密,科学使人深刻,伦理学使人庄重,逻辑修辞使人善辩。</p>
<p>你的气质里,藏着你读过的书和走过的路。</p>
</blockquote>
<p>你看,古今中外,都在强调读书的重要性,读书能够陶冶情操、可以修身养性、能够提升认知、可以重塑价值观,总之就是一个意思,书里都是宝。</p>
<p>这样的强调好不好呢?当然好,但是还是会出现点问题,就是很多人会因此对书产生敬畏感,总觉得这是专家、教授、学者这些比较厉害的人写的,我只不过是个菜逼,是个学生,要恭恭敬敬的学习书本上的教给我们的东西,生怕漏了些啥,还有一些人直接不读书了,一听到别人读书,就觉得跟他们不是一路人。</p>
<p>作为一个读者,首先要摆正的心态就是<strong>摆脱对书的敬畏感</strong>。首先思考一个问题,书是怎么来的呢?书都是人写的,这不是废话吗,你看,一个人在写一本书的时候,都有一个大的时代背景,肯定受这个社会整体知识背景的影响,还有一点是写书的人的水平也参差不齐,不要觉得只要是印在纸上的东西就有价值,市面上有大量的书,其实没有包装的有价值。</p>
<p>我身边也有写书的,我刚开始也是很崇拜,觉得好牛逼,其实看了一下就发现,就是几十篇博客凑到一块,随着技术的更新迭代,很多都不能用了。当然我这么说是没有底气的,因为我毕竟连这样的都写不出来。我只是想告诉大家的是,不要觉得装订成书,出版了,就是很有价值。</p>
<p>还有一些书籍,只是针对当时的社会问题,可能现在已经不存在这个问题了,如果你觉得怎么看也没觉得哪好看,可能是社会背景不同。还有一些纯粹为了凑字数,把搜集的一堆材料堆积成一本书,其实就讲了一件事,也有可能作者自己都不知道自己在说什么。尤其是出版业比较发达的现在,很多非虚构类的书,百分之八九十都是在堆砌材料,可能只有百分之十到二十是表达自己的观点,能对你有所启发的可能连百分之一都不到,不过只要一本书哪怕只要有一句话对你有用,那就值了。</p>
<p>到这里可能你会说了,你不就是想说读书不重要吗?其实不是的,恰恰相反,读书非常重要,它是我们链接世界的一个重要方式。如果你对读书不感兴趣,可能就错过了很多美好的事物和思想。</p>
<p>只不过,单单一本书的重要性远不及人们对它的吹嘘。没有人是因为读了某一本书就大彻大悟,改变了人生的,如果有,也是因为他之前读了很多书,达到了某个临界点。就像有个笑话说的,一个人吃了五个饼,等到吃第六个的时候吃饱了,他说,早知道吃这个就能饱,我就不吃那五个了。</p>
<p>我们看到一本书的时候,首先做的不是跪在他面前,而是保持轻松的心态,就像你再跟一个老朋友交谈,交谈的过程中,他说的有用的你就收下,化作自己的营养,没用的,果断扔掉。美好的书籍,就像股市的韭菜一样,割掉一茬又一茬,不要把时间浪费在单纯的一本书上面。</p>
<p>所以,阅读最重要的一个心态就是要丢掉对书本的敬畏感。</p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!<br><img src="/img/remote/1460000015315799" alt="微信公众号:志哥 (ID: zhige-me)" title="微信公众号:志哥 (ID: zhige-me)"></p>
我为什么会放弃读书?
https://segmentfault.com/a/1190000015442551
2018-07-01T20:08:43+08:00
2018-07-01T20:08:43+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>回想起来,我小时候身边没有什么书读,读的最多的应该是语文课本吧,很羡慕现在的小孩子,他们拥有的书真是太多了,从小就可以看到那么多丰富多彩的书,每次看到有小朋友年纪轻轻就看了那么多书,就有很高的认知水平,我就在想,要是我小时候也像他们一样有那么多书读,那么我会成为什么样子呢?</p>
<p>我应该是从中学时期才开始读书的,那时候进到了城里,身边多了一些家里有很多书的同学,看到他们带过来,就互相借阅着看,阅读的萌芽开始生长,尤其到了大学,看到图书馆那么多书还是有点惊叹的,在图书馆读了很多纸质书,当然也有了电子设备,也通过手机看了很多电子书,看到了更加丰富的世界,自己的观念也开始渐渐转变,认知水平得到了很大的提高。</p>
<p>但是这一段时间我发现我读的书可谓越来越少了,为什么会这样呢?我想到了几点原因。</p>
<h4>我想变得更加空虚</h4>
<p>很多人开始读书,应该是因为空虚无聊,无事可做就会内心发慌,我之前也是这样,会通过读书消磨时间,有些书能够让人觉得自己是在驰骋在作者描述的世界,融入一幕幕画面之中;有些书会描述作者的经历,如果和我的有些许相似之处,就会有强烈的共鸣;还有一些书会告诉你一些你从来不知道的知识和道理,读书的过程让自己的时间变得有意义、有意思,让人觉得活的更加充实。</p>
<p>而我现在觉得越充实的生活越累,所以我也就不读书了。</p>
<h4>我对这个世界不再充满好奇</h4>
<p>由于对这个世界的好奇,我读了很多书,我想了解某一段历史,我就会读一些那个朝代相关的书籍,我想了解 64 这个数字的含义,以及很多相关事情,读了一些liu 小波以及其他人的著作,还有我想知道为什么有些人读书那么快,看了好多本关于如何读书、如何快速读书的书。</p>
<p>而我现在对这个世界不再那么好奇了,我沉沦在了我身边的琐事之中,所以我也就不读书了。</p>
<h4>我不再想去解决问题</h4>
<p>我经常会有一些工作或者生活中遇到的问题,向身边的同学、朋友求助无果,这时候就要去通过书中去找到问题的答案,有些经典的书籍之中的只言片语就能让问题迎刃而解。比如我买股票的时候会去看一些资产负债、盈利收益的数据,但是看不懂,这时候就去买了几本关于读财报的书。</p>
<p>而我现在不再想去解决问题了,所以我也就不读书了。</p>
<h4>我不再去想摆脱平庸</h4>
<p>可以说,绝大多数人,都不甘心这辈子只当一个平庸的人,都想施展自己的才华和抱负,年老时,回想自己一生,有一些值得去说道的故事,或者有些值得去传世的思想,这或许是我们追求的一种人生的意义。而读书早一天,就多一份人生的精彩。褚时健老先生也说:「回想这么多年来,我自己做得最问心无愧的就是:没有庸庸碌碌的生活。」</p>
<p>而我现在想着得过且过,所以我也就不读书了。</p>
<h4>我不再想去提升认知</h4>
<p>提升认知的方式有很多种,不只是读书,有一句俗语说嘛,「读万卷书不如行万里路,行万里路不如阅人无数。」这里面说的获取知识的方式排行是 <code>读万卷书 < 行万里路 < 阅人无数</code>,很多人就认为读书没用了,不如去多走走看看,不如多认识点人。其实我们很多人有时候并不具备行万里路和阅人无数的资本和时间,这时候读书就是最有效的学习方式。</p>
<p>我不再想去提升自己了,所以我也就不读书了。</p>
<h4>我想把安宁的内心变得更加浮躁</h4>
<p>有时候内心非常浮躁,看起来很忙碌,其实效率很低,这时候我会选择读会儿书,让自己的内心变的平静下来,比如读一些人物传记,看到他们跌宕起伏的一生,再想想自己的小事儿觉得不足挂齿。然后去合理规划自己的时间,一步一步的把事情做完。</p>
<p>而我现在总想让人觉得很忙,不再关心效率,所以我也就不读书了。</p>
<p>好了,说了这么多理由解释自己不想读书,其实只是应了那句话:「说不读书、或者没时间读书的人,几乎全是各种不着边的借口,无一例外。」</p>
<p>那么如何找到好书读呢?我有一种方法,就是每认识到喜欢读书的人,就问他最近读过的书里面令他印象最深刻的书是什么?我觉得这个方法也可以在这里做,读到我这篇的读者,你最近读到的书自己最喜欢的是哪本呢?</p>
<p>我先来,《穷查理宝典》,里面讲了巴菲特的合伙人查理芒格的思维模型、人生哲学,我读到了两个关键词,跨界和反转,反转就是我这篇文章的表达思路,用芒格比较经典的一句话就是「告诉我会死在哪里,我就永远不会去那里」</p>
<p>下面该你了 :),留言告诉我们你最近读过的比较喜欢的书是什么吧。</p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!<br><img src="/img/remote/1460000015315799" alt="微信公众号:志哥 (ID: zhige-me)" title="微信公众号:志哥 (ID: zhige-me)"></p>
Java Map 通过 key 或者 value 过滤
https://segmentfault.com/a/1190000015421902
2018-06-28T23:54:38+08:00
2018-06-28T23:54:38+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>今天写根过滤的时候一下子有点愣眼,先是想到用 Java 原生的 map 循环查出来,但是觉得太 low, 后面思考了一下可以用 Java8 的 Lambda,写完了,又发现 Google Guava 有现成的方法,这里一一列出来,供参考使用。</p>
<p>首先提示,如果照搬我的代码的话别忘了引这些依赖</p>
<pre><code class="xml"><dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>25.1-jre</version>
</dependency>
</dependencies></code></pre>
<h4>filter by key</h4>
<pre><code class="java">public class FilterMapByKeyTest {
private Map<Integer, String> WEEK = new HashMap<>();
@Before
public void setUp () {
WEEK.put(1, "Monday");
WEEK.put(2, "Tuesday");
WEEK.put(3, "Wednesday");
WEEK.put(4, "Thursday");
WEEK.put(5, "Friday");
WEEK.put(6, "Saturday");
WEEK.put(7, "Sunday");
}
/**
* Java 8之前的版本
*/
@Test
public void filterMapByKey () {
Map<Integer, String> map = new HashMap<>();
for (Map.Entry<Integer, String> entry : WEEK.entrySet()) {
if (entry.getKey() <= 3) {
map.put(entry.getKey(), entry.getValue());
}
}
assertThat(map.keySet(), contains(1, 2, 3));
}
/**
* Java 8 Lambda
*/
@Test
public void filterMapByKeyJava8Lambda () {
Map<Integer, String> map = WEEK.entrySet().stream().filter(r -> r.getKey() <= 3)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
assertThat(map.keySet(), contains(1, 2, 3));
}
/**
* Google Guava
*/
@Test
public void filterMapByKeyGuava () {
Map<Integer, String> map = Maps.filterKeys(WEEK, r -> r <= 3);
assertThat(map.keySet(), contains(1, 2, 3));
}
}</code></pre>
<h4>filter by value</h4>
<pre><code class="java">public class FilterMapByValueTest {
private Map<Integer, String> WEEK = new HashMap<>();
@Before
public void setUp () {
WEEK.put(1, "Monday");
WEEK.put(2, "Tuesday");
WEEK.put(3, "Wednesday");
WEEK.put(4, "Thursday");
WEEK.put(5, "Friday");
WEEK.put(6, "Saturday");
WEEK.put(7, "Sunday");
}
/**
* Java 8之前的版本
*/
@Test
public void filterMapByValue () {
Map<Integer, String> map = new HashMap<>();
for (Map.Entry<Integer, String> entry : WEEK.entrySet()) {
if (entry.getValue().startsWith("S")) {
map.put(entry.getKey(), entry.getValue());
}
}
assertThat(map.values(), contains("Saturday","Sunday"));
}
/**
* Java 8 Lambda
*/
@Test
public void filterMapByValueJava8Lambda () {
Map<Integer, String> map = WEEK.entrySet().stream().filter(r -> r.getValue().startsWith("S"))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
assertThat(map.values(), contains("Saturday","Sunday"));
}
/**
* Google Guava
*/
@Test
public void filterMapByValueGuava () {
Map<Integer, String> map = Maps.filterValues(WEEK, r -> r.startsWith("S"));
assertThat(map.values(), contains("Saturday","Sunday"));
}
}</code></pre>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!<br><img src="/img/remote/1460000015315799" alt="微信公众号:志哥 (ID: zhige-me)" title="微信公众号:志哥 (ID: zhige-me)"></p>
新手如何摆脱教程魔咒
https://segmentfault.com/a/1190000015371492
2018-06-24T15:28:14+08:00
2018-06-24T15:28:14+08:00
志哥
https://segmentfault.com/u/zhige_me
1
<h4>ARTS 介绍</h4>
<p>ARTS 是「左耳朵耗子」发起的活动,每周至少做一个 leetcode 的算法题,阅读并点评至少一篇英文技术文章,学习至少一个技术技巧,至少分享一篇有观点和思考的技术文章。坚持至少一年!(也就是:Algorithm、Review、Technique、Share 简称 ARTS)</p>
<p>英文原文地址:<br><a href="https://link.segmentfault.com/?enc=RdsnmNBbTLW0J1Yz%2Bg7UaQ%3D%3D.XJ7N68Yp614G6VzDQDR%2BPiTOxewRTFI8uvdrwQSVoM0zY5ecHovooZ8ghgRWhO69piaQaLuvfTDkI%2FtZh%2Fn5KehsQZSLRIdAe5dGqt9MdI0Z3hLQ1mo7EcpKVi0hgSAZ%2FzwESGgP3FfMXDySmpPaXUPkxB99eMgWCK2PkAbhniE%3D" rel="nofollow">How to escape tutorial purgatory as a new developer — or at any time in your career</a></p>
<h4>原文概述</h4>
<p>博主每次想要构建一个自己的项目的时候,就会发现很多东西不会,甚至一点思路都没有,于是乎,他决定应该先去学点什么东西。</p>
<p>然后去了各种学习网站看教程,比如 YouTube, Udemy 以及偶然间发现的网站,学了很多自己感兴趣的或者自认为有一天会应用到自己的项目中的,当然学习教程没有错,确实是一个很好的学习方式,但是如果稍微不注意,就会陷入教程魔咒,无法自拔,看了很多,学了很少。博主举了个例子:花几十个小时看了某个教程1,然后人家出了个教程2,于是又买下来看了一遍,其实很多东西都是重复的。</p>
<p>为什么会出现这种问题呢?</p>
<p>是因为陷入了舒适区,学教程不需要花费你脑力,你只要跟着做就好了,它帮助你避免了很多问题,而你自我感觉良好,觉得什么都学会了。事实上呢,你的忘了最初的目的,你本来是为了构建一个工程,为了解决某个问题,现在只是为了学习,而学习的东西可能跟你的目的没有半点关系,这样效率很低,你学到的东西远没有你想象的多。</p>
<p>应该怎么做呢?</p>
<p>首先摆脱舒适区,博主决定构建一个类似于 Stack Overflow 的问答网站,能够实现简单的功能,比如注册登录、提交问题和答案、写评论,嵌入一些视频。</p>
<p>由于他最近学了一点 Ruby on Rails,觉得还不错,就决定用 Rails 构建他的网站。刚开始肯定很多东西不会,不知道怎么做授权、怎么分页、评论如何实现。他决定从他会的开始做起,他会什么呢?会用谷歌,于是用谷歌去搜了很多东西,搜到了用什么技术适合解决什么问题,还搜到了详细的博客帮助他解决了认证的问题。当然他还借助于 Stack Overflow 问答平台寻找能够解决自己问题的办法。</p>
<p>注意:不是说他不再看视频了,而是有目的的去看了,去看一些能立即解决自己问题的视频教程。</p>
<p>当然肯定会有极个别的疑难杂症,在网上可能没有现成答案,这时候就要去请教了,可以在一些问答网站上留下自己的问题,也可以去问自己的朋友、老师(这句是我加的),可能有时候收效甚微,但是没关系,只要他们的一些提示能够帮助你找到解决问题的思路就好了。</p>
<p>最后他完成了,虽然看起来并不完美,并且有很多知识他现在都没搞懂,但那又能怎么样呢?他可以慢慢优化、慢慢学习,他学到了很多之前没有学到的东西,效率比看教程高了很多,更重要的是,他学到了作为一个开发者所必须的技能,如何去解决问题。</p>
<p>不要指望着学会所有的东西才去开始做一些事情。不要怂,就是干。</p>
<h4>志哥点评</h4>
<h5>任务驱动学习</h5>
<p>我和这篇英文博主一样,在大三大四的时候看了很多视频教程,还是什么也不会,不是说教程没用,只是时间成本太高、效率很低,看了很多,忘的也很多,还有我只是看教程,很少写代码,因为没有实操,教程帮助你避免了很多问题,没有问题就是最大的问题,其实问题解决的多了,自然就会了。还有我们学一样的东西的时候要及时反馈,只是听会了并不是真懂了,能讲出来才是真懂了,你可以给自己反馈,比如以写文章的方式,看的一些东西都写出来个摘要,只有思维和逻辑清晰,才有可能把这篇文章完成,当然暴露的问题也是给你的反馈,这些才是更有效率的学习方式,关于如何给自己反馈,可以看下面这篇文章「<a href="https://link.segmentfault.com/?enc=1uU4ekIgVVKXV6f%2FFTWRqQ%3D%3D.WUg6aIv6LZOf%2BvjCyHwGZ1zkuz3s1gJgfURsgKi9rfpnjXoQHvXzLHWXrS3SZt2VMoMUSW49VNVtvxfvMTIjTJAl4bLelPq%2FE4XuDtJ%2FZQQkIPX%2Fa0PUBd14FoGoKq2JBB0qlc80%2B8oCqgjyaZeamaP1D8IilJMQRRXu8dQC41yxUWS1xNZpFfJcsyZ%2BKarXzDlJ6t1r0%2FwqpiaJioVk62FTp5fE7Rad4%2BIAmPaEihhYydnkaOd5mbilDvAX9njdQomvY%2BWQxA9Bo%2FStyiAG8smIeETTA1NI57gVaCXOXYk%3D" rel="nofollow">如何给自己制造反馈?</a>」</p>
<h5>如何学英文</h5>
<p>经常有人问怎么学习英文,一般学英语都是刚开始就去学单词和语法这些基础的东西了,枯燥乏味,很难坚持,我的观点是想学什么直接去学就好了。首先要确定一个目标,这个很重要,我们很多人的目标都是很模糊,比如人家都学我也要学、学英文好……这些都是很模糊的目标,比如我学英文的目标就很明确,看懂技术文档,那我就直接看技术文档好了,看不懂没关系,一句一句的看,一个单词一个单词的查,多看几遍,比如上面这篇文章我就看了不下五遍。当然不是说基础不重要,只是刚开始看基础会消磨掉耐心,进而打击信心。可以看这篇文章了解更详细的阐述「<a href="https://link.segmentfault.com/?enc=HeDWcD1fPXHre%2FBTr7dhnw%3D%3D.Jf0SsJEUgFrhK107lRr89GHNjFQ8ZLC91WWc49UHBlSKnfgX1Q%2FNTfe1c6n3EvOcT6TfsS2%2Fe31u6KQ01uakmZ3U4PN%2BC01KUcwU59A4t191QWbBfSyLl5oUibs1YjYTTc6J%2BncjKGdTJAjNksPnGsvhp80VCjZ23%2F4nox8nl%2BXvKP%2BSnK%2BlZItX79dk%2FgLTlsHEmPXq7zOeMHpSuAOWYvGZ%2F2lhuhW4t9xGTFzHqxAyKbsKczUXuqn%2Bb%2B47o7v5F57j7pG%2FYdtBM%2FTOFG3eNpUZAnGqmDuKD4GgOu4c4yQ%3D" rel="nofollow">直奔大师,不必从基础开始</a>」</p>
<p>还有人说,我其实对学英文并不感兴趣,只是周围人都在学,我比较焦虑才要学的,实际上我们平时学的东西哪有几个是自己感兴趣的,我最感兴趣的是看电影、发呆、躺尸,人有时候是被逼的,可能是因为穷……所以我们大部分时间需要放弃兴趣驱动,转向任务驱动。当然不可否认的是兴趣的确是最好的老师,只不过我现在没有兴趣。可以看这篇文章了解更加详细的阐述「<a href="https://link.segmentfault.com/?enc=V2GOKsCwAQ59b91IHg9q2Q%3D%3D.6qPRwAf4wAqE05U5ICA99AJnd0%2Fn10Ov91z%2FZ%2FfBTumjYdluAH847GIxBNQhDjl3RCnrO%2FQyZ9Gp%2FGlwEJia8ntuSoqC5%2FtCT5jUAhq3EOJKjdSI0H9s6QS2On648Q3hjy6JZ90GKoqu0OouNmfm6KSYkUrG305vBKcRQ3Jqw8NmQkHd2FdrNu5%2BynbNRsapWdhRbNMvW5Ji9Eq2cet%2FWVUHZIsU8JcxtC0LqIN4cVQBwjT765%2B8vj8VZUdGC3bx%2B2mrSEXJ7RUAHRroe2HJDRljbt0hVm3kV3UL2ukIiOE%3D" rel="nofollow">不要再谈没兴趣了,那只是你不学习的借口罢了</a>」</p>
<p>更多高效学习的文章,可以看下面这篇「<a href="https://link.segmentfault.com/?enc=Htyij3DvIK2g3yl6j60G3g%3D%3D.JHiB846bndy9Hb8fd7GRlbHBJ4rzcsNbdvpvhWTmGyrEyX3ry4%2BOoOTshCU9L8D7eB5jH0AMxgUj9KsvkV3nUlcswqtQFOVHWD4OAyHzU%2BKpOoO%2F2sDw9xeK1T9MiykDyCW7IUvIV4qEKsujJZQRY7ZgWmMVpmEzPXfNun7%2FfhLQw9%2ByQId8sdVFXMblFNQkW2HeAtXTdqy5zdypprpsSF3sQJD9r1H8rraXIZSEnxk%2B%2BODXKHzo6WrQpw5cgh4xG0pdhND8%2FA3WUrqfC3XyGueMRH6L1bpzJgxtTfP4ccE%3D" rel="nofollow">如何成为有效学习的高手</a>」</p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!<br><img src="/img/remote/1460000015315799" alt="微信公众号:志哥 (ID: zhige-me)" title="微信公众号:志哥 (ID: zhige-me)"></p>
算法:从排序数组中删除重复项
https://segmentfault.com/a/1190000015367852
2018-06-23T20:24:00+08:00
2018-06-23T20:24:00+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<h4>ARTS 介绍</h4>
<p>ARTS 是「左耳朵耗子」发起的活动,每周至少做一个 leetcode 的算法题,阅读并点评至少一篇英文技术文章,学习至少一个技术技巧,至少分享一篇有观点和思考的技术文章。坚持至少一年!(也就是:Algorithm、Review、Technique、Share 简称 ARTS)</p>
<h4>题目:从排序数组中删除重复项</h4>
<p>给定一个排序数组,你需要在<strong>原地</strong>删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在<strong>原地修改输入数组</strong>并在使用 O(1) 额外空间的条件下完成。</p>
<p><strong>示例 1:</strong></p>
<pre><code>给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。</code></pre>
<p><strong>示例 2:</strong></p>
<pre><code>给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。</code></pre>
<p><strong>说明:</strong></p>
<p>为什么返回数值是整数,但输出的答案是数组呢?</p>
<p>请注意,输入数组是以<strong>“引用”</strong>方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。</p>
<p>你可以想象内部操作如下:</p>
<pre><code>// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);
// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}</code></pre>
<p>题目原地址:<br><a href="https://link.segmentfault.com/?enc=p%2BDz2f1XgHlkZXIDrnzOXQ%3D%3D.bwfd5ETVXypHjsjXrpdjp3uE7d0DEZt%2FgtYK8mOYvwUp%2Fx54%2F%2BsCNHNIpbnoOqoDkvt6fxFBNfBuIXVwUH%2F%2FlZjm%2Fd1RPlxL%2BbbB2Crw5%2BZ%2BG2qgqxJ8Z2HCkoTiYax4" rel="nofollow">https://leetcode-cn.com/explo...</a></p>
<p>可以把写好的代码去这里提交,验证是否通过。</p>
<p>提示:首先读题要准,千万不要认为只是返回个数字就完了。</p>
<pre><code class="java">/**
* 方案1
* 第一个元素必然是结果里面的,首先确定这个,然后把后面的跟这个做比较,
* 如果不相同,记下来。最后记下来的总数就是结果
*
* 1、考虑到最后的数组必须是不重复的,那么要用一个数字 count 来记不重复下标,因为原数组是重复的
* 2、第一个数必定不是重复的,即 nums[0] 肯定要在结果里面,所以我们把 count 从 0 开始计数
* 3、判断后面一个数字跟不重复的数组最后一个元素 nums[count] 是否相同,如果不相同,
* 则记下来后面这个值,添加到不重复数组的后面一位,即 count 先加1,然后在把当前值设置进去
* 4、第3步说了,count是从 0 开始的,最后返回不重复的数组长度,要加1
*
* 虽然我一直在说两个数组,其实是在一个数组中完成的,因为题目的要求就是只能在一个数组中
* 只是输出的时候,前面的数字是不重复的。后面的他们不会管
*/
public int removeDuplicates(int[] nums) {
int count = 0;
for (int i = 1; i< nums.length; i++) {
if (nums[i] != nums[count]) {
count++;
nums[count] = nums[i];
}
}
return count+1;
}
/**
* 方案2
* 后一个跟前一个比较,记下重复的数量,最后用总数减去重复的
*
* 1、首先定义一个计数器 count,如果重复,count 加 1
* 2、如果不重复,用当前下标减去重复的数量,即是当前不重复的这个数字的下标
* 3、总长度减去重复数即是返回结果
*
* 虽然我一直在说两个数组,其实是在一个数组中完成的,因为题目的要求就是只能在一个数组中
* 只是输出的时候,前面的数字是不重复的。后面的他们不会管
*/
public int removeDuplicates1(int[] nums) {
int count = 0;
for(int i = 1; i < nums.length; i++){
if(nums[i] == nums[i-1]) count++;
else nums[i-count] = nums[i];
}
return nums.length-count;
}</code></pre>
<p>如果你有更好的方式,可以分享,共同学习,共同进步。</p>
<p>以上代码发布到我的 Github 上了,地址是<br><a href="https://link.segmentfault.com/?enc=Z5pbK1ZGp4EN5g0JJLCKWA%3D%3D.dFZyhXGyIsoj5t7aEEznYto3hyldqCPRXsKild03n12QLAYg4Ds3HEXU6Ya3TRCWDOX6yojKdfRiTFib9yqopvuX7abpQv1%2BUdBuAMoUnCA%3D" rel="nofollow">https://github.com/wangyongzh...</a></p>
<p>相关文章:</p>
<p><a href="https://link.segmentfault.com/?enc=CEe3OQdSzQhSBdAiMeE66A%3D%3D.s8up3sMt%2FsHcciEYDDb9VWvAIdMC09B7RbddPSOgxti8GkFdHmgqEJ28iAg%2FOrlI" rel="nofollow">用Java实现一些简单算法</a><br><a href="https://link.segmentfault.com/?enc=1Q%2BNA36ZNFw4cNR9XpIg8w%3D%3D.4F34gEMFoLp7CVVkHj%2B0zt25Et8iustg8ZoscBkV%2Fjcz33KSAn84EnXmYEG5TbBH" rel="nofollow">统计一个字符串中整数的个数</a></p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!<br><img src="/img/remote/1460000015319946" alt="微信公众号:志哥 (ID: zhige-me)" title="微信公众号:志哥 (ID: zhige-me)"></p>
macOS Sierra 提示已损坏的文件如何打开
https://segmentfault.com/a/1190000015319942
2018-06-19T11:44:41+08:00
2018-06-19T11:44:41+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>你们可能像我一样,在网上找了个软件之后,安装好了,打开的时候发现电脑提示它为已损坏状态,打不开,并且只有俩按钮,一个「取消」,意思就是不让用了,另一个是「移到废纸篓」,意思也是不让用了。这时候怎么办呢?</p>
<p><img src="/img/remote/1460000015319945" alt="image" title="image"></p>
<p>出现这种问题的原因一般是,这个软件可能经过了破解或者汉化,Mac 认为它已损坏。</p>
<p>macOS Sierra 之前的版本是需要手动去打开应用程序的,步骤大概是</p>
<pre><code>系统偏好设置 -> 安全性和隐私 -> 通用 -> 勾选任何来源</code></pre>
<p>然鹅,macOS Sierra 以后的版本这个「任何来源」隐藏了。</p>
<p>下面来告诉你们怎么打开「任何来源」选项</p>
<p>1、打开终端,在里面输入下面这个命令</p>
<p>2、显示「任何来源」选项在控制台中执行:(注意:master 前是两个短横「--」,后面是一个短横「-」)</p>
<pre><code>sudo spctl --master-disable</code></pre>
<p>这时候再去打开你的文件,看看是不是可以打开了。</p>
<p>如果不显示「任何来源」选项(macOS 10.12以上版本默认为不显示)在控制台中执行:</p>
<pre><code>sudo spctl --master-enable</code></pre>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!<br><img src="/img/remote/1460000015319946" alt="微信公众号:志哥 (ID: zhige-me)" title="微信公众号:志哥 (ID: zhige-me)"></p>
推荐一个 Java 实体映射工具 MapStruct
https://segmentfault.com/a/1190000015294834
2018-06-14T23:35:58+08:00
2018-06-14T23:35:58+08:00
志哥
https://segmentfault.com/u/zhige_me
3
<pre><code>声明:
1、DO(业务实体对象),DTO(数据传输对象)。
2、我的代码中用到了 Lombok ,不了解的可以自行了解一下,了解的忽略这条就好。</code></pre>
<p>在一个成熟的工程中,尤其是现在的分布式系统中,应用与应用之间,还有单独的应用细分模块之后,DO 一般不会让外部依赖,这时候需要在提供对外接口的模块里放 DTO 用于对象传输,也即是 DO 对象对内,DTO对象对外,DTO 可以根据业务需要变更,并不需要映射 DO 的全部属性。</p>
<p>这种 对象与对象之间的互相转换,就需要有一个专门用来解决转换问题的工具,毕竟每一个字段都 get/set 会很麻烦。</p>
<p>MapStruct 就是这样的一个属性映射工具,只需要定义一个 Mapper 接口,MapStruct 就会自动实现这个映射接口,避免了复杂繁琐的映射实现。MapStruct官网地址: <a href="https://link.segmentfault.com/?enc=T4fs7VAcDbNULx%2B%2F5hLF6g%3D%3D.SnOHCL%2BzmPXSlS6vH8U0Ylxb0m6HmcRb9etHWSmQPJY%3D" rel="nofollow">http://mapstruct.org/</a></p>
<h4>工程中引入 maven 依赖</h4>
<pre><code class="xml"><properties>
<mapstruct.version>1.2.0.Final</mapstruct.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</dependency>
</dependencies></code></pre>
<h4>基本映射</h4>
<p>这里定义两个 DO 对象 Person 和 User,其中 user 是 Person 的一个属性 ,一个 DTO 对象 PersonDTO</p>
<pre><code class="java">@NoArgsConstructor
@AllArgsConstructor
@Data
public class Person {
private Long id;
private String name;
private String email;
private Date birthday;
private User user;
}
@NoArgsConstructor
@AllArgsConstructor
@Data
public class User {
private Integer age;
}
@NoArgsConstructor
@AllArgsConstructor
@Data
public class PersonDTO {
private Long id;
private String name;
/**
* 对应 Person.user.age
*/
private Integer age;
private String email;
/**
* 与 DO 里面的字段名称(birthDay)不一致
*/
private Date birth;
/**
* 对 DO 里面的字段(birthDay)进行拓展,dateFormat 的形式
*/
private String birthDateFormat;
/**
* 对 DO 里面的字段(birthDay)进行拓展,expression 的形式
*/
private String birthExpressionFormat;
}</code></pre>
<p>写一个 Mapper 接口 PersonConverter,其中两个方法,一个是单实体映射,另一个是List映射</p>
<p>若源对象属性与目标对象属性名字一致,会自动映射对应属性,不一样的需要指定,也可以用 format 转成自己想要的类型,也支持表达式的方式,可以看到像 id、name、email这些名词一致的我并没有指定 source-target,而birthday-birth指定了,转换格式的 birthDateFormat 加了dateFormat 或者 birthExpressionFormat 加了 expression,如果某个属性你不想映射,可以加个 ignore=true</p>
<pre><code class="java">@Mapper
public interface PersonConverter {
PersonConverter INSTANCE = Mappers.getMapper(PersonConverter.class);
@Mappings({
@Mapping(source = "birthday", target = "birth"),
@Mapping(source = "birthday", target = "birthDateFormat", dateFormat = "yyyy-MM-dd HH:mm:ss"),
@Mapping(target = "birthExpressionFormat", expression = "java(org.apache.commons.lang3.time.DateFormatUtils.format(person.getBirthday(),\"yyyy-MM-dd HH:mm:ss\"))"),
@Mapping(source = "user.age", target = "age"),
@Mapping(target = "email", ignore = true)
})
PersonDTO domain2dto(Person person);
List<PersonDTO> domain2dto(List<Person> people);
}</code></pre>
<p>编译MapStruct之后,手工编译或者启动 IDE 的时候 IDE 也会帮我们编译, 会自动在 target/classes 下生成对应的实现类</p>
<pre><code class="bash">手工编译命令
mvn compile</code></pre>
<p>注意!!!下面这个 PersonConverterImpl 是自动生成的,不是自己写的!</p>
<pre><code class="java">public class PersonConverterImpl implements PersonConverter {
public PersonConverterImpl() {
}
public PersonDTO domain2dto(Person person) {
if (person == null) {
return null;
} else {
PersonDTO personDTO = new PersonDTO();
personDTO.setBirth(person.getBirthday());
if (person.getBirthday() != null) {
personDTO.setBirthDateFormat((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(person.getBirthday()));
}
Integer age = this.personUserAge(person);
if (age != null) {
personDTO.setAge(age);
}
personDTO.setId(person.getId());
personDTO.setName(person.getName());
personDTO.setBirthExpressionFormat(DateFormatUtils.format(person.getBirthday(), "yyyy-MM-dd HH:mm:ss"));
return personDTO;
}
}
public List<PersonDTO> domain2dto(List<Person> people) {
if (people == null) {
return null;
} else {
List<PersonDTO> list = new ArrayList(people.size());
Iterator var3 = people.iterator();
while(var3.hasNext()) {
Person person = (Person)var3.next();
list.add(this.domain2dto(person));
}
return list;
}
}
private Integer personUserAge(Person person) {
if (person == null) {
return null;
} else {
User user = person.getUser();
if (user == null) {
return null;
} else {
Integer age = user.getAge();
return age == null ? null : age;
}
}
}
}</code></pre>
<p>写一个单元测试类 PersonConverterTest 测试一下,看看效果</p>
<pre><code class="java">public class PersonConverterTest {
@Test
public void test() {
Person person = new Person(1L,"zhige","zhige.me@gmail.com",new Date(),new User(1));
PersonDTO personDTO = PersonConverter.INSTANCE.domain2dto(person);
assertNotNull(personDTO);
assertEquals(personDTO.getId(), person.getId());
assertEquals(personDTO.getName(), person.getName());
assertEquals(personDTO.getBirth(), person.getBirthday());
String format = DateFormatUtils.format(personDTO.getBirth(), "yyyy-MM-dd HH:mm:ss");
assertEquals(personDTO.getBirthDateFormat(),format);
assertEquals(personDTO.getBirthExpressionFormat(),format);
List<Person> people = new ArrayList<>();
people.add(person);
List<PersonDTO> personDTOs = PersonConverter.INSTANCE.domain2dto(people);
assertNotNull(personDTOs);
}
}</code></pre>
<h4>多对一</h4>
<p>MapStruct 可以将几种类型的对象映射为另外一种类型,比如将多个 DO 对象转换为 DTO</p>
<p>例子</p>
<ul><li>两个 DO 对象 Item 和 Sku,一个 DTO 对象 SkuDTO</li></ul>
<pre><code class="java">@NoArgsConstructor
@AllArgsConstructor
@Data
public class Item {
private Long id;
private String title;
}
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Sku {
private Long id;
private String code;
private Integer price;
}
@NoArgsConstructor
@AllArgsConstructor
@Data
public class SkuDTO {
private Long skuId;
private String skuCode;
private Integer skuPrice;
private Long itemId;
private String itemName;
}</code></pre>
<ul><li>创建 ItemConverter(映射)接口,MapStruct 就会自动实现该接口</li></ul>
<pre><code class="java">@Mapper
public interface ItemConverter {
ItemConverter INSTANCE = Mappers.getMapper(ItemConverter.class);
@Mappings({
@Mapping(source = "sku.id",target = "skuId"),
@Mapping(source = "sku.code",target = "skuCode"),
@Mapping(source = "sku.price",target = "skuPrice"),
@Mapping(source = "item.id",target = "itemId"),
@Mapping(source = "item.title",target = "itemName")
})
SkuDTO domain2dto(Item item, Sku sku);
}</code></pre>
<ul><li>创建测试类,讲 Item 和 Sku 两个 DO对象,映射成一个 DTO 对象 SkuDTO</li></ul>
<pre><code class="java">public class ItemConverterTest {
@Test
public void test() {
Item item = new Item(1L, "iPhone X");
Sku sku = new Sku(2L, "phone12345", 1000000);
SkuDTO skuDTO = ItemConverter.INSTANCE.domain2dto(item, sku);
assertNotNull(skuDTO);
assertEquals(skuDTO.getSkuId(),sku.getId());
assertEquals(skuDTO.getSkuCode(),sku.getCode());
assertEquals(skuDTO.getSkuPrice(),sku.getPrice());
assertEquals(skuDTO.getItemId(),item.getId());
assertEquals(skuDTO.getItemName(),item.getTitle());
}
}</code></pre>
<h4>可以添加自定义方法</h4>
<pre><code class="java">// 形式如下
default PersonDTO personToPersonDTO(Person person) {
//hand-written mapping logic
}
// 比如在 PersonConverter 里面加入如下
default Boolean convert2Bool(Integer value) {
if (value == null || value < 1) {
return Boolean.FALSE;
} else {
return Boolean.TRUE;
}
}
default Integer convert2Int(Boolean value) {
if (value == null) {
return null;
}
if (Boolean.TRUE.equals(value)) {
return 1;
}
return 0;
}
// 测试类 PersonConverterTest 加入
assertTrue(PersonConverter.INSTANCE.convert2Bool(1));
assertEquals((int)PersonConverter.INSTANCE.convert2Int(true),1);</code></pre>
<p>#### 如果已经有了接收对象,更新目标对象</p>
<pre><code class="java">// 比如在 PersonConverter 里面加入如下,@InheritConfiguration 用于继承刚才的配置
@InheritConfiguration(name = "domain2dto")
void update(Person person, @MappingTarget PersonDTO personDTO);
// 测试类 PersonConverterTest 加入如下
Person person = new Person(1L,"zhige","zhige.me@gmail.com",new Date(),new User(1));
PersonDTO personDTO = PersonConverter.INSTANCE.domain2dto(person);
assertEquals("zhige", personDTO.getName());
person.setName("xiaozhi");
PersonConverter.INSTANCE.update(person, personDTO);
assertEquals("xiaozhi", personDTO.getName());</code></pre>
<h4>Spring 注入的方式</h4>
<pre><code class="java">// 刚才一直写的例子是默认的方式
PersonConverter INSTANCE = Mappers.getMapper(PersonConverter.class);</code></pre>
<p>还有一种常用的方式,是和常用的框架 Spring 结合,在 @Mapper 后面加入 <code>componentModel="spring"</code></p>
<pre><code class="java">@Mapper(componentModel="spring")
public interface PersonConverter {
@Mappings({
@Mapping(source = "birthday", target = "birth"),
@Mapping(source = "birthday", target = "birthDateFormat", dateFormat = "yyyy-MM-dd HH:mm:ss"),
@Mapping(target = "birthExpressionFormat", expression = "java(org.apache.commons.lang3.time.DateFormatUtils.format(person.getBirthday(),\"yyyy-MM-dd HH:mm:ss\"))"),
@Mapping(source = "user.age", target = "age"),
@Mapping(target = "email", ignore = true)
})
PersonDTO domain2dto(Person person);
}</code></pre>
<p>这时候测试类改一下,我用的 spring boot 的形式</p>
<pre><code class="java">@RunWith(SpringRunner.class)
@SpringBootTest(classes = BaseTestConfiguration.class)
public class PersonConverterTest {
//这里把转换器装配进来
@Autowired
private PersonConverter personConverter;
@Test
public void test() {
Person person = new Person(1L,"zhige","zhige.me@gmail.com",new Date(),new User(1));
PersonDTO personDTO = personConverter.domain2dto(person);
assertNotNull(personDTO);
assertEquals(personDTO.getId(), person.getId());
assertEquals(personDTO.getName(), person.getName());
assertEquals(personDTO.getBirth(), person.getBirthday());
String format = DateFormatUtils.format(personDTO.getBirth(), "yyyy-MM-dd HH:mm:ss");
assertEquals(personDTO.getBirthDateFormat(),format);
assertEquals(personDTO.getBirthExpressionFormat(),format);
}
}</code></pre>
<p>我 test 路径下加入了一个配置类</p>
<pre><code class="java">@EnableAutoConfiguration
@Configuration
@ComponentScan
public class BaseTestConfiguration {
}</code></pre>
<h4>MapStruct 注解的关键词</h4>
<pre><code>@Mapper 只有在接口加上这个注解, MapStruct 才会去实现该接口
@Mapper 里有个 componentModel 属性,主要是指定实现类的类型,一般用到两个
default:默认,可以通过 Mappers.getMapper(Class) 方式获取实例对象
spring:在接口的实现类上自动添加注解 @Component,可通过 @Autowired 方式注入
@Mapping:属性映射,若源对象属性与目标对象名字一致,会自动映射对应属性
source:源属性
target:目标属性
dateFormat:String 到 Date 日期之间相互转换,通过 SimpleDateFormat,该值为 SimpleDateFormat 的日期格式
ignore: 忽略这个字段
@Mappings:配置多个@Mapping
@MappingTarget 用于更新已有对象
@InheritConfiguration 用于继承配置</code></pre>
<p>本文只是写了一些常用的比较简单的一些功能,更详细的可以去阅读官方文档: <a href="https://link.segmentfault.com/?enc=2IEHFSKJno8E6KmvFNtgBQ%3D%3D.0D4Gzxvq1BlrBjhnEeSuf26wEAbQtbSHjYj8LO9vN%2Bri1KTCKnxPjhZ4TAtJ%2FtPkWe0bQuphHTdTWfTvGmD6VQ%3D%3D" rel="nofollow">http://mapstruct.org/document...</a></p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!<br><img src="/img/remote/1460000015315799" alt="微信公众号:志哥 (ID: zhige-me)" title="微信公众号:志哥 (ID: zhige-me)"></p>
如何成为有效学习的高手(许岑)——思维导图
https://segmentfault.com/a/1190000015256244
2018-06-12T08:00:00+08:00
2018-06-12T08:00:00+08:00
志哥
https://segmentfault.com/u/zhige_me
1
<p><img src="/img/remote/1460000015256247" alt="如何成为有效学习的高手.png" title="如何成为有效学习的高手.png"></p>
<p>总结自许岑精品课《如何成为有效学习的高手》,图片看不清的可以看下面。</p>
<p>最后有彩蛋!<br>最后有彩蛋!<br>最后有彩蛋!</p>
<ul>
<li>
<p>定义</p>
<ul>
<li>高效学习的定义:找到最适合自己的学习手法,在相对短的时间内集中注意力,以解决一个工作生活当中的难题为目的着手学习,你需要勤加练习,有时候还需要向名师求助</li>
<li>7个关键词:1、适合自己 2、学习手法 3、短时间 4、注意力 5、解决难题 6、设定目标 7、名师。</li>
</ul>
</li>
<li>
<p>1.找到适合你的学习方法</p>
<ul>
<li>
<p>基于模仿的自然主义</p>
<ul>
<li>模仿,注重文本本身,照着表面的样子,遇到什么学什么,积少成多,以量取胜,重复。</li>
<li>比如:语言、书法、乐器。</li>
</ul>
</li>
<li>
<p>为了创造的结构主义</p>
<ul>
<li>创造,侧重对结构和交互关系的认识,体系化,学习本质,举一反三。</li>
<li>比如:医药学、艺术、经济学。</li>
</ul>
</li>
<li>
<p>练习不必顾全大局</p>
<ul>
<li>避免无效学习提高学习速度和效率</li>
<li>更好的学习方法提高学习速度和效率,目标拆碎。</li>
<li>比如:不要一次练完整首曲子,一次只练曲子当中的一句</li>
</ul>
</li>
<li>
<p>碎片化学习的真相</p>
<ul>
<li>基于搜索,带着困惑和问题去搜</li>
<li>把碎片链接起来。</li>
<li>收藏是假的碎片化学习方式,收藏不看,记笔记不看,买书为乐</li>
</ul>
</li>
</ul>
</li>
<li>
<p>2.不谈兴趣,用任务驱动学习</p>
<ul>
<li>
<p>成年人不需要培养兴趣</p>
<ul>
<li>做事驱动有两种:内部:兴趣、虚荣心。外部:回报、利益。</li>
<li>成年人不谈兴趣,只谈任务,没有任务,制造任务</li>
</ul>
</li>
<li>
<p>生活中的任务驱动</p>
<ul><li>英国学炒菜</li></ul>
</li>
<li>
<p>工作中的职业强迫</p>
<ul>
<li>给罗永浩做幻灯片</li>
<li>一般摄影爱好者不如报社工作的图片新闻记者</li>
<li>没有工作,给自己打工,比如写代码,可以试着完成一个网站或者一个APP</li>
</ul>
</li>
<li>
<p>以教为学</p>
<ul><li>出教程</li></ul>
</li>
</ul>
</li>
<li>
<p>3.拖延症的「确诊与治疗」</p>
<ul>
<li>
<p>拖延症的表现与本质</p>
<ul>
<li>注意力缺陷多动障碍,注意力无法集中</li>
<li>任何人都有拖延症,有些事拖延,有些事不拖延</li>
<li>为什么拖延?拖延了,也对自己影响不大</li>
</ul>
</li>
<li>
<p>将任务「严峻化」</p>
<ul>
<li>任务、任务、任务,重要的事情说三遍。</li>
<li>严峻的任务不会拖延,如果拖延,损失几十万</li>
<li>没有工作,可以让自己更好,向认识你的人交代。比如健身</li>
</ul>
</li>
<li>
<p>设定小目标,形成惯性</p>
<ul>
<li>设定小目标来突破。俯卧撑或仰卧起坐,每天比前一天多一个</li>
<li>找到感觉能掌握的。游泳,会换气就会游泳,骑车,会平衡就会骑车</li>
<li>量变引起质变的。读书,从精读到速读</li>
</ul>
</li>
</ul>
</li>
<li>
<p>4.在衣食住行上训练专注力</p>
<ul>
<li>专注力是提升效率的重要因素,平时的生活中制造仪式感,去提升专注力</li>
<li>
<p>购买昂贵的学习工具</p>
<ul>
<li>买稍微让自己心疼的工具</li>
<li>便宜东西本来就不是靠专注力制造出来的,通过贵的感知专注力,进而形成锻炼</li>
<li>贵一点,少一点,东西越多越不专注</li>
</ul>
</li>
<li>
<p>学会一个人好好吃饭</p>
<ul><li>吃好的,少吃速食,少点外卖,少吃自助餐</li></ul>
</li>
<li>
<p>使用射灯</p>
<ul><li>范围小,注意力集中</li></ul>
</li>
<li>
<p>进入高质量的睡眠</p>
<ul><li>睡眠足够,锻炼是前提</li></ul>
</li>
</ul>
</li>
<li>
<p>5.直奔大师,不必从基础开始</p>
<ul>
<li>
<p>设定有效目标</p>
<ul><li>目标明确,找准切入点</li></ul>
</li>
<li>
<p>直奔大师</p>
<ul><li>以终为始,要去到哪里,就从哪里开始。</li></ul>
</li>
</ul>
</li>
<li>
<p>6.给自己制造反馈</p>
<ul>
<li>
<p>反馈的重要性</p>
<ul><li>听明白看明白并不是真明白,能给别人讲明白才是真会了</li></ul>
</li>
<li>
<p>写摘要的两条规则</p>
<ul>
<li>要对着文本写,而不是脱稿写。找到文本中的重要事实、陈述和一些观点</li>
<li>用自己的语言写,不是抄写</li>
</ul>
</li>
<li>
<p>制造文字类反馈</p>
<ul><li>写作。看书就忘,因为没有反馈,写摘要制造反馈</li></ul>
</li>
<li>
<p>制造语音类反馈</p>
<ul><li>录音。英语语音练习</li></ul>
</li>
<li>
<p>制造肢体类反馈</p>
<ul><li>录像。高尔夫球击球动作</li></ul>
</li>
</ul>
</li>
<li>
<p>7.怎样突破学习瓶颈</p>
<ul>
<li>有瓶颈的时候要自信,因为只有水平到了一定程度才会有瓶颈,重要的是调整心态</li>
<li>
<p>解决心态问题</p>
<ul>
<li>不要过于分心,专注于具体的事情</li>
<li>比如打游戏,只关注具体的一局,不关注总分</li>
</ul>
</li>
<li>
<p>扩大涉猎范围</p>
<ul>
<li>不断积累</li>
<li>比如学习乐器,重要的是动听,就要多听很多人的演奏</li>
</ul>
</li>
<li>
<p>更加专注,请教名师</p>
<ul><li>需要更加专注,注意力集中在狭窄的范围内</li></ul>
</li>
</ul>
</li>
</ul>
<p>哈哈哈,下面是我写的摘要,这就是彩蛋</p>
<p><a href="https://link.segmentfault.com/?enc=jl2C0tjoBkJRQgAZsH5CRw%3D%3D.L%2FTsBOqzvvq7BXU4qv%2FYyPQyFWJQ2qXV%2BnVNvqwKsd%2FPZIiovyvBXLpCnkjfSxyv1zccSV3RDu4BIB1j5X863kzql0jJ61ZWJ8zq3XNy%2FuhVmebF7%2BNV7xWAdRejZHTVQ1bdV8jGkYFqcbJFiAaETELUzLk4431OVeZvYPoJpXsUGm9cyHtV3DIEzlwC6zP3hLJBJ%2FKuA98Yw6UJt16NxaH6jJLUcHflTwJ4B920AKHkC0m6L2eBhoFxcxT3QEmjcINpN5u27aAdizNYJtNmfVBYK%2Bjb1oYruFFTc5e9O74%3D" rel="nofollow">原来,你的学习方法一直都是错的</a><br><a href="https://link.segmentfault.com/?enc=VWTJm3KvTWh%2BwRU%2Fbl9GDQ%3D%3D.3y5n7X14Lxy46YrJQ7Y3AKHbKsbW644GbZatsAycicKXvS3MU20AOjGQZbgeEjlDbQ2J9hH6ra2YJ4mgyl9WByOrtlr2qu2k8E8j5XWJsKWXdAG91SXCUYZqJGAKdAwJhEY%2BGNVfCTFtHeuISFhPigQgwAKIk%2Fn6oGe%2B7hm4DL8Wxy%2BMfgVVz2LWxQig4VN90Gzq9Ovwx3gl7gQCEQqPyuxbpmWZbx2C08ppY42GgJGYewe9NMU3dcihCUVeBVEqJThtXlGiIJjvBXwB%2FSUpz9ulm05%2FYpjEFUnV246Tc5A%3D" rel="nofollow">碎片化学习不是学习碎片,看这篇了解碎片化学习的真相</a><br><a href="https://link.segmentfault.com/?enc=S8gXVAKA9rNPO6BRc6feGA%3D%3D.JC%2FnhsinjY1cj6k2y%2Fxdg%2FalmZBJNPtoYN7%2BRyfDxTbjwkoXCOD1tUgPlc5PvMEFxy3xNLSQlhDZ9ZJ5j1FZ1rU5QbJhmeeHgKiKLd%2BaIaEk%2FRnUyFl1ypT%2BszNjSLBPSarQ8MdXqgjqXtl9YJFtXlc8V%2BSmMjpBE8pa%2BcPJFwRyQjD3I6rdG50%2BoU%2FjlV4bvR89h1oNcuEEUuk5MFByvl%2FZ9n7IYKXY7T6%2FmTLzCCw5j5SxiBnmoNAkJBqvnBiTzVYb%2B%2Fg0JpG98P6vpxf0S8bu%2BpgB11VEeV1T1Gp52TI%3D" rel="nofollow">不要再谈没兴趣了,那只是你不学习的借口罢了</a><br><a href="https://link.segmentfault.com/?enc=E%2B1QmpnijraV7cPKuBNmyw%3D%3D.b9U0xuZCVD9J%2FKjDM4NI%2BQouu5pV0eqx4v92yx23f4FQ0gtELGqOoFbuQdrhZDM67jbU5DSEjR74V8zLlCwZ9B%2Btv3pq0M742ULoZ8WudE7YfX1qPWK1Q9kodj4%2FcheANepvjhuR2wRWnogE4Lf2qroeSfSngPpu2rQw4V%2B9GJucehToIFjedshLQHCOLz06%2FAspchi3QCTljnqPYIDm8RrbtDEWu9JlMOhN1biDXLqIPUTqPtHNsLFZqh%2Fw%2B5R0eoXhxRgRkhqLRyBF9G0dCmJLZnHsFWVcBbYN8TD84Ro%3D" rel="nofollow">如何有效治疗拖延症</a><br><a href="https://link.segmentfault.com/?enc=8xRHmwutZoz5MNrLhmWcFA%3D%3D.fK1B0RsirGm4Y6WzR6ZJynHl5H3ppmUhIyEj3BgJwrIUDydew41mYzC%2FuRHI5HOZyPhRBnJLHH5meIraHbiwVj4NzC4pFjV%2B1NpHV4rsXvqxxosSEWZQkDVwBPg8YA2A3G%2BWUKLthOFWx%2B%2FEgLhWcFRVjTeSmiH9TgbMxQ4COy%2F%2FDAkaeegg1ocwlc8JzWFi4thsDIbGcpHwYrrq6pVzAKX5JJCJX3Plk70mwTPgCgWpnqk0ac5OPz3CQwqcDljaO1hR0Y3uhM73Cmvwp2fA0QCBPE2ZI8UEhzS88oVIUsM%3D" rel="nofollow">在衣食住行上训练专注力</a><br><a href="https://link.segmentfault.com/?enc=7He2io7SMW%2FftiWTrLrWyw%3D%3D.MsyHxq2F3d%2BQ3Us82Pk%2BcX2qBH2bTkdDWTgtANAWit1fb6VEsiNUtg9FP8%2B2txM2jPqafRGX7jlHGG2AyF1O%2Fw2TYFJTcqXCUpeyPtP%2BegmVkosTAFzBg1d6A4Gt6gnFAmG89yvJzjQgkkxdP87QmBlXK6NQVx9shJbc4b7L9vAbeQ7BFa%2BDCEe7XWzibgty5pJewVN7zK8d%2F5ubvU%2BNcjjhUHguesMDq5XZfKjBmUs0cFVtpqSUfm2cP6Waz7ps4h4BdXhkbt6LityW0i6vtvSlq6ZaPo6Oz86OH%2B9yFtk%3D" rel="nofollow">直奔大师,不必从基础开始</a><br><a href="https://link.segmentfault.com/?enc=3EhzjYtTmwPFPsHijszAYA%3D%3D.ivqKS2rlCVFtMgJa%2BbxuNVF8rN1EfM0FLMgjk3YJ45scGaTM9O0mxq5ue470zQ1ZHZ3lm0rVdeNSEW7%2FsyQuTBF0P%2BvW%2BLKkM7%2Bsbq2hUl6T6Lco5g7SRi%2BYhFJ2%2F324zKfiEFb00O4B4FQwmfn3d3SuvNPjbD0D%2FDvUH2XpK6Ebv2ShkXqczHWuNPCjV6Vmuq%2BOonJkll78OAO8DMhvNUQadcHdDWR10pu3spxaTkH6M%2Bj26weevVMFAkmboyqslAkXuNbkGAK1l5rvk72G1uvreB0hLCBKyRHCrQGWWww%3D" rel="nofollow">如何给自己制造反馈?</a><br><a href="https://link.segmentfault.com/?enc=fXQNUfeFtUQKzAgBr1fcuA%3D%3D.0iWT6GeH9%2FZTdrVET%2FYlJ78r39GIZLBEV937INeRlcHjWg%2FIAOD0VEv%2BkB031Yh%2F0iPSwJoNg5rX8evRDTdp8UJ5BO3EMGwX5q4Xqesf9Uteg21ia3lYnSstz0IcVbul6Q%2BhAkp%2BksWvqZJ5nb5QUWjna3aOSGSigLlHJB4km57%2Ft3zLDkgLd2RU2GPrFrRuOqkNYSuFmgHdKXz%2F5l6ZKuny%2BcIWGLxJqdw%2FWhJdc8jBbXmhfUYl8nGFmHGt48wJ42Rb%2BniVkznFz2jcHMgjhpb4EXI0g%2BT8x%2FPo58h%2Bvww%3D" rel="nofollow">如何突破学习的瓶颈?</a></p>
<p>希望始终不要忘了贯穿整个课程的一段话</p>
<blockquote>高效学习的定义:找到最适合自己的学习手法,在相对短的时间内集中注意力,以解决一个工作生活当中的难题为目的着手学习,你需要勤加练习,有时候还需要向名师求助。——许岑</blockquote>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!</p>
如何突破学习的瓶颈?
https://segmentfault.com/a/1190000015243301
2018-06-11T08:00:00+08:00
2018-06-11T08:00:00+08:00
志哥
https://segmentfault.com/u/zhige_me
1
<blockquote>高效学习的定义:找到最适合自己的学习手法,在相对短的时间内集中注意力,以解决一个工作生活当中的难题为目的着手学习,你需要勤加练习,有时候还需要向名师求助。——许岑</blockquote>
<p>我们在学习的过程中总会遇到瓶颈,一般表现是,不知道该学习什么,好像什么都想学一点,又好像什么都不精通,自己也很努力啊,就是没有什么提高,内心很焦虑,甚至会沮丧。意志力比较好的人,可能会继续坚持下去,坚信总有一天会过去,大部分的人可能会丧失信心,选择放弃,或者转而去学习其他的东西。</p>
<p>那怎么办才能更好突破学习的瓶颈呢?首先我要给你明确的是,当你遇到瓶颈的时候,说明你已经有了一定的实力,有些人并不如你,因为只有当你掌握了一定的知识的时候才会遇到瓶颈,啥也不会不叫瓶颈,当然也有可能是别人已经走过去了,你没有走过去,无论是前者还是后者,一般都是因为自己不自信导致的,这个时候首先需要调整的应该是心态。</p>
<p>如何才能调整好心态呢?可以去做些自己擅长的事情,哪怕是打游戏,许岑老师就举了他打游戏的例子提高自信心。如果你觉得自己没有什么擅长的也不要紧,你可以听点音乐、运动一下、看一本书、或者找人倾诉一下。</p>
<p>还有一个遇到瓶颈的原因可能是你的涉猎不够广,曾经带我的昌老师之前有一次告诉我了一句,说有时候你纠结的那个问题,站在更高的维度,可能就是一个字段就能解决了,当然这个说的技术相关的,不是技术人员可能找到其他的类似的例子,比如许岑老师的例子,吉他演奏,这个比的不是谁的分数高,而是谁的更好听,练的很熟练了,但是不动听,也是不够的,这时候需要扩大涉猎范围,多听各种名家演奏,提高自己的审美。</p>
<p>如果你也调整了心态,也很自信了,也练了很多了,也扩大的涉猎范围,但是还是有瓶颈,可能是因为你的专注度不够,你需要把注意力集中在极小的范围之内,死磕某一个点,以做到不分心。这个过程中有的时候也可以去请教你的老师,或者更有经验的人,说不定他们的一句话就能点醒你了。</p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!</p>
如何给自己制造反馈?
https://segmentfault.com/a/1190000015238337
2018-06-10T08:00:00+08:00
2018-06-10T08:00:00+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<blockquote>高效学习的定义:找到最适合自己的学习手法,在相对短的时间内集中注意力,以解决一个工作生活当中的难题为目的着手学习,你需要勤加练习,有时候还需要向名师求助。——许岑</blockquote>
<p>不知道大家有没有看过一本书《刻意练习》,这本书里经常提到一个词:反馈,要想高效学习,一定要及时的反馈,可见反馈的重要性。</p>
<p>我记得当时上中学的时候,去问数学老师问题,等他讲完了,问我听懂了吗,我说听懂了,然后他来了一句,那你给我讲一遍吧,这时候我傻眼了,我觉得我听懂了,其实我是讲不出来的,回去再让我做这道题,我估计还是做不出来,其实听明白看明白并不是真明白,能给别人讲明白才是真会了,从那以后我就经常给别人讲题。</p>
<p>很多人不知道如何制造反馈,下来来说说几种制造反馈的方式。</p>
<h4>制造文字类反馈</h4>
<p>肯定有很多人像我一样,平时会看一些书,但是当别人问我这个书里讲了什么的时候,我是不记得书里的内容的,这就是缺少反馈的表现,只是看了,并没有消化。所以以后要及时制造反馈,输出一些东西,才能加深理解。写摘要就是一个不错的方法,以后看完书,文章,都要写一个摘要出来。</p>
<p>下面说说写摘要的两个重要规则</p>
<p>1、要照着文本写,而不是脱稿写。如果是脱稿写,记住什么写什么,这只能叫做默写或者复述,这对人的理解能力提升是不大的,只是考察记忆力。对着文本写,重要的是找到文本中的重要事实、陈述和一些观点。</p>
<p>2、要用自己的语言来写,虽然是对着文本写,但不是抄写,把文本中的重要事实、陈述和一些观点用自己的语言写出来。有人说了,那我没人家说的精彩啊,人家说的再精彩那也是人家说的,要用自己的话去解释,这才叫理解了。</p>
<h4>制造语音类反馈</h4>
<p>有时候我们也会遇到经常犯错误的地方,这时候是最需要反馈的时候,要不然你就会一直陷在那个错误之中。比如英语的语音就是,我们觉得自己说的挺标准的,其实你录下来就知道了,那是相当的不准,这时候就需要录音来帮助我们反馈。类似的还有唱歌,上学的时候我经常在宿舍唱歌,觉得自己唱的挺好的,一点都没跑过调,完美动听,就是同学经常说,求求你了,别唱了。我就纳闷了,这时候我就把自己唱的歌录下来听听,发现,跟原唱差别太大了。</p>
<h4>制造肢体类反馈</h4>
<p>还有一种是以录像的方式制造肢体类反馈,比如弹吉他的时候的手势,有时候自己是意识不到的,录下来才能看到弹吉他时候的种种问题。还有许岑老师举了他打高尔夫球的例子,刚开始老达不到球,就录下他的击球动作,用慢动作去看,最后才知道打高尔夫球的标准动作是,先把腿弯曲,击球的时候腿才能蹬直。他为了发力,击球之前腿就发力了,腿就蹬直了,这个我没有经验,没打过高尔夫球,有兴趣的可以看一下是不是这样的。</p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!</p>
直奔大师,不必从基础开始
https://segmentfault.com/a/1190000015232875
2018-06-09T20:00:00+08:00
2018-06-09T20:00:00+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<blockquote>高效学习的定义:找到最适合自己的学习手法,在相对短的时间内集中注意力,以解决一个工作生活当中的难题为目的着手学习,你需要勤加练习,有时候还需要向名师求助。——许岑</blockquote>
<p>我们每次学习一个课程的时候都是从基础开始,其实这是没有必要的,枯燥的学习过程并且没有多大的效果,更会打击我们的信心。这节就是讲讲以终为始,直奔大师,不必从基础开始。当然基础是很重要的,但是要搞清楚顺序,不是一开始就去学习基础,而是先上手,再去学基础。</p>
<p>一个人要学习某样东西肯定要先明确一个目标,但是很多人都是目标不明确,比如英语,大部分人都觉得自己需要学英语,这本身就是个幻觉,你没事儿学英语干嘛呢?平时用的着吗?排除这个幻觉,当你问他为什么要学英语的时候,回答也是各式各样,总之就是目标不明确。有人觉得虽然今天我用不到,但是说不定哪天我就用到了,有人说我想有一天冲出亚洲,走向世界,应该会点英语比较好吧?还有人根本没有理由的,觉得别人都学,自己不学岂不是落后于别人了,焦虑感带来的想学习的冲动,其实这些都是不切实际的理由,一般这样说的人都是很难坚持下去的。</p>
<p>比较明确的学英语的目标是什么呢?比如我一个朋友说,现在工作中文档全是英文的,她要学习下英文,不然看不懂,做事儿效率就会很低,还有许岑老师举的一个例子,一个母亲的儿子上国际学校,自己到那学校之后跟个傻子似的,没法跟那里的外国老师交流,作为家长,为孩子的事情那是很操心的。</p>
<p>找到了明确的目标之后,要从什么地方开始学呢?比如那个母亲就说,我们从《新概念》开始学吗,被许岑老师否定了,因为这个不是准确的切入点。许岑老师给那个母亲定制了一套学习方法,让她去儿子那个学校去拿一堆英文资料,宣传册子啥的,还有带她去浏览学校的英文网站,把出现的句子记下来,这就是有效的切入点。</p>
<p>从上面可以看出,有了目标,如何找到精准的切入点呢?建议是直奔大师,不必从基础开始。大师不一定是指具体的人,而是你的最终目标。要去哪里,就要从哪里开始。</p>
<p>比如许岑老师学吉他,花了三个月时间弹了一首自己非常喜欢的曲子。他为什么能在这么短的时间内就能学会呢?一方面是他的吉他贵啊,之前说过的,不弹心疼啊,另一方面,他太喜欢这首曲子了,每一个音符都是那么美妙,如果能弹出来该是多么美好啊。还有一条重要的原因,他的老师在他一点基础都没有的情况下,上来就让他直接弹这个,如果他从基础开始做起,那说不定两三个月枯燥乏味的早就不想学了。</p>
<p>等到这首弹会了之后,他的老师问他想不想花两年把世界上最难的吉他曲学会,他说想啊,这时候他的老师就给他说,先练半年基本功。</p>
<p>你看,好老师多么重要,不是说不注重基础,而是很多人把基础和上手搞反了,都去先学了基础,而很多人在这个过程中感觉无趣放弃了。当然这条只适合需要模仿的这种类型的学习,如果是需要创造的那种类型,还是要从基础搞起的。</p>
<p>如果觉得内容还不错,可以关注一下我哦<br>微信公众号:志哥 (ID: zhige-me)<br>期待与你相遇,一同成长前行!</p>
在衣食住行上训练专注力
https://segmentfault.com/a/1190000015232442
2018-06-08T22:43:40+08:00
2018-06-08T22:43:40+08:00
志哥
https://segmentfault.com/u/zhige_me
1
<blockquote>高效学习的定义:找到最适合自己的学习手法,在相对短的时间内集中注意力,以解决一个工作生活当中的难题为目的着手学习,你需要勤加练习,有时候还需要向名师求助。——许岑</blockquote>
<p>专注力是提升效率的重要因素,比如许岑老师每半年就能学会一项技能,而大部分人做不到,就是因为我们的专注程度跟他不是一个级别的。怎么不一样呢?他坐在那里表面上看似在发呆,其实是在想这个问题,他的注意力是在这个东西上面的,比如他做幻灯片的时候,人家去看电影是娱乐,他看电影是为了学习,电影的构图、镜头、动画效果这些在他的脑子里变成了一页页的幻灯片,所以说他做的幻灯片是电影级别的幻灯片。</p>
<p>接下来我们就说说怎么有效训练自己的专注力,其实平时的生活本身并不能训练我们的专注力,但是要在生活中制造仪式感,这样就会提升我们的注意力。</p>
<p>下面是提到的几种方式</p>
<h4>购买昂贵的学习工具</h4>
<p>如果学这样东西的时候需要工具的话,买贵的。比如乐器、电脑、练字的宣纸,要稍微让自己心疼,才能达到效果,比如吉他买贵的,少弹一会儿都心疼啊,几百块钱买一把,可能练两天就扔了,宣纸买贵的,每一笔都是钱啊,下去的每一笔都要郑重其事的。便宜东西本来就不是靠专注力制造出来的,通过贵的东西感知专注力,进而形成锻炼。买贵一点,相对你的东西就少一点了,东西越多越不专注,当然这条不适合富二代啊,怎么都不心疼那就达不到训练的目的了。</p>
<h4>学会一个人好好吃饭</h4>
<p>对自己好点,少吃速餐,少点外卖。吃东西要有仪式感,最好能够做一顿饭给自己吃。让自己的身体变好,一个人连自己的身体走样都认识不到严峻,一个人连吃饭都不能专注,怎么可能在其他的事儿上也能保持专注呢?</p>
<h4>使用射灯</h4>
<p>工作和学习中使用射灯,光速聚集在小范围,其他地方都是暗的,就这一小块是亮的,有种舞台的感觉,让自己感觉是在舞台的中央,这是比较有仪式感的事情。</p>
<h4>进入高质量的睡眠</h4>
<p>睡眠是影响一个人专注力的重要因素,一定要休息好,困了就要睡,硬撑着做事儿效率不会高的。有些人说睡不好,怎么才能休息好呢,要多锻炼,当你累坏了的时候才能进入高质量的睡眠。</p>
<p>如果觉得内容还不错,可以关注一下我哦<br>微信公众号:志哥 (ID: zhige-me)<br>期待与你相遇,一同成长前行!</p>
如何有效治疗拖延症
https://segmentfault.com/a/1190000015207039
2018-06-07T08:07:00+08:00
2018-06-07T08:07:00+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<blockquote>高效学习的定义:找到最适合自己的学习手法,在相对短的时间内集中注意力,以解决一个工作生活当中的难题为目的着手学习,你需要勤加练习,有时候还需要向名师求助。——许岑</blockquote>
<p>我想几乎所有的大学写论文的同学都有这种想法,恩,还有三个月呢,我准备分三个阶段,第一个月先写一点点(开头轻松一点点),第二个月加重一点(中期任务逐渐增加),最后一个月冲刺一下(最后全力冲刺),整体是这种阶梯性的安排,多么完美,一层一层走楼梯有这么难吗,不就是论文吗,有什么大不了的,so easy。后来搞笑的事情出现了,前面两个多月时光匆匆飞逝,快的以至于我都没来得及动工,最后一个星期通宵加班,刚好在上交的前一刻完成。</p>
<p>平时工作生活中你可能也有跟我类似的体验,当我写代码的过程中,突然喝了一口茶,这茶是同事刚给的,忍不住去谷歌了一下这个茶的信息,然后发现了某个山某个湖某个城市,于是忍不住又看了离这个城市多远,有什么好玩的,然后找到一个好友群喊了一声,我发现了个好去处,一起约啊,然后开始讨论是自驾还是火车还是飞机,然后有人就说这里不好玩,我去过了,我们去另一个地方吧,于是开始讨论去过了哪哪哪,就这样,一上午过去了,一行代码也没写……</p>
<p>有调查说,有百分之七八十的人有拖延症,我觉得这个比例有点小,我认为几乎所有的人都是有拖延症的,反正我自己是有的,并且病的不清,从上面两件事儿就能看出来,还有,比如这篇看许岑老师的精品课的摘要文章,我本来上周日就准备写了,拖到现在才开始。</p>
<p>前面举了一些例子,那什么是拖延症呢?就是明知道这件事该干,就是不干,并且拖着的时候还有强烈的焦虑感和负罪感。其实人人都有拖延症,只不过是有的事儿拖,有的事儿不拖,一方面是因为拖延的后果不严重,对自己影响不大,人并没有被拖死,还都好好的活着,等到混不下去了,就不拖延了。</p>
<p>想要有效治疗拖延症,还是那句,任务!任务!还是任务!重要的事情说三遍,只有真正严峻的任务才能有效解决拖延症的问题。比如你要做个报告,如果你要对着自己亲近的人报告,你很可能会拖延,但是如果你要面对 200 人,2000 人,或者你没有搞定,就被开除了,或者损失 50 万,你基本是不会拖了。</p>
<p>还有一种有效治疗拖延症的方式,是多找几件你必须做的事儿,拖这个时候做另一个,比如你正在写年终报告,怎么都不想写,这时候你多找几个任务,把电脑里的文件整理一下,把家里的账单清一下,看一本你之前拖着没看的书,互相拖延或许是一件不错的思路。</p>
<p>当然你要是说你什么都不想做,只想发呆、躺尸,那什么招都没办法,如果你真的克服不了,那也没有关系,只不过是芸芸众生中的又多了一位 loser 而已。</p>
<p>如果觉得内容还不错,可以关注一下我哦<br>微信公众号:志哥 (ID: zhige-me)<br>期待与你相遇,一同成长前行!</p>
原来,你的学习方法一直都是错的
https://segmentfault.com/a/1190000015205742
2018-06-06T20:21:04+08:00
2018-06-06T20:21:04+08:00
志哥
https://segmentfault.com/u/zhige_me
3
<blockquote>高效学习的定义:找到最适合自己的学习手法,在相对短的时间内集中注意力,以解决一个工作生活当中的难题为目的着手学习,你需要勤加练习,有时候还需要向名师求助。——许岑</blockquote>
<p>你肯定像我之前一样,经常学习一门语言(英语),或者一门乐器(吉他),学了很久都没有什么效果。我一直感觉学习方法可能有问题,但是并不知道问题出在了哪,很打击积极性,最后都放弃了。这几天刚好看了许岑的精品课《如何成为有效学习的高手》,恍然大悟,原来问题出在了这里。他一语道破了问题之所在,说我们学英语肯定是从语法开始了,学吉他肯定是照着谱子一页一页的练基本功了。难道这样练基础没法提高吗,也不是的,只是这样的效率太低了。他引入了结构主义和自然主义的概念,我们学习语言和乐器的时候,本该用自然主义的方式,结果却用了结构主义的方式。</p>
<p>下面谈一下什么叫自然主义和结构主义。简单说,自然主义就是模仿,结构主义就是创造。你要学习语言、乐器、书法的时候,要用自然主义的学习方式,学习艺术、医药学、经济学的时候要用结构主义的学习方式。</p>
<p>自然主义注重模仿,注重文本本身,照着表面的样子,遇到什么学什么,积少成多,以量取胜,重复。比如你练书法,就是照着字帖临摹,人家什么样,你就什么样,一丝不苟地模仿的一模一样就好了。而结构主义注重创造,侧重对结构和交互关系的认识,体系化,要学习本质,能举一反三。</p>
<p>比如你了解了电路原理之后,就能通过这个原理,自己造一台机器,但是学英语,什么时候轮到我们创造了?我们小时候学中文,难道不是大人说一句,我们学一句,好像也没怎么学语法就会说话了,我们的英语学了那么多语法,好像一句地道的英语也不会说。</p>
<p>所以,面对不同的学问,要用不同的学习方式,这样的话你的学习才可能更有效。</p>
<p>但是光有效还不行,要想高效,我们还要注意一点,那就是学习的时候不必顾全大局,要把目标拆碎,针对细节重复练习。比如你想学习乐器,不要一次练完整首曲子,试着一次只练曲子当中的一句,把这句练透再练下一句。如果做到了这些,剩下的就交给时间了,多挤时间学习,合理利用碎片化时间。</p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>期待与你相遇,一同成长前行!</p>
不要再谈没兴趣了,那只是你不学习的借口罢了
https://segmentfault.com/a/1190000015187523
2018-06-05T18:00:02+08:00
2018-06-05T18:00:02+08:00
志哥
https://segmentfault.com/u/zhige_me
3
<blockquote>高效学习的定义:找到最适合自己的学习手法,在相对短的时间内集中注意力,以解决一个工作生活当中的难题为目的着手学习,你需要勤加练习,有时候还需要向名师求助。——许岑</blockquote>
<p>我们经常听到一句话,兴趣是最好的老师,这句话毫无疑问是对的。我之前也是信奉这句话的,记得我大四的时候有一次和舍友天齐去紫金山上聊理想聊人生,天齐一直是我们班第一名,做事儿很踏实,而我就不行,整个人很浮躁,其中谈到做一件事情的时候的态度,我说我是基于兴趣的,我感觉我对学的东西都没什么兴趣,不知道有什么用,我一直在找我想做的事情,到时候我可能就会好好学了。天齐则不这么认为,他说有时候我们并不需要基于兴趣,我们做这件事的时候,想着把它做好就行了。比如我们是数学系,他每次都能考九十多分,而我经常六七十分,还曾经考过三门必修181分,都没挂,当时我发了 qq 说说说这事儿,一个妹纸看到了很激动,赶紧给我发信息说,她三门刚好考了180,都没挂。我当时对数学没多大兴趣,基本不好好学,而天齐每次都考接近满分,从这就能看出来,我只是把兴趣当作是我不学习的借口而已。而当我认识到这个问题的时候,已经毕业一两年了。可见天齐的认知比我高了不知道多少年。</p>
<p>好了,说了我的故事,你可能并不感兴趣。你会问了,那不基于兴趣,我们要怎么样去学习才能更高效呢?一个人做事儿一般有两种动力,内在动力和外在动力,内在动力包括兴趣、虚荣心,外在动力包括回报、利益。既然你没有兴趣,那我们就把兴趣驱动排除吧。</p>
<p>可以说,成年人学习,不需要培养兴趣,要用任务驱动学习。你可能会说,我没有任务啊,找不到任务啊,这里我要告诉你,其实你有很多任务,只是你没有注意到而已。生活中的任务驱动,工作中的职业强迫这些都是任务。</p>
<p>先说说生活中的任务驱动,比如许岑老师在英国学做菜,这个就是任务驱动,他说英国的饭实在太难吃了,就自己学做菜,我也是的,我是嫌附近的饭太难吃了,又贵,才学会了做饭,当然我的水平肯定是赶不上许岑老师的,自己吃还好,还没到像他一样出教程的程度。</p>
<p>再说说工作中的职业强迫,比如我是软件工程师,俗称程序猿,以写 bug 为生,我写代码是为了赚钱,这是我的工作,如果你问我我的梦想是什么,绝逼不是写代码,我的梦想是发财。所以平时的工作很苦逼,那也没办法,毕竟是工作,任务都是有时间期限的,完不成就被开除了,不行也得行,只能逼自己去学习。关于职业强迫还有一个例子,就是同样是摄影,一般摄影爱好者水平是不如报社工作的图片新闻记者的,那是因为他们有任务,要给这份职位一个交代。</p>
<p>这时候有人会说了,我无业啊,怎么办?要不然你帮我找个工作吧,当然我是不会答应的,毕竟我也是被开除的边缘。噗噗噗。没有工作不可怕,你可以自己给自己打工啊。比如你要学写代码,不要整天抠书,效率很低的,上手开始写吧,为了一个明确的目标,比如你可以设定个目标,开发个网站或者做个 APP,带着这个任务边干边学就好了。</p>
<p>如果这些你都不想做,那你还可以出教程啊,出教程卖钱啊,以教为学,以输出倒逼输入。一旦你可以出教程了,你就不是无业了,是自由职业者了,想想就美滋滋。</p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!<br><img src="/img/remote/1460000015315799" alt="微信公众号:志哥 (ID: zhige-me)" title="微信公众号:志哥 (ID: zhige-me)"></p>
碎片化学习不是学习碎片,看这篇了解碎片化学习的真相
https://segmentfault.com/a/1190000015161657
2018-06-04T11:52:25+08:00
2018-06-04T11:52:25+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<blockquote>高效学习的定义:找到最适合自己的学习手法,在相对短的时间内集中注意力,以解决一个工作生活当中的难题为目的着手学习,你需要勤加练习,有时候还需要向名师求助。——许岑</blockquote>
<h4>为什么会出现碎片化学习?</h4>
<p>随着科技的进步、阅读载体的变化、可便携式设备的普及还有人们的浮躁求快的心理,人们越来越关注碎片化学习,期望在短时间内学到更多的东西。还有就是成年人周围的各种杂事儿这些环境因素影响着我们,不得不把时间碎片化。我这里首先明确的是,碎片化学习只是学习的补充,最好的学习还是能在图书馆里,在安静的房间里,有固定的时长的一段时间里系统化的学习。</p>
<h4>碎片化学习的好处和缺陷</h4>
<p>碎片化学习可以让我们的学习不再受时空的限制,能够更加灵活的应用,可以弥补正式学习的缺陷,可以针对兴趣,有计划、有针对性的进行学习,提高学习的效率。但是碎片化学习终究是有缺陷的,因为它缺乏系统性,缺乏思考,缺乏与人交流。所以碎片化学习可以作为学习的补充,还是很有力量的,毕竟学了比啥也不学强。</p>
<h4>碎片化时间如何挤取?</h4>
<p>早有古代的欧阳修曾经说过:「余平生所作文章,多在三上,乃马上、枕上、厕上也。盖惟此尤可以属思尔。」看来利用零散时间阅读的习惯古已有之,在我们生活中,比如排队中、地铁上、等车等等这些时间都可以利用。</p>
<h4>如何高效的利用碎片化时间呢?</h4>
<p>一句话,带着问题和疑问去搜索。碎片化学习不是这弄一点儿,那弄一点,你那是熊瞎子掰苞米。一定要基于搜索,什么是基于搜索?就是一定要带着问题和疑问去执行碎片化学习。在一段时间内,围绕一个课题或者疑问,有目的的去拾获碎片,而不是乱捡,碎片化学习最终的效果是把这些碎片链接起来。</p>
<h4>收藏是假的碎片化学习</h4>
<p>网上有一个段子,一个日本老头说:「许多人是以读书为乐的是吧,我不是读书,我是买书为乐的。」收藏就是类似心理的碎片化学习方式,收藏按钮在各种 APP 中很常见,因为它会缓解人们的焦虑,觉得收藏了就是已经看了,知识已经是你的了,但它是一种幻觉,如果收藏了不看,那并没有什么意义,所以你要消除这种幻觉。我之前就是收藏了不看,所以现在我索性不收藏了。</p>
<p>如果觉得内容还不错,可以关注一下我哦 <br>微信公众号:志哥(ID: zhige-me)<br>期待与你相遇,一同成长前行!</p>
如何把百度网盘下载速度提高 100 倍,我推荐这个下载工具
https://segmentfault.com/a/1190000015044021
2018-05-26T21:24:56+08:00
2018-05-26T21:24:56+08:00
志哥
https://segmentfault.com/u/zhige_me
53
<p>友情提示,如果不好使,可以看看其他几篇:</p>
<p>其他几个类似工具:</p>
<p>【high-speed-downloader】支持 Mac 和 Windows,<br>【BaiduNetdiskPlugin-macOS】仅支持 Mac,<br>【pandownload】仅支持 Windows 。</p>
<p>参见:</p>
<p><a href="https://link.segmentfault.com/?enc=kJiDHxjS51Nph26sMXUVtw%3D%3D.IlZpP78vbnFjc1nXGqsbI%2Fe27GvPYq2QDBpvGn7nSPRdJfx%2BvsRntMMm9IEvSaR3ByO4ox2CnfEH%2BImC4dbhwQ%3D%3D" rel="nofollow">【high-speed-downloader】百度网盘不限速下载 支持 Windows 和 Mac</a></p>
<p><a href="https://link.segmentfault.com/?enc=Nqu9RHKywA3TJzaMPWr67w%3D%3D.vJPsTf2dFaYs6poFBlmya5vwYI%2BJMh7Mc%2BLoQ896DCC2sadYs0O64PjMs657XuUCR3jQK%2BhJ9FNkXjE9XjYhUQ%3D%3D" rel="nofollow">【破解 SVIP】提升百度网盘下载速度的另一种方法</a></p>
<p><a href="https://link.segmentfault.com/?enc=Z3qxMuHntuz8avS6BfMxFw%3D%3D.Pgv9zXpdfTUszts296upstavM7tokkWq7lVYx6%2B7oKQ%3D" rel="nofollow">PanDownload</a></p>
<h3>正文:</h3>
<p>应该有很多小伙伴平时的文件、资源都会放到百度网盘上面,或者从别人网盘上找到各种资源,但是当你下载的时候你就发现百度云是以这种速度龟速下载。对,每秒几十 KB,小的文件还好,如果稍微大点的软件,就得先去玩一天,慢慢等着了。</p>
<p><img src="/img/remote/1460000015044026" alt="image" title="image"></p>
<p>反正我已经懒得喷百度了,封了很多第三方下载工具,意思就是让你开 VIP,而我又不想开,因为并不常用百度云下载,索性就去网上搜罗一些工具,刚好发现了这样一款优秀的全速下载工具。多亏有我们的开源社区以及广大网友啊,又想到了新方式。这里我就分享这款优秀的下载工具,让你告别下载缓慢的烦恼。</p>
<p>废话不多说,先上图,看效果。可以看到下载速度接近 3MB 每秒,这个速度是依赖你现有网络的,我的网络不太快,所以也是接近全速下载了。</p>
<p><img src="/img/remote/1460000015044027" alt="image" title="image"></p>
<p>这个工具的名字是 proxyee-down,是在 GitHub 上发现的,工具的地址是 </p>
<p><a href="https://link.segmentfault.com/?enc=vRt81zIkfFRXT9cM2ybqPg%3D%3D.WRzJ8lV6EfDHG67WhoKjBSk8%2BB51unktTem9WVrApk9qE4K2HdVoldXp2JFpd0Ez3XaoIS0%2FB1Ne6cy3XjaoHQ%3D%3D" rel="nofollow">https://github.com/proxyee-do...</a></p>
<p>上面有安装教程,以及问题解答,一般看这个教程就能搞定了,如果还有问题,可以加他们的 qq 群,以上地址里面都有。</p>
<p>考虑到这个步骤有一些坑,尤其是没有技术背景的看文档可能还是有点困难,我这里把我的步骤讲一下,希望能够尽可能帮助到大家少走弯路。PS:我的系统是 Mac OS,浏览器是 Chrome,不是这个系统和浏览器的仅做参考,可以去上面安装教程里面找到对应的其他系统安装方式。</p>
<p>步骤:</p>
<h4>1、下载这个工具</h4>
<p>地址: <a href="https://link.segmentfault.com/?enc=bT6X5IadVWzXkdjgLRvx2A%3D%3D.g6wF00cElJ5sW7eHQ1z6PFVsB9SozoziHcYrR1qQDvQiMzGvy8N3v8FAbyGkTrsrrwzXM2Ari9CHFULKUzu2rszxKtLG3ykoCdnd%2BUuVeWkDI7bmpgwkF97fTn%2BHgD68fZuUVxMSJgyj6O0DGOlAQXUd1AG4pogh0AGHIPihcCY%3D" rel="nofollow">https://github.com/proxyee-do...</a></p>
<p>里面有对应的版本,不同的操作系统下载对应的就好了,<code>proxyee-down-x.xx-mac.zip</code>, 现在最新的是 2.54,比如我下载的是 <code>proxyee-down-2.54-mac.zip</code></p>
<h4>2、解压并运行</h4>
<p>讲刚才下载好的 <code>proxyee-down-2.54-mac.zip</code> 解压到任意目录,双击 start 运行软件,由于安装证书和切换代理需要 root 权限,所以在运行软件会提示输入用户密码,输入完按回车确认即可。</p>
<p><img src="/img/remote/1460000015044028" alt="image" title="image"></p>
<p>启动成功之后会弹出成功提示,同时启动了这个工具。</p>
<p><img src="/img/remote/1460000015044029" alt="image" title="image"></p>
<p>同时电脑上会有如下的这个工具图标,点开证书目录,其实就是刚才目录里面的 <code>proxyee-down-2.54/main/ssl/ca.crt</code> </p>
<p><img src="/img/remote/1460000015044030" alt="image" title="image"></p>
<p>双击安装证书,添加可信任。</p>
<p><img src="/img/remote/1460000015044031" alt="image" title="image"></p>
<h4>3、打开你想下载的百度网盘链接</h4>
<p>你会发现多出来一个 proxyee-down,如果没有出现,检查以上步骤是不是有问题,最后还是不出现,去该工具地址看常见问题列表 <code> https://github.com/proxyee-down-org/proxyee-down/blob/master/.guide/FAQ.md</code>,看是否你那边需要装浏览器插件,如果装了还是有问题,可以去 qq 群问问题,或者留言给我。</p>
<p><img src="/img/remote/1460000015044032" alt="image" title="image"></p>
<h4>4、选中你要下载的文件,点下载按钮</h4>
<p>点了下载按钮之后就会跳转到这个工具,会有个弹出框,如下图,选择你的下载路径,点击创建,就开始下载啦。</p>
<p><img src="/img/remote/1460000015044033" alt="image" title="image"></p>
<p>这样你就告别百度云的龟速下载了。</p>
<p>写在后面:如果觉得这个工具不错,希望可以给作者赞赏支持一下,毕竟是别人的付出,虽然是开源的,也希望我们能够支持一下,这样能够增加别人继续把这个事情做下去、做好的信念,如果像我一样比较穷的,至少可以点个 star,这样就能让更多人的人关注这个项目。当然,百度常年为我们提供免费的网盘服务,也是需要支持的,感觉价钱还可以的话,或者嫌教程麻烦的话,还是买 VIP 就好了。</p>
<p>福利:我这里有一些电子书的存货,估计有上万本吧,各个类型的都有,关注我的公众号「志哥的成长笔记」(ID:zhige-me),后台回复 「阅读」 获取。扫描下方二维码关注。</p>
<p><img src="/img/remote/1460000015935780" alt="" title=""></p>
Mac 下修改文件的 md5 值
https://segmentfault.com/a/1190000014835558
2018-05-12T21:11:53+08:00
2018-05-12T21:11:53+08:00
志哥
https://segmentfault.com/u/zhige_me
1
<h4>1、查看 md5 值</h4>
<p>打开 Terminal (终端),输入「md5」,空格,文件路径,最终命令类似于</p>
<pre><code>$ md5 文件路径
例:
$ md5 /Users/wangyongzhi/Downloads/1.mp4
也可以切到对应的目录下面,直接执行文件名的形式
$ cd /Users/wangyongzhi/Downloads
$ md5 1.mp4</code></pre>
<p>然后按下回车<br>输出结果</p>
<pre><code>MD5 (文件路径) = fbdfedafc1336dd2272719f0fe58d025
MD5 (/Users/wangyongzhi/Downloads/1.mp4) = fbdfedafc1336dd2272719f0fe58d025</code></pre>
<p>当然也可以使用简化版</p>
<pre><code>$ md5 -q 文件路径</code></pre>
<p>输出结果</p>
<pre><code>fbdfedafc1336dd2272719f0fe58d025</code></pre>
<h4>2、修改 md5 值</h4>
<p>修改文件的md5值命令,输入「echo」,任意字符,「>>」,文件路径,最终命令类似于</p>
<pre><code>$ echo a >> /Users/wangyongzhi/Downloads/1.mp4</code></pre>
<p>然后再输入</p>
<pre><code>$ md5 文件路径
例:
$ md5 /Users/wangyongzhi/Downloads/1.mp4</code></pre>
<p>输出结果</p>
<pre><code>MD5 (/Users/wangyongzhi/Downloads/1.mp4) = a2f67662a97114782087409546261de2</code></pre>
<p>对比修改前和修改后的值,你会发现 md5 值已经改掉了</p>
<p>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!</p>
NODE_MODULE_VERSION inconsistency
https://segmentfault.com/a/1190000014488705
2018-04-19T23:20:32+08:00
2018-04-19T23:20:32+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p><img src="/img/remote/1460000014488710" alt="image" title="image"></p>
<p>我的个人博客是用的 Hexo + Github pages 搭建的,由于前面半年忙于一个项目,更主要的原因是懒,没有更新,最近每次提交的时候总会遇到个问题,其实并不影响正常提交,但是对于强迫症的我来说,每次看到这个 Error 总感觉很烦躁。</p>
<p>下面是错误日志:</p>
<pre><code class="js">hexo g --d
Error: The module '/usr/local/lib/node_modules/hexo-cli/node_modules/dtrace-provider/build/Release/DTraceProviderBindings.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 48. This version of Node.js requires
NODE_MODULE_VERSION 59. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
at Object.Module._extensions..node (module.js:678:18)
at Module.load (module.js:561:32)
at tryModuleLoad (module.js:501:12)
at Function.Module._load (module.js:493:3)
at Module.require (module.js:593:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/usr/local/lib/node_modules/hexo-cli/node_modules/dtrace-provider/dtrace-provider.js:17:23)
at Module._compile (module.js:649:30)
at Object.Module._extensions..js (module.js:660:10)
at Module.load (module.js:561:32)
at tryModuleLoad (module.js:501:12)
at Function.Module._load (module.js:493:3)
at Module.require (module.js:593:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/usr/local/lib/node_modules/hexo-cli/node_modules/bunyan/lib/bunyan.js:79:18)
at Module._compile (module.js:649:30)
{ Error: Cannot find module './build/default/DTraceProviderBindings'
at Function.Module._resolveFilename (module.js:543:15)
at Function.Module._load (module.js:470:25)
at Module.require (module.js:593:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/usr/local/lib/node_modules/hexo-cli/node_modules/dtrace-provider/dtrace-provider.js:17:23)
at Module._compile (module.js:649:30)
at Object.Module._extensions..js (module.js:660:10)
at Module.load (module.js:561:32)
at tryModuleLoad (module.js:501:12)
at Function.Module._load (module.js:493:3)
at Module.require (module.js:593:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/usr/local/lib/node_modules/hexo-cli/node_modules/bunyan/lib/bunyan.js:79:18)
at Module._compile (module.js:649:30)
at Object.Module._extensions..js (module.js:660:10)
at Module.load (module.js:561:32) code: 'MODULE_NOT_FOUND' }
{ Error: Cannot find module './build/Debug/DTraceProviderBindings'
at Function.Module._resolveFilename (module.js:543:15)
at Function.Module._load (module.js:470:25)
at Module.require (module.js:593:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/usr/local/lib/node_modules/hexo-cli/node_modules/dtrace-provider/dtrace-provider.js:17:23)
at Module._compile (module.js:649:30)
at Object.Module._extensions..js (module.js:660:10)
at Module.load (module.js:561:32)
at tryModuleLoad (module.js:501:12)
at Function.Module._load (module.js:493:3)
at Module.require (module.js:593:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/usr/local/lib/node_modules/hexo-cli/node_modules/bunyan/lib/bunyan.js:79:18)
at Module._compile (module.js:649:30)
at Object.Module._extensions..js (module.js:660:10)
at Module.load (module.js:561:32) code: 'MODULE_NOT_FOUND' }</code></pre>
<p>解决方式:重新构建 node-pty 模块</p>
<pre><code class="js">npm rebuild node-pty --update-binary</code></pre>
<p>微信公众号:志哥 (ID: zhige-me)<br>期待与你相遇,一同成长前行!</p>
Elasticsearch 自动重启脚本,同样适用于其他应用
https://segmentfault.com/a/1190000010329990
2017-07-24T22:30:58+08:00
2017-07-24T22:30:58+08:00
志哥
https://segmentfault.com/u/zhige_me
1
<p>应产品要求,让写个es的自动重启的脚本,如果es挂了,要在分分钟之内重启,当时我的内心是崩溃的,像我这种Linux只会<code>cd</code>、 <code>ls</code> 的哪会写什么脚本啊,无奈,只能去谷歌了,边看边改,没想到还真给写出来了,貌似还不难,是不是有什么漏洞我就母鸡了。</p>
<p>es自动重启,首先要知道es是怎么启的,下载,配置,启动,这里就略过了。直接看脚本吧。</p>
<h4>创建脚本</h4>
<p>首先创建个sh文件,<code>es_monitor.sh</code>,内容很简单,判断es进程是否存在,存在就算了,不存在就重启。</p>
<pre><code class="shell">#!/bin/bash
cd `dirname $0`
BIN_DIR=`pwd`
# jdk路径,这里有个坑,下文会讲
export JAVA_HOME=/home/pangu/soft/jdk1.8.0_111
# 获取es进程ID,我的es目录是/home/pangu/app/elastic/elasticsearch-master
ES_ID=`ps -ef |grep elasticsearch |grep -w 'elasticsearch-master'|grep -v 'grep'|awk '{print $2}'`
#启动脚本目录
StartES=/home/pangu/app/elastic/elasticsearch-master/bin/elasticsearch
# 日志输出
ESMonitorLog=$BIN_DIR/es-master-monitor.log
Monitor()
{
if [[ $ES_ID ]];then # 这里判断ES进程是否存在
echo "[info]当前ES进程ID为:$ES_ID"
else
echo "[error]ES进程不存在!ES开始自动重启..."
sh $StartES -d
fi
}
Monitor>>$ESMonitorLog</code></pre>
<h4>crontab 定时任务</h4>
<p>crond 是 Linux 下用来周期性的执行某种任务或等待处理某些事件的一个守护进程。</p>
<p>当前用户(pangu)下<code>crontab -e</code>,把下面这个放进去,保存,路径是自己脚本的路径,一分钟检测一次。ps: es默认不能用root启动,这里所说用户都是pangu。</p>
<pre><code class="shell">*/1 * * * * /bin/sh /home/pangu/app/elastic/es-monitor/es_monitor.sh</code></pre>
<h4>遇到的问题:</h4>
<p>过程中遇到了一个问题,<code>./bin/elasticsearch -d</code>直接启动es是可以的 ,直接运行<code>es_monitor.sh</code> 也是可以的,如果es进程被杀死,是会启动的,但是用crontab怎么都不行,一直报 JAVA_HOME 找不到的问题。</p>
<pre><code class="shell">Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME</code></pre>
<p>而 pangu 用户的<code>.bash_profile</code>里面是配的有 Java环境变量的啊,想不通就去求助Linux大神旭哥了,旭哥看到后,表示很无语,骂了一句傻逼,说这都是最基础的东西。原来我配置在 pangu 用户下的<code>.bash_profile</code> Java环境变量在 cron 下是不生效的,去网上查了一下,发现好多人都被这个环境变量的问题坑过,crontab会以用户的身份执行配置的命令,但是不会加载用户的环境变量。这个可以用交互、非交互shell来解释,<code>.bash_profile</code>是交互的,以login的方式进入bash运行的。什么是交互式模式呢?就是shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。而非交互式模式,是以shell script(非交互)方式执行的,在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们,当它读到文件的结尾,shell也就终止了。可见我们的crontab是非交互的模式。这样就懂了吧,看来要好好学学Linux了,噗噗噗。</p>
<p><img src="/img/remote/1460000015950887?w=1636&h=819" alt="" title=""></p>
Java 生产环境 debug
https://segmentfault.com/a/1190000010211498
2017-07-17T12:00:00+08:00
2017-07-17T12:00:00+08:00
志哥
https://segmentfault.com/u/zhige_me
1
<p>要解决的问题:生产环境是内网服务器,只提供跳板机额外网访问权限,通过 idea 对生产环境进行调试。</p>
<h4>1、生产环境启动参数 start.sh</h4>
<pre><code class="sh">JAVA_DEBUG_OPTS=""
if [ "$1" = "debug" ]; then
JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
fi
# JAVA_DEBUG_OPTS 放在Java脚本启动的JVM参数
# 解释: 随着jkd版本的升高,上面的写法变了,但是功能并不影响,待会儿到idea的时候就能看到了。
# -Xrunjdwp 是通知JVM使用(java debug wire protocol)来运行调试环境。该参数同时了一系列的调试选项:
# transport 指定了调试数据的传送方式
# dt_socket 是指用SOCKET模式
# address 端口
# server=y/n VM 是否需要作为调试服务器执行。
# suspend=y/n 是否在调试客户端建立连接之后启动 VM 。
</code></pre>
<h4>2、idea 配置调试端口</h4>
<p>打开 idea 当前工程,Edit configurations…,如下图</p>
<p><img src="/img/remote/1460000010211501" alt="" title=""></p>
<p>在Remote配置如下,其实就是host和端口而已,其实上面脚本里面的就类似于idea里面的这些。</p>
<p><img src="/img/remote/1460000010211502" alt="" title=""></p>
<h4>3、SecureCRT 配置端口转发</h4>
<p>我只会用SecureCRT 做端口转发,其他要是有好的工具欢迎建议给大家</p>
<p>首先在 SecureCRT 登录跳板机,比如我的跳板机是120.27.227.13,右键 <code>properties </code> 或者点工具栏的 <code>options->session options</code> </p>
<p><img src="/img/remote/1460000010211503" alt="" title=""></p>
<p>然后点 <code>Port Forwarding</code>,Add增加一条</p>
<p><img src="/img/remote/1460000010211504" alt="" title=""></p>
<p>编辑</p>
<p><img src="/img/remote/1460000010211505" alt="" title=""></p>
<h4>4、以debug模式启动服务器</h4>
<pre><code class="sh">./start.sh debug</code></pre>
<h4>5、idea 点debug,就发现已经连接上了</h4>
<p><img src="/img/remote/1460000010211506" alt="" title=""></p>
<p>现在就可以愉快的打断点调你的服务了,即将进入debug模式</p>
<p>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!</p>
secureCRT 配置端口转发用于 SFTP 文件传输
https://segmentfault.com/a/1190000010211468
2017-07-17T00:04:02+08:00
2017-07-17T00:04:02+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>一般要做端口转发,是因为要通过跳板机登录内网服务器,这篇主要是介绍通过配置端口转发,实现以拖拽的方式上传文件,喜欢用命令的同学可以自行忽略本篇。</p>
<h4>1、配置secureCRT</h4>
<p>首先在 SecureCRT 登录跳板机,比如我的跳板机是120.27.227.13,右键 <code>properties </code> 或者点工具栏的 <code>options->session options</code> </p>
<p><img src="/img/remote/1460000010211471" alt="" title=""></p>
<p>然后点 <code>Port Forwarding</code>,Add增加一条</p>
<p><img src="/img/remote/1460000010211472" alt="" title=""></p>
<p>配置</p>
<p><img src="/img/remote/1460000010211473" alt="" title=""></p>
<h4>2、配置Cyberduck</h4>
<p>我的FTP上传工具是Cyberduck,我叫他小黄鸭,我喜欢用这个,当然secureCRT也可以用来做上传下载,也是直接拖拽的方式,方法是Mac快捷键,command+shift+p 进入sftp模式。</p>
<p>下面看小黄鸭配置,其他FTP工具方式类似</p>
<p>新建一个连接,名称随便起,配置用刚刚的本地ip和端口即可,如下图</p>
<p><img src="/img/remote/1460000010211474" alt="" title=""></p>
<p><img src="/img/remote/1460000015950887?w=1636&h=819" alt="" title=""></p>
sublime 格式化 JSON
https://segmentfault.com/a/1190000009969858
2017-06-28T20:43:10+08:00
2017-06-28T20:43:10+08:00
志哥
https://segmentfault.com/u/zhige_me
0
<p>每次要格式化 JSON,都去 <a href="https://link.segmentfault.com/?enc=KfTDZsjwYYi6XVADp7gNvQ%3D%3D.UMZj%2Bh2Mw7AM%2BWy4wKt%2F%2BL8EaArJ5cYdapmB8u2KYxY%3D" rel="nofollow">http://www.bejson.com/</a> </p>
<p>这个网站上面有 JSON 的很多功能,基本能覆盖大部分的场景,尤其是进去之后点 <code>JSON 相关</code> -> <code> JSON 视图</code> 是我最常用的。</p>
<p><img src="/img/remote/1460000014078159" alt="" title=""></p>
<p>不过我还发现了另外一种方式,用最喜欢的 Sublime 编辑器格式化 JSON。<br>怎么做到呢?两种方式</p>
<p>1、打开 Sublime,<code>command + shift + p</code> -> Install package <br>搜索 Pretty JSON,安装</p>
<p>2、手工 install</p>
<pre><code class="gas">I: cd <Packages directory> (例如 Mac ~/Library/Application\ Support/Sublime\ Text\ 2/Packages
or
~/Library/Application\ Support/Sublime\ Text\ 3/Packages)
II: git clone https://github.com/dzhibas/SublimePrettyJson.git</code></pre>
<p>格式化快捷键 :</p>
<p>OS X: <code>command + ctrl + j</code><br>Windows: <code>ctrl + alt + j</code></p>
<p>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!</p>
ReactJS入门实战——基于ReactJS构架的图片画廊应用
https://segmentfault.com/a/1190000009826818
2017-06-18T20:09:35+08:00
2017-06-18T20:09:35+08:00
志哥
https://segmentfault.com/u/zhige_me
3
<h2>a photo gallery project based on react</h2>
<p>基于ReactJS构架的图片画廊应用-仿造慕课网课程编写</p>
<p>因为课程是老版本,和最新版本有很多不同,改动了一些东西,自己也进了不少了坑,多少次有想死的感觉,想放弃,又于心不忍,还好一步一步填完了所有的坑,最终实现了想要达到的效果。</p>
<pre><code>git clone https://github.com/wangyongzhi/gallery-by-react
npm i
npm start</code></pre>
<p>完事会自动打开 <a href="https://link.segmentfault.com/?enc=xcmnn0iKgRTTZLXqcb7FNQ%3D%3D.Oi%2Bk%2BuwyWsJNh0XcX%2B%2BNN7H32AukMtIYEUvqy7Jd9Rg%3D" rel="nofollow">http://localhost</a>:8000/webpack-dev-server/ 可看效果</p>
<p>当然,学一门新技术可能会遇到很多问题,尤其是最新版本和教程已经有很不同之处,这需要有足够的耐心,一步一步去解决它。</p>
<h2>项目搭建</h2>
<p>上面的有点简单粗暴,下面就仔细分析一下项目的具体搭建过程。</p>
<p>首先此项目依赖nodejs,所以要先装node的环境,可去<a>nodejs官网</a>)自行下载安装,也可以用nvm,brew等工具,想用什么方法随便你,这里不再赘述,如果这个都不能自己搞定,那基本不用入门了,可以直接放弃了……</p>
<p>首先安装脚手架工具yeoman<br><code>npm install -g yo</code><br><code>yo —version</code> 可查安装版本</p>
<p>接下来去<a href="https://link.segmentfault.com/?enc=6ztlbvy2SOEbcRXT1cqM1g%3D%3D.UA3x2CCJDn1nbsuTfyGui%2BBQwwElSsqdcMiC7eVE5v8%3D" rel="nofollow">yeoman官网</a>,点Discovering generators,搜索react,找到react-webpack,点进去进入到它的<a href="https://link.segmentfault.com/?enc=UWBWHZIa7hJ4endPZ%2FLCsQ%3D%3D.VQUXIXGPkiP0RHVhqoHuYm5ogQyC%2BJUTZXdppmIrvpqaYZ2UxILvWfWGEzSCIk1rlQr574RJcc9Urtwqe0JIcHTDAloyRE9d8EjcGO7S1jY%3D" rel="nofollow">github介绍主页</a>(懒得上面步骤的,直接点这个可看,懒得看的,直接用下面命令安装这个generator即可</p>
<p><code>npm install -g generator-react-webpack</code></p>
<p>由于国外镜像,国内有时候下载慢或者下载不了,可以换成国内淘宝镜像,步骤如下:</p>
<pre><code>1、npm install -g cnpm
2、cnpm install -g generator-react-webpack</code></pre>
<p>装完之后,这里教大家一个查generator版本的命令<br><code>npm ls -g --depth=1 2>/dev/null | grep generator-</code><br>这么长,什么意思呢?</p>
<pre><code>npm ls -g 列出npm全局安装的所有npm包,因为npm的包会依赖其他的包,所以是树状展现出来的,超级多,比较难以查看所要查询的东西
而--depth=1就是限制树状结构只展示一层
2>/dev/null 这个是什么鬼呢?
尖括号>表示重定向
bash里面1表示标准输出standard output (stdout).
2表示标准错误standard error (stderr).
/dev/null表示空设备文件
所以2>/dev/null 的意思就是如果在执行npm ls -g的过程中有错误消息,把错误消息重定向到空设备文件上,其实就是输出中过滤掉了错误消息
| 表示管道,前面的输出是后面的输入
grep就是检索的意思</code></pre>
<p>这么说就明白了吧,你可以都试试,不加的话会是神马情况。</p>
<p>安装完了就是使用了,使用之前呢,为了避免电脑宕机,可以为你自己的程序找到一个安身之所,我推荐选择github,我的地址是 <a href="https://link.segmentfault.com/?enc=tE2mqQtUTl7QSlaV20IACQ%3D%3D.NRFeJ3AyRt4kkcdsgxu02JShKligbSFdXo4jTlJhn5M%3D" rel="nofollow">https://github.com/wangyongzhi</a> ,对github和git不清楚的可以自行搜索相关教程,当然,这个暂时不是必须的。</p>
<p>如果有github的创建一个仓库,用git clone 命令拷到本地来,没有的话自己创建个工程文件夹也行</p>
<p><code>mkdir galleryProject && cd galleryProject</code> </p>
<p>工程名随便起,尽量有意义比较好。</p>
<p>然后在终端运行</p>
<p><code>yo react-webpack</code></p>
<pre><code>首先问我们
Please choose your application name (galleryProject)
默认就是自己的工程,直接回车即可
Which style language do you want to use?
❯ sass
这个地方会有几个选项,选sass
Enable postcss? (y/N)
这个要选y(yes),以后会解释</code></pre>
<p>好了,下面你就可以去吃个饭或者约个会了……因为这个过程超级慢,一般都会卡到这个地方</p>
<pre><code>> node-sass@3.8.0 install /Users/wangyongzhi/2016/workspace/gallery-project/node_modules/node-sass
> node scripts/install.js</code></pre>
<p>为啥呢,GitHub 在国内访问本来就不稳定,然后还是用 <a href="https://link.segmentfault.com/?enc=ntXTr84EP7f3QJiK1XIeeQ%3D%3D.e89saz8gEMuqnN69T%2FhvjWgRw8En9hgso0XHDlPC2ADBP6JBV0UZxsob4b85jTbx" rel="nofollow">request</a> 去访问,就更慢了。</p>
<p>具体解决方法两种:</p>
<pre><code>SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ npm install</code></pre>
<p>或者在 <code>~/.npmrc</code> 里添加下面这行(<a href="https://link.segmentfault.com/?enc=wTMT0XPdKyVWn7o%2FsfY0yA%3D%3D.s5LjHtGragHO6wSZmBXykrTlCY7xe93TE51gmOxGlf2f6nZ7RIhJOOMQgqTNVWKutgEF8yIKaOW0thkNn9mZh4nnJjkSXP65pmMAYz2WC4A%3D" rel="nofollow">参考</a>),保存后再 <code>npm install</code><br>(如果是用的 cnpm,需要添加到 ~/.cnpmrc)</p>
<pre><code>sass_binary_site=https://npm.taobao.org/mirrors/node-sass/</code></pre>
<p>具体可看这篇文 <a href="https://segmentfault.com/a/1190000005921721">https://segmentfault.com/a/1190000005921721</a></p>
<p>现在在你的没有运行完的命令行里面,敲 <code>ctrl+c</code> 终止操作之后,运行</p>
<pre><code>SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ npm install</code></pre>
<p>秒下,效果就是不一般</p>
<h2>目录结构</h2>
<p>打开工程,目录结构如下,这个与视频之中有点不一样,没了Gruntfile.js和webpack.dist.config.js,莫方,容我一一道来</p>
<p><img src="/img/remote/1460000009826821?w=243&h=285" alt="img" title="img"></p>
<pre><code>cfg: 配置文件
dist: 项目发布所在目录
node_modules: 项目编译所需node组件所在的包
src: 源代码所在目录
test: 测试代码所在目录
.babelrc: 支持ES6(ES2015)的文件
.editorconfig: 用来统一不同的编辑器(IDE)的编码风格,具体可看官网http://editorconfig.org/
.eslintrc: 代码风格检测工具
.yo-rc.json: yeoman的配置文件,用来记录当前项目的一些信息,基本是刚才安装的时候那些选择的东西
karma.conf.js: karma测试框架的配置
package.json: node项目的配置文件,项目依赖的包都在这
server.js: 运行项目所必须的server文件
webpack.config.js: webpack开发环境配置文件,不过基本信息都放到了cfg目录下了,所以课程中老版本纳闷的同学们,不必太在意Gruntfile.js没有生成了</code></pre>
<h2>运行</h2>
<p>这时候可以来一发运行了</p>
<pre><code>npm start # or
npm run serve</code></pre>
<p>自动跳到 <a href="https://link.segmentfault.com/?enc=ySpXENn6lYJP0gUWyiOxtw%3D%3D.Ew7yXtfq%2FpDdnQWyPeOQfJ1wzsheBIkbXaWg5ynfUwI%3D" rel="nofollow">http://localhost</a>:8000/webpack-dev-server/ 成功</p>
<p>好了,环境已经搭好,下面就是具体的代码开发了。</p>
<p>开发的入口文件是src下的index.html和index.js,查看其中就可以发现./components/Main.js才是真正的主入口文件。</p>
<p>代码就不在这里写了,可以查看<a href="https://link.segmentfault.com/?enc=IbBTgRGLQV0FrlShk%2BTD6w%3D%3D.xF2yXO9OnA06AAAm79PPZTiYibGeccvYsVh%2BL3eadSyGpVI1Q8AZ%2BSCb4Y4IQDKr" rel="nofollow">我github上本项目</a>的代码,拷贝下来可以直接使用,最好是自己参考着写。</p>
<h2>注意事项</h2>
<ul>
<li>刚开始的时候把post-css选为yes,因为课程中用到的autoprefixer-loader is deprecated,具体可看<p><a href="https://link.segmentfault.com/?enc=6WaG5KIWaqF2MIE%2F3vyMVQ%3D%3D.plZ1RuDodyIRNxjwh0%2FvvZfE%2BBFa1qHyIzAjYt8V2F7OptTHlsTTzbbiZr8RVTeT" rel="nofollow">https://github.com/passy/autoprefixer-loader</a></p>
</li>
<li>
<p>.eslintrc文件里面可以加一些代码检查:</p>
<p>比如我加了强制分号结尾</p>
<pre><code>"semi": [2, "always"],//语句强制分号结尾</code></pre>
<p>具体可查看<a href="https://link.segmentfault.com/?enc=YORd0JpHF3gLDTm1sNfLOA%3D%3D.77EQ%2FU3rocMhlL8KCAZHjdCqKMSzW8RskyawOOr7DO4%3D" rel="nofollow">eslint</a>,我发现了一篇文章也不错<a href="https://link.segmentfault.com/?enc=Yj0bKVJwcf47tsbG%2BNrWNQ%3D%3D.DN9cjsRBtlYcDMQFbZANAei3%2B%2BsqksV3Fo64z1hkokxKOwREKICM3ADbRDCImojC" rel="nofollow">01-Eslint静态代码检查</a></p>
</li>
<li>调试react页面的时候可以选择React Developer Tools,可自行谷歌Chrome Web Store安装,可能需要翻墙的技能,没有也没关系。</li>
</ul>
<h2>其他要注意的地方</h2>
<p>对前端调试不太熟练,一些简单的错误都会找上半天</p>
<pre><code>//少了个斜杠
singeImageData.imageUrl = require('../images/'+singeImageData.fileName);</code></pre>
<pre><code>//因为' is-inverse'没加空格
imgFigureClassName += this.props.arrange.isInverse ? ' is-inverse' : '';</code></pre>
<p>切不可大意,不过遇到问题,慢慢解决就好,代码不会犯错,只有人会犯错。</p>
<h2>最后</h2>
<p>materliu是个非常好的带有文艺气息的高水平的程序员,已经路转粉了。</p>
<p>还有如果有什么地方有疑问或者我写的不对的地方,可以提出来,共同探讨,我会及时更新。</p>
<p>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!</p>
iTerm2 结合 Linux expect 实现 ssh 自动登陆, 通过跳板机登录服务器内网功能
https://segmentfault.com/a/1190000009826457
2017-06-18T19:12:52+08:00
2017-06-18T19:12:52+08:00
志哥
https://segmentfault.com/u/zhige_me
7
<h4>痛点</h4>
<p>一般情况下,公司所有的服务器都在内网,公网访问、管理服务器都要先通过登录一台跳板机,然后再由跳板机登录到相应的服务器进行操作,跳板机与服务器的连接都是内网地址。我们经常看到的现象就是下图这样(博主 Mac 自带的终端做的演示),每次都要通过 ssh 登录两次,输入两次密码,密码也经常输错,不胜其烦。</p>
<p><img src="/img/remote/1460000009826460?w=1618&h=676" alt="" title=""></p>
<p>这时候我们就需要用比较好的工具来解决这个问题,能够实现自动登录,避免时间耗到这种无意义的事情上。我所用到的工具是 iTerm2,iTerm2 是一款非常好用的 Mac 终端工具,具体介绍及基本用法可自行搜索。当然只有iTerm2 还不够,还要配合 Linux expect 的脚本才能实现自动登录。</p>
<h4>解决方法</h4>
<h5>expext 脚本</h5>
<p>通过跳板机登录内网服务器,如果只登陆有外网的服务器,把有关内网的部分删掉就可以啦,例如跳板机就是有外网的服务器。</p>
<pre><code class="sh">#!/usr/bin/expect
set host [lindex $argv 0]
set TERMSERV 跳板机IP
set USER 跳板机用户名
set PASSWORD 跳板机密码
set UATUN 内网服务器用户名
set UATPWD 内网服务器密码
# 登录跳板机
spawn ssh -l $USER $TERMSERV
expect {
"yes/no" {send "yes\r";exp_continue;}
"*password:*" { send "$PASSWORD\r" }
}
# 登录内网
expect "*跳板机用户名@*" {send "ssh -l $UATUN $host\r"}
expect {
"yes/no" {send "yes\r";exp_continue;}
"*password:*" { send "$UATPWD\r" }
}
interact</code></pre>
<p>把上面的脚本保存成一个文件,比如 login_inner ,保存在你指定一个文件夹下,我文件的路径是 <code>/Users/wangyongzhi/.ssh/login_inner</code>,<code>wangyongzhi</code> 是我本机用户名。<br>别忘了加上可执行权限,方式是 <code>chmod -R a+x /Users/wangyongzhi/.ssh/login_inner</code>,<br>不然等下执行的时候会报<br><code>permission denied: /Users/wangyongzhi/.ssh/login_inner</code><br>解释以上 shell 脚本都是什么意思</p>
<pre><code class="sh">#!/usr/bin/expect
注意:这一行必须在脚本的第一行,告诉操作系统脚本里的代码使用哪一个 shell 来执行
set host [lindex $argv 0]
这一行是设置一个变量的意思,变量名随便起,尽量有意义,后面表示的是传入的参数,0 表示第一个参数,后面会用到。
下面几个 set 类似,跳板机用户名密码一般都一样,可以放到这个脚本里面,内网服务器的可以选择性的放,也可以把他们放到参数里面依次传进来,本文只拿一个做例子。
spawn ssh -l $USER $TERMSERV
spawn 是 expect 环境的内部命令,它主要的功能是给 ssh 运行进程加个壳,用来传递交互指令。
expect {
"yes/no" {send "yes\r";exp_continue;}
"*password:*" { send "$PASSWORD\r" }
}
expect 也是 expect 环境的一个内部命令。判断上一个指令输入之后的得到输出结果是否包含""双引号里的字符串,比如后面的"*password:*",表示上一个输出结果包含password:
*通配符表示前后可以是任意字符。
如果是第一次登录,会出现"yes/no"的字符串,就发送(send)指令"yes\r",然后继续(exp_continue)。
下面的类似。
interact:执行完成后保持交互状态,把控制权交给控制台。</code></pre>
<h5>iTerm2 配置</h5>
<p>解释完上面的脚本,下面就要配置 iTerm2 了。<br>在 preferences->profiles 里面选左下角的 + 号增加一条,配置如下图所示,</p>
<p><img src="/img/remote/1460000009826461?w=568&h=401" alt="" title=""></p>
<pre><code>Name: 随便起,尽量有意义,你自己知道是哪台服务器
Tags: 标签,可写可不写,服务器多的话建议设置一个
send text at start: /Users/wangyongzhi/.ssh/login_inner 内网服务器IP
也可以写成 ~/.ssh/login_inner 内网服务器IP
内网服务器IP就是上面shell脚本里面的参数,跟前面的文件有空格哈</code></pre>
<p>好了,到此为止,你就完成了所有的准备工作,这时候再登录服务器,只需要三步就可以了</p>
<p>1、打开 iTerm2 </p>
<p>2、快捷键 Command + o 打开如下图所示的Profiles</p>
<p><img src="/img/remote/1460000009826462?w=620&h=182" alt="" title=""></p>
<p>3、选中你要进入的服务器名字,就可以进入啦</p>
<p>福利:我这里有一些电子书的存货,估计有上万本吧,各个类型的都有,关注我的公众号「志哥的成长笔记」(ID:zhige-me),后台回复 「阅读」 获取。扫描下方二维码关注。</p>
<p><img src="/img/remote/1460000015935780" alt="" title=""></p>
Intellij IDEA 中使用 MyBatis-generator 自动生成 MyBatis 代码
https://segmentfault.com/a/1190000009058867
2017-04-13T22:29:30+08:00
2017-04-13T22:29:30+08:00
志哥
https://segmentfault.com/u/zhige_me
6
<p>1、IDEA创建maven工程(略)</p>
<p>2、 在maven项目的pom.xml 添加mybatis-generator-maven-plugin 插件和MySQL数据库驱动依赖</p>
<pre><code class="xml"><build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency></code></pre>
<p>3、在maven项目下的src/main/resources 目录下建立名为 generatorConfig.xml的配置文件,作为mybatis-generator-maven-plugin 插件的执行目标,模板如下:</p>
<pre><code class="xml"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 配置mysql 驱动jar包路径.用了绝对路径 -->
<classPathEntry location="/Users/wangyongzhi/.m2/repository/mysql/mysql-connector-java/5.1.34/mysql-connector-java-5.1.34.jar" />
<context id="wangyongzhi_mysql_tables" targetRuntime="MyBatis3">
<!-- 防止生成的代码中有很多注释,加入下面的配置控制 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
<property name="suppressDate" value="true" />
</commentGenerator>
<!-- 数据库连接 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8"
userId="root"
password="123456">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 数据表对应的model层 -->
<javaModelGenerator targetPackage="me.zhige.domain" targetProject="src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- sql mapper 映射配置文件 -->
<sqlMapGenerator targetPackage="me.zhige.mapper" targetProject="src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- mybatis3中的mapper接口 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="me.zhige.dao" targetProject="src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 数据表进行生成操作 schema:相当于库名; tableName:表名; domainObjectName:对应的DO -->
<table schema="test" tableName="users" domainObjectName="User"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration></code></pre>
<p>4、使用maven运行mybatis-generator-maven-plugin插件:工程名->Plugins->mybatis-generator->mybatis-generator:generate->Run Maven Build</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1197115-7175ce5b29ae02c4.jpg" alt="图片发自简书App" title="图片发自简书App"></p>
<p>5、自动生成的结构如下:</p>
<p><img src="https://static.dingtalk.com/media/lALOvepB4syczOY_230_156.png_620x10000q90g.jpg" alt="img" title="img"></p>
<p>福利:我这里有一些电子书的存货,估计有上万本吧,各个类型的都有,关注我的公众号「志哥的成长笔记」(ID:zhige-me),后台回复 「阅读」 获取。扫描下方二维码关注。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1197115-7e3bc61b4ca02d6f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="" title=""></p>
ArrayList和Vector的区别
https://segmentfault.com/a/1190000007335150
2016-10-31T17:05:04+08:00
2016-10-31T17:05:04+08:00
志哥
https://segmentfault.com/u/zhige_me
2
<p>相同点:</p>
<p>1、ArrayList和Vector都是继承了相同的父类和实现了相同的接口</p>
<p>2、底层都是数组实现的</p>
<p>3、初始默认长度都为10。</p>
<p>不同点:</p>
<p>1、同步性:</p>
<p>Vector中的public方法多数添加了synchronized关键字,以确保方法同步,也即是Vector线程安全,ArrayList线程不安全。</p>
<p>2、扩容不同</p>
<p>内部属性不同,这可能是导致扩容方式不同的原因所在。</p>
<p>ArrayList有两个属性,存储数据的数组elementData,和存储记录数目的size。 </p>
<p>Vector有三个属性,存储数据的数组elementData,存储记录数目的elementCount,还有扩展数组大小的扩展因子capacityIncrement。 </p>
<p>ArrayList的扩展方法</p>
<pre><code>//jdk1.8.0_91
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
</code></pre>
<p>可以看出,在满足扩容条件时,扩展后数组大小为(原数组长度的1.5倍)与传递参数中较大者 </p>
<p>Vector的扩展方法</p>
<pre><code>//jdk1.8.0_91
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}
</code></pre>
<p>可以看出,当扩容因子大于0时,新数组长度为原数组长度+扩容因子,否则子新数组长度为原数组长度的2倍。 将上面生成的新数组长度与传递的参数长度作比较,较大者为最终的新长度。</p>
<p>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!</p>
用Java实现一些简单算法
https://segmentfault.com/a/1190000007216662
2016-10-19T17:10:11+08:00
2016-10-19T17:10:11+08:00
志哥
https://segmentfault.com/u/zhige_me
1
<p>for循环,外循环控制的是行数,内循环控制的是每一行的个数。</p>
<pre><code class="java">*****
*****
*****
*****
for (int x = 0; x < 4; x++){// 外循环控制的是行数
for (int y = 0; y < 5; y++){// 内循环控制的是每一行的个数
System.out.print("*");
}
System.out.println();
}</code></pre>
<p>--------------------------------------------------</p>
<pre><code class="java">*****
****
***
**
*
for (int x = 1; x <= 5; x++) {
for (int y = x; y <= 5; y++) {
System.out.print("*");
}
System.out.println();
}</code></pre>
<p>--------------------------------------------------</p>
<pre><code class="java">*
**
***
****
*****
for (int x = 1; x <= 5; x++) {
for (int y = 1; y <= x; y++) {
System.out.print("*");
}
System.out.println();
}</code></pre>
<p>--------------------------------------------------</p>
<p>54321<br>5432<br>543<br>54<br>5</p>
<pre><code class="java">for (int x = 1; x <= 5; x++) {
for (int y = 5; y >= x; y--) {
System.out.print(y);
}
System.out.println();
}</code></pre>
<p>--------------------------------------------------</p>
<p>1<br>22<br>333<br>4444<br>55555</p>
<pre><code class="java">for (int x = 1; x <= 5; x++) {
for (int y = 1; y <= x; y++) {
System.out.print(x);
}
System.out.println();
}</code></pre>
<p>--------------------------------------------------</p>
<pre><code class="java">* * * * *
* * * *
* * *
* *
*
for (int x = 1; x <= 5; x++) {//分成左右两边,左边是空格,右边是*加空格
for (int y = 1; y < x; y++) {
System.out.print(" ");
}
for (int z = x; z <= 5; z++) {
System.out.print("* ");
}
System.out.println();
}</code></pre>
<p>--------------------------------------------------</p>
<p></p>
<pre><code class="java"> *
* *
* * *
* * * *
* * * * *
for (int x = 1; x <= 5; x++) {
for (int y = x; y < 5; y++) {
System.out.print(" ");
}
for (int z = 1; z <= x; z++) {
System.out.print("* ");
}
System.out.println();
}</code></pre>
<p>--------------------------------------------------</p>
<p>九九乘法表</p>
<pre><code class="java">for (int x = 1; x <= 9; x++) {
for (int y = 1; y <= x; y++) {
System.out.print(y + "*" + x + "=" + y * x + "\t");
}
System.out.println();
}</code></pre>
<h2>整型数组</h2>
<p>遍历数组的功能</p>
<pre><code class="java">public static void printArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if (x != arr.length - 1) {
System.out.print(arr[x] + ",");
} else {
System.out.println(arr[x] + "]");
}
}
}</code></pre>
<p>--------------------------------------------------</p>
<p>获取最大值</p>
<pre><code class="java"> public static int getMax(int[] arr) {
int maxElement = arr[0];
for (int x = 0; x < arr.length; x++) {
if (arr[x] > maxElement) {
maxElement = arr[x];
}
}
return maxElement;
}</code></pre>
<p>--------------------------------------------------</p>
<p>获取最大值2</p>
<pre><code class="java"> public static int getMax_2(int[] arr) {
int maxIndex = 0;
for (int x = 0; x < arr.length; x++) {
if (arr[x] > arr[maxIndex]) {
maxIndex = x;
}
}
return arr[maxIndex];
}</code></pre>
<p>--------------------------------------------------</p>
<p>置换</p>
<pre><code class="java"> private static void swap(int[] arr, int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}</code></pre>
<p>--------------------------------------------------</p>
<p>反转</p>
<pre><code class="java"> public static void reverseArray(int[] arr) {
for (int start = 0, end = arr.length - 1; start < end; start++, end--) {
swap(arr, start, end);
}
}</code></pre>
<p>--------------------------------------------------</p>
<p>冒泡排序</p>
<p>基本思路:相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处。依次类推</p>
<pre><code class="java"> public static void bubbleSort(int[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
for (int y = 0; y < arr.length - 1 - x; y++) {
if (arr[y] > arr[y + 1]) {
swap(arr, y, y + 1);
}
}
}
}</code></pre>
<p>--------------------------------------------------</p>
<p>选择排序</p>
<p>基本思路: 把第一个元素依次和后面的所有元素进行比较。 第一次结束后,就会有最小值出现在最面。依次类推</p>
<pre><code class="java"> public static void selectSort(int[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
for (int y = x + 1; y < arr.length; y++) {
if (arr[x] > arr[y]) {
swap(arr, x, y);
}
}
}
}</code></pre>
<p>--------------------------------------------------</p>
<p>选择排序2,记录索引</p>
<pre><code class="java"> public static void selectSort_2(int[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
int num = arr[x];
int index = x;
for (int y = x + 1; y < arr.length; y++) {
if (num > arr[y]) {
num = arr[y];
index = y;
}
}
if (index != x) {
swap(arr, x, index);
}
}
}</code></pre>
<p>--------------------------------------------------</p>
<p>二分查找(折半查找),数组必须有序</p>
<pre><code class="java"> public static int halfSearch(int[] arr, int key) {
int max = arr.length - 1;
int min = 0;
int mid = (max + min) / 2;
while (arr[mid] != key) {
if (key > arr[mid]) {
min = mid + 1;
} else if (key < arr[mid]) {
max = mid - 1;
}
if (max < min) {
return -1;
}
mid = (max + min) / 2;
}
return mid;
}</code></pre>
<p>--------------------------------------------------</p>
<p>二分查找2,数组必须有序</p>
<pre><code class="java"> public static int halfSearch_2(int[] arr, int key) {
int max, min, mid;
min = 0;
max = arr.length - 1;
while (min <= max) {
mid = (min + max) >> 1;
if (key > arr[mid]) {
min = mid + 1;
} else if (key < arr[mid]) {
max = mid - 1;
} else {
return mid;
}
}
return -min - 1;
}</code></pre>
<h2>字符串</h2>
<p>字符串数组置换</p>
<pre><code class="java"> private static void swap(String[] arr, int a, int b) {
String temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}</code></pre>
<p>给定一个字符串数组。按照字典顺序进行从小到大的排序。</p>
<pre><code class="java"> public static void sortString(String[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i].compareTo(arr[j]) > 0) {
swap(arr, i, j);
}
}
}
}</code></pre>
<p>--------------------------------------------------</p>
<p>一个子串在整串中出现的次数。</p>
<pre><code class="java">//"nbaernbatynbauinbaopnba" “nba"
/* 思路:
* 1,要找的子串是否存在,如果存在获取其出现的位置。这个可以使用indexOf完成。
* 2,如果找到了,那么就记录出现的位置并在剩余的字符串中继续查找该子串,
* 而剩余字符串的起始位是出现位置+子串的长度.
* 3,以此类推,通过循环完成查找,如果找不到就是-1,并对每次找到用计数器记录。
*/
//方法一
public static int getKeyStringCount(String str, String key) {
// 定义计数器
int count = 0;
// 定义变量记录key出现的位置
int index = 0;
while ((index = str.indexOf(key)) != -1) {
str = str.substring(index + key.length());
count++;
}
return count;
}
//方法二
public static int getKeyStringCount_2(String str, String key) {
int count = 0;
int index = 0;
while ((index = str.indexOf(key, index)) != -1) {
index = index + key.length();
count++;
}
return count;
}</code></pre>
<p>--------------------------------------------------</p>
<p>两个字符串中最大相同的子串。</p>
<pre><code class="java">/* "qwerabcdtyuiop" "xcabcdvbn"
* 思路: 1,既然取得是最大子串,先看短的那个字符串是否在长的那个字符串中。 如果存在,短的那个字符串就是最大子串。
* 2,如果不是呢,那么就将短的那个子串进行长度递减的方式去子串,去长串中判断是否存在。 如果存在就已找到,就不用在找了。
*/
public static String getMaxSubstring(String s1, String s2) {
String max = null, min = null;
max = (s1.length() > s2.length()) ? s1 : s2;
min = max.equals(s1) ? s2 : s1;
System.out.println("max=" + max);
System.out.println("min=" + min);
for (int i = 0; i < min.length(); i++) {
for (int a = 0, b = min.length() - i; b != min.length() + 1; a++, b++) {
String sub = min.substring(a, b);
// System.out.println(sub);
if (max.contains(sub))
return sub;
}
}
return null;
}</code></pre>
<p>--------------------------------------------------</p>
<p>在一个字符串中,统计出现的整数的个数,连续的数字为一个整数(不考虑负数),字符串中不包含空格。</p>
<pre><code class="java">/**
* a10b20c30de40fg
* 思路:首先要遍历所有的字符,判断每个字符是不是数字,是数字的话就把它放在一个StringBuilder对象
* 里面并标记,下面一个字符要是数字就加在后面,不是数字的话,就把当前的StringBuilder里面的数字
* 塞到list里面,最后判断list长度即可
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
scanner.close();
if (s != null && s.length() != 0) {
List<Integer> list = new ArrayList<Integer>();
StringBuilder sb = new StringBuilder();
boolean isChar = false;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= '0' && c <= '9') {
sb.append(s.charAt(i));
if (i == s.length() - 1) {
list.add(Integer.parseInt(sb.toString()));
sb.setLength(0);
}
isChar = false;
} else {
if (sb.length() > 0 && isChar == false) {
list.add(Integer.parseInt(sb.toString()));
sb.setLength(0);
}
isChar = true;
}
}
System.out.println(list.size());
}
}</code></pre>
<p>如果要是换个问法也是一样的,统计一个字符串中出现整数的和,只需要在下面加入一个遍历list,把所有的数字加一起就好了。</p>
<pre><code class="java">if (list.size() > 0) {
int sum = 0;
for (int i = 0; i < list.size(); i++) {
sum = sum + list.get(i);
}
System.out.println(sum);
}</code></pre>
<p>持续更新……</p>
<p>微信公众号:志哥 (ID: zhige-me) <br>期待与你相遇,一同成长前行!</p>