Xudong's Blog

Xudong's Blog

Echo always arises.

Python3中的Iterator与Iterable
今天教Cc学python3的时候说到了for in语法只可以作用于iterable上,她说这个单词一看就是写错了。很长时间没碰python这都搞错?心想这下出糗了,赶忙查了查,python里确实有iterable。凡是可作用于for循环的对象都是Iterable类型也是没错的。但是却发现,我对iterable和iterator的概念有些模糊。 定义Iterator An object representing a stream of data. Python Glossary - Iterator 我们可以从Python官方的文档中了解到,Iterator - 迭代器 这个术语在pyt...
Rss订阅源分享
说在前面现在,你获取新闻的方式是什么呢?我觉得现在应该很少有人单纯地使用浏览器访问新闻门户来看新闻了。今日头条、网易新闻、腾讯新闻这样的新闻App,微信、微博这种社交应用中附加的新闻资讯,甚至各大国内厂商的浏览器,都成为了大众的新闻获取源。但是,这些App都免不了花里胡哨(乱七八糟)的UI,或者我觉得新闻来源受到监管也比较有限,或者我不喜欢根据阅读行为推送的广告。 优秀的聚合类应用相对来说就自由许多,国外如Flipboard,国内如Zaker,这些都是我曾经长时间使用的新闻聚合App,其实长时间使用体验都不错。但是总觉得有时候缺了些什么感觉,这几天,Rss又被我捡了回来,折腾了一番源,现...
Git Tips
作为强大的版本管理工具,基本的Git命令几乎是每个程序员都应该掌握的。在实际使用中,在紧急的关口,我们需要祭出这个神奇的时间机器,却突然根本不记得Git的不常见命令,这种尴尬时刻可能很多人都遇到过。查官方文档固然是一个好办法,不过下面的一些tips可能会帮你节省一些时间。 使用Git回溯到之前的commit当你修改了一个配置文件,发现项目启动失败。当你重构了一些代码,发现程序出现bug。当你…。总是不管出现什么问题,你过去几个小时的努力可能要白费了,你想让一切恢复原状,那么就需要回溯到之前某一个正常的commit。 123456git reflogf8fd780 (HEAD -> ...
Redis的数据库与持久化
Redis服务器中的数据库Redis服务器中有数据库这么一个概念。如果不指定具体的数量,默认会有16个数据库。 通过SELECT命令可以切换到0~15的数据库 上面的命令我们也可以发现:mykey存进0号库的数据,再切换到1号数据库时,是获取不到的! 这说明,数据库与数据库之间的数据是隔离的。 Redis数据库的原理Redis服务器用redisServer结构体来表示,其中redisDb是一个数组,用来保存所有的数据库,dbnum代表数据库的数量(这个可以配置,默认是16) 123456789struct redisServer{ //redisDb数组,表示服务器...
Redis中的数据结构
Redis 命令参考try Redis(不用安装Redis即可体验Redis命令 Redis支持丰富的数据结构,常用的有string、list、hash、set、sortset。 “Redis is written in ANSI C” – Redis由C语言编写 Redis的存储是以key-value的形式的。Redis中的key一定是字符串,value可以是string、list、hash、set、sortset这几种常用的。 但要值得注意的是:Redis并没有直接使用这些数据结构来实现key-value数据库,而是基于这些数据结构创建了一个对象系统。 简单来说:Redis使用...
控制反转与依赖注入
什么是控制反转控制反转(Inversion of Control, 缩写IoC),是一种面向对象的设计原则。从字面上理解,就是让控制权从类本身移交给其他类。那么是哪些控制权被反转了?答案是:“依赖对象的创建”这个控制权被移交了。移交给谁了?答案是:IoC容器。 这样做带来的好处就是降低代码之间的耦合度,业务代码的对于底层类的依赖被降低后,底层实现就可以更容易地改变,业务代码也更容易被复用。 很多人都说控制反转可以用好莱坞规则来描述 “Don’t call us, we will call you.”。我们自己不需要自己创建依赖对象,IoC容器会帮我创建。 什么是依赖注入依赖注入(Depe...
Vim命令笔记
命令历史以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。 启动vim在命令行窗口中输入以下命令均可 123$ vim$ vi$ view $ vim filename 打开vim并创建名为filename的文件 文件命令 命令 Note $ vim file 打开单个文件 $ vim file1 file2 file3 … 同时打开多个文件 :open file 在vim窗口中打开一个新文件 :split file 在新窗口中打开文件 :bn 切换到下一个文件 :bp 切换到上一个文件 :args 查看当前打开的文件...
Java中的equals和hashCode方法
equals()java中处处是对象。所有类都继承自Object基类,Object基类拥有一个equals()方法。所以无论是继承自Object,还是override了基类的,所有类都拥有equals()方法。 123public boolean equals(Object obj) { return (this == obj);} 上面是Object类的equals()方法,很简单,使用了 == 比较了两个对象。而 == 是java中的运算符,用在两个对象的引用之间时,作用是比较两个对象的地址。所以那个类如果没有override这个方法,在其对象上使用equa...
Java中对象域的初始化
正确的初始化很重要java中,一个类的域(或者说类的属性,类的数据成员)可以是基本数据类型,也可以是对象的引用。对象域如果没有被初始化,会被置为null,如果在置为null的引用上调用方法,我们就会得到一个运行时错误。在恰当的时间,恰当的位置,正确地初始化对象域是很重要的。 初始化的位置java中可以在四个位置进行类的对象域初始化: 在域定义时初始化 在类构造器中初始化 在使用类中的对象域之前手动初始化(这被称作懒惰初始化) 使用实例初始化块 要注意上面列出的顺序并不是这些位置初始化的时间顺序。我们经常能看到的初始化方式是1和2。 当然,我们不能忘了一个特殊的存在:静态成员。如果一...
Java中的基本类型和自动装拆箱
基本数据类型及包装类Java中的基本数据类型有byte、short、int、long、float、double、boolean、char。这几个类型都有其对应的包装类,表格中清晰展示了它们对应的包装类: 简单类型 二进制位数 封装类 boolean 1 Boolean byte 8 Byte char 16 Character short 16 Short int 32 Integer long 64 Long float 32 Float doubel 64 Double void – Void 对于数值类型的基本类型的取值范围,以常...
Xudong Sun
FRIENDS
Cc TPC Triplan