无聊的知识点之设计模式
参考自:
https://github.com/CyC2018/CS-Notes/blob/master/notes/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%20-%20%E7%9B%AE%E5%BD%95.md
https://github.com/weilanhanf/python-design-patterns
https://www.runoob.com/design-pattern/design-pattern-tutorial.html
面向对象设计的 SOLID 原则
单一责任原则(Single Responsibility Principle, SRP):一个类或者一个方法只做一件事。
开放封闭原则(Open Closed Principle, OCP):对扩展开放,对修改关闭。换言之,一个类独立之后就不应该去修改它,而是以扩展的方式适应新需求。
里氏替换原则(Liskov Substitution Principle, LSP):所有基类出现的地方都可以用派生类替换而不会程序产生错误。
依赖倒置原则(Dependency In ...
无聊的知识点之 Java
基础JVM、JDK、JRE
JVM:Java Virtual Machine。javac把.java文件(源代码)编译成.class文件(字节码),JVM加载字节码文件,然后通过解释器逐行解释执行,所以Java是编译与解释并存的。JIT(Just In Time)编译器是可选功能,属于运行时编译,第一次编译后会把字节码对应的机器码保存下来,下次直接使用,因此比Java解释器效率高。JDK9 引入了一种新的编译模式 AOT,直接将字节码编译成机器码,避免了 JIT 预热等各方面的开销,但编译质量不如JIT。
JDK:Java Development Kit。包含 JRE 所拥有的一切,还有编译器(javac)和其他工具(如javadoc 和 jdb),它能够创建和编译程序。
JRE:Java Runtime Environment。包含运行已编译 Java 程序所需的所有内容,如JVM,Java 类库,java 命令等,但它不能用于创建新程序。
泛型
泛型(Generics):泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。如果使用Object来实现参数的任意化,就需 ...
无聊的知识点之系统
操作系统什么是操作系统?
是管理计算机硬件与软件资源的程序。
本质上是运行在计算机上的软件。
为用户提供一个与系统交互的操作界面。
分为内核与外壳,内核程序负责操作硬件,管理系统的进程、内存、设备驱动程序、文件和网络系统等
进程、线程和协程
进程是资源分配的最小单位,线程是CPU调度的最小单位。
线程必须在进程下行进,一个进程可以包含多个线程。
线程之间数据容易共享,进程之间数据不容易共享,需要复杂的IPC技术。
进程维护静态资源,如地址空间、打开的文件句柄集、文件系统状态、信号处理handler等。线程维护动态资源,如运行栈、调度相关的控制信息、待处理的信号集等。
线程轻量级,进程重量级。进程的创建和删除都需要系统调度资源,系统开销大。
单核只能并发,多核和多cpu可以并行,区别在于多个任务是否同时运行。线程只支持多核,进程还支持多cpu。
进程间不会相互影响,一个线程挂掉将导致整个进程挂掉,因为线程错误一般都是内存错误,当一个线程向非法地址读取或者写入,无法确认这个操作是否会影响同一进程中的其它线程,所以只能让整个进程一起挂掉。
协程比线程更轻量级,协程不由系统内核管理,而是完 ...
Anaconda中关于Qt的bug
先安装了anaconda,可以使用。之后使用conda命令安装了Orange,由于Orange会安装Qt,可能会导致与anaconda自带的Qt冲突,然后我惊喜的发现anaconda-navigator打不开了,报出以下错误:
Traceback (most recent call last): File "/home/shiva/anaconda3/bin/anaconda-navigator", line 4, in <module> import anaconda_navigator.app.main File "/home/shiva/anaconda3/lib/python3.5/site-packages/anaconda_navigator/app/main.py", line 21, in <module> from anaconda_navigator ...
Ubuntu下安装scrapy遇到的问题及解决过程
在使用 pip install scrapy 来安装scrapy时,遇到以下输出:
Collecting cffi>=1.4.1 (from cryptography>=1.3.4->pyOpenSSL->scrapy) Downloading cffi-1.8.3-cp27-cp27mu-manylinux1_x86_64.whl (386kB) 100% |████████████████████████████████| 389kB 454kB/s Collecting pycparser (from cffi>=1.4.1->cryptography>=1.3.4->pyOpenSSL->scrapy) Downloading pycparser-2.14.tar.gz (223kB) 100% |████████████████████████████████| 225kB 609kB/s Building wheels for collected ...
解决安装rails时出现 ERROR:Failed to build gem native extension. 的问题
执行 gem install rails 时出现了错误,错误信息如下:
Fetching: pkg-config-1.1.7.gem (100%)Successfully installed pkg-config-1.1.7Fetching: nokogiri-1.6.8.gem (100%)Building native extensions. This could take a while...ERROR: Error installing rails: ERROR: Failed to build gem native extension. current directory: /var/lib/gems/2.3.0/gems/nokogiri-1.6.8/ext/nokogiri/usr/bin/ruby2.3 -r ./siteconf20161003-4423-1bf9irh.rb extconf.rbUsing pkg-config versi ...