自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 【React源码分析之一】JSX 转化成JS

我们在开发react 过程中一般都是用JSX, 相当于enhanced JavaScript. 能再JS代码中嵌入HTML.JSX是通过Babel翻译成JS代码的, 可以通过这个Babel playground来看看JSX中的html被翻译成什么JS代码function comp(){}<comp id='id' key='key'> <span>w...

2019-09-18 12:39:29 497

原创 【Javascript】彻底搞懂闭包(closure)和原型(prototype)

首先讲讲为什么会有闭包和原型。Javascript的最初就是一款脚本语言(名字中带scrip就足以说明这一点),用来开发网页,所以语法简洁,没有面向对象语言的概念(多态,继承,封装。。。),甚至没有线程。为了实现多态,继承和封装,我们看看js是如何实现这些OOP特性的。封装封装的概念非常简单,就是将用户不需要知道的数据和方法隐藏起来,外部无法直接访问。在Java中,可以用privat...

2019-07-19 08:51:16 506

原创 【操作系统】进程与线程

为什么会有进程?以前的计算机性能较差,操作系统只支持单任务,也就是一次只能执行一个任务,当这个任务执行完成之后,才能执行下一个任务,例如MSDOS。当该任务进行IO时,CPU会处于空闲状态。随着计算机性能增强,出现了多任务操作系统,操作系统可以将多个任务同时加载到内存中,并发执行。当某个任务进行IO时,操作系统将该任务挂起,切换到其他需要执行任务(通过cpu中断技术实现)。因此,为了方便...

2019-06-26 10:40:17 192

原创 【操作系统】文件系统(一)

Prerequiste: 磁盘的结构和工作原理为什么要引入文件系统?在大容量magnetic disk出现之前,数据和程序都是存储在磁带上,那时还没有文件的概念。当大容量的磁盘出现了以后,需要将数据或者程序存储在磁盘上。如果没有文件,我们只能自己管理数据在磁盘上的位置。例如一个程序或者数据被分成若干个子块,每个子块都分布在磁盘的不同的位置,读取一个数据时,要手动地逐个读取每个子块才能获取...

2019-06-25 12:29:38 329

原创 JS中的this问题

最近在使用react native开发安卓app的过程中,总是遇到this指针所在上下文切换,导致从this中调用对象或者方法时,总是报xxx is undefine, 这是因为JS中的this十分灵活,随着代码执行上下文的不同,this指针所指的当前对象也在不断变化。尤其是下面一种典型情况:在实现Component 的render 方法时,例如我们需要为一个button绑定一个onPress...

2019-05-17 05:25:29 143

原创 【Https原理入门】

将数据加密在进行传输:一种方式:HostA: 文件---------> Rar(加密)------->传输-------->HostB:使用密码进行解压获取文件对称加密和非对称加密:对称秘钥加密:非对称加密: 公开秘钥加密。需要一对秘钥(私钥,公钥)。两个秘钥是数学相关。用某个user的秘钥加密所得的信息,只能用该用户的另一个密钥才能解密。只知道其中一个,并不...

2019-05-16 12:07:33 166

原创 【计算机网络】不同网段内主机如何通信

学习计算机网络如果只是被动的接受知识的话,不但枯燥,效率低下,而且理解也不够深。这里我推荐一款网络仿真软件cisco packet tracer。这款软件最有价值的地方在于用户可以通过软件来模拟真实的网络,能够零成本搭建一套计算机网络。我们可以边学网络边用这个软件来进行仿真,验证所学知识。下载链接:https://www.netacad.com/courses/packet-tracer 学...

2019-04-30 13:55:47 20736

原创 【计算机网络】网络上两台主机是如何通过IP地址和MAC地址进行通信的

互联网上的两台主机HostA和 HostB想要进行通信的流程,那么主机A将需要知道自己的ip,mac 以及主机B的ip, mac。但是主机B的mac地址主机A是不知道的,于是主机A如果将他自己的IP与子网掩码进行 & 与运算得到一个ip1, 然后将主机B的ip与这个子网掩码进行相同运算得到一个ip2, 如果ip1 等于 ip2, 那么此时A与B属于同一子网。否则不属于一个子网。两台主...

2019-04-28 08:22:30 8287

原创 【计算机网络】计算机网络物理层,数据链路层和网络层的理解

对于初学者甚至许多计算机科班出身的同学来说,学习网络和操作系统一样,感觉十分抽象,学完总有一种朦朦胧胧的感觉,因为毕竟对于绝大多数人来说,工作中都不需要接触这些东西。但是作为一个较真的程序员,还是想慢慢深入理解其中的奥秘,这也就是我想边学边写博客的原因,也希望能给初学者一些借鉴。有疏漏之处,请不吝赐教!OSI将计算机网络可以分为七层模型,从底层网上分别是物理层,数据链路层,网络层,... ,应...

2019-04-28 07:41:21 8763 1

原创 【设计模式】Builder建造者模式

需求:当创建某一个对象的时候,必须按照的一定的顺序对成员变量进行初始化,所以为了避免用户在创建的时候打乱这个顺序,就有了Builder设计模式。非常简单有效,这种模式在许多框架中被大量使用。//假设我们在创建MyData对象的时候,需要用按照d1,d2,d3的顺序对它进行初始化public class MyData { private int d1; private i...

2019-04-23 23:21:33 100

原创 【设计模式】一文彻底搞懂装饰器(Decorator)设计模式

网上关于装饰器(decorator)模式的教程很多,但是很少有能讲的很清楚的,所以有了这篇文章。在讲解装饰器模式之前,先看看为什么要使用装饰器模式。假设我们要为一个咖啡馆设计一套下单和结算系统,咖啡管的产品有茶,咖啡,橙汁三种产品,售价分别为5,10,15, 客人可以在饮料中加入一些搭配,比如咖啡可以加奶、加糖,橙汁可以加冰,茶也可以加奶。假设客人需要付费才能加配料。那我们先来思考一下如何...

2019-04-23 22:51:31 305

原创 java 使用管程(monitor) 实现生产者-消费者模式

这是继java 使用synchronized, wait(), notifyAll() 实现生产者-消费者模式的下一篇。让我们先来看看什么是管程。管程的英文叫Monitor, 翻译过来时监视器的意思。为什么要使用管程呢? 之前使用信号量实现了同步互斥,但是信号量有个一个缺点,那就是P操作和V操作很容易搞错,如果一个地方进行了P操作,同步代码块执行完毕后忘记执行V操作,那么很容易引起死锁、饥饿等...

2019-04-23 13:12:16 1682 1

原创 React Native org.gradle.process.internal.ExecException: Process 'command 'node'' finished with non-z

最近被一个react native 的bug搞疯了,具体信息如下:app:bundleReleaseJsAndAssetsorg.gradle.process.internal.ExecException: Process 'command 'node'' finished with non-zero exit value 1结果发现是根目录下的.babelrc文件惹的祸,这个文件b...

2019-04-20 12:22:00 3853

原创 java 实现一个同步的stack

用java 实现了一个线程安全的栈(参考了tomcat源码)public class SynchronizedStack<T> { public static final int DEFAULT_SIZE = 128; private static final int DEFAULT_LIMIT = -1; private int size; ...

2019-04-08 00:02:40 315 1

原创 java 使用信号量Semaphore实现生产者-消费者模式

这是继许上一篇java 使用synchronized, wait(), notifyAll() 实现生产者-消费者模式。信号量Semaphore,跟交通信号等非常类似(Semaphore翻译过来就是信号灯的意思),以下面这幅图为例如果两条铁轨都是空的,那么此时信号灯是绿色(信号量为2),允许火车通行。如果有列车请求通行则放行,同时信号灯变为黄色(信号量减一):当两条铁轨都有列车...

2019-04-03 10:24:01 3045 1

原创 java 使用synchronized, wait(), notifyAll() 实现生产者-消费者模式

对于任何一种模式,在实现之前我们都应该明确这种模式对线程同步及互斥的要求。对于生产者-消费者模式, 我们有如下同步及互斥要求:线程互斥要求生产者之间是互斥的,也即同时只能有一个生产者进行生产 消费者之间是互斥的,也即同时只能有一个消费者进行消费 生产者消费者之间是互斥的,也即生产者消费者不能同时进行生产和消费线程同步要求容器满时,生产者进行等待 容器空是,消费者进行等待有了上述需...

2019-04-02 10:32:44 573

原创 Java 多线程 锁重入的理解

// 锁的重入,synchronized是可重入的public class Demo { public synchronized void a(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(...

2019-04-02 10:04:41 186

原创 彻底搞清楚 java 多线程单例模式(singleton)的双重检查锁

不涉及多线程的情况下实现单例模式是非常简单的,有两种实现方式,Lazy 和 Eager 模式:public class SingletonEager { //Eager模式,当Singleton被ClassLoader加载的时候创建Singleton对象 private static SingletonEager _instance = new SingletonEager(...

2019-04-02 09:43:10 200

原创 用java Thread interrupt的时候为啥会抛出异常

在用java Thread interrupt的时候为啥会抛出异常?```public class Demo1 extends Thread { @Override public void run(){ while (!interrupted()) { try { Thread.sleep(200);...

2019-03-31 12:44:32 878 1

原创 【系统设计】设计一个TinyURL系统

题目:设计一个短连接服务,可以将长链接转换为短连接,也可以通过短连接访问目标网站系统设计的SNAKE 原则:1.Scenario: 使用场景   非常简单,只有两个功能:   (1)长连接转换为短连接:String shortenURL(String longURL)   (2)短连接转化为长连接,能够访问目标网站: String getLongURL(String shortURL)2.Nece...

2018-06-22 18:01:44 895

转载 并查集(union-find)java模板

并查集(union-find)java模板:class UnionFindSet { private int[] parents_; private int[] ranks_; public UnionFindSet(int n) { parents_ = new int[n + 1]; ranks_ = new int[n + 1]; for ...

2018-06-07 19:22:23 860 1

原创 从零开始分析scrapy源码(一)

通过脚本启动爬虫:main.pyfrom scrapy.cmdline import execute #可执行scrapy 脚本import sysimport osmain_path = os.path.abspath(__file__)sys.path.append(os.path.dirname(main_path))execute(["scrapy","crawl","j

2018-01-30 03:46:50 3214 1

原创 在scrapy中使用phantomJS实现异步爬取

使用selenium能够非常方便的获取网页的ajax内容,并且能够模拟用户点击和输入文本等诸多操作,这在使用scrapy爬取网页的过程中非常有用。网上将selenium集成到scrapy的文章很多,但是很少有能够实现异步爬取的,下面这段代码就重写了scrapy的downloader,同时实现了selenium的集成以及异步。使用时需要PhantomJSDownloadHandler添加到配置文件的

2018-01-29 19:24:57 2776 3

原创 【Python】类的属性和方法的参数加不加self的区别

先看一段代码class Test(object): ID = 1 def __init__(self): pass def prtID(self): print(self.ID) def classplusOne(self): Test.ID += 1 def ObjplusOne(

2018-01-21 16:42:26 7459 2

原创 计算机字符编码方式

ASCII 英文编码,用一个字节(0-255)表示英文字符GB2312 汉字编码,用两个字节表示中文汉字,同时兼容英文(多余的部分用0补足)但是其他国家的文字都有自己的编码方式,当不同国家的文字在一起时不能兼容,此时出现了Unicode编码但是Unicode编码在表示英文字符时会浪费一倍的存储空间,又产生了utf8编码,它是一种变长度的编码方式而utf8编码在处理字符时会带来不便,

2017-12-14 18:17:35 939

原创 【python】pycharm 如何快速创建scrapy项目

初学scrapy, 如何在macos中用pycharm创建一个新的scrapy 项目?在网上查了一些资料,大多数都是要从terminal添加环境变量,其实不用那么麻烦。我是用下pycharm中操作的:1. 进入pycharm,点击file>default setting, 在project interpreter 中选择Python3.6(没有的可自行到python官网上下载)2. 点

2017-12-14 14:43:22 14863 5

原创 基于selenium爬取图片并转存到百度网盘

初学python,花了一天时间鼓捣了一个爬虫。#coding=utf-8import requestsfrom bs4 import BeautifulSoupimport reimport stringfrom selenium import webdriverimport timeurlprelix = 'http://www.******.com/'def webcraw

2017-11-30 19:52:57 1263

原创 【设计模式】

模板模式是指在模板中将算法的基本步骤都定义好,每个步骤的具体实现放在子类中去实现,比如泡茶、泡牛奶和泡咖啡的基本步骤都可以分为烧开水、加原料、冲泡,其中加原料这一步的具体实现冲每种饮料都不同,应该放在具体子类中去实现,见代码:#pragma once#includeusing namespace std;class IDrink{public: virtual void fun(

2016-08-13 22:27:02 217

转载 [C/C++]在头文件中使用static定义变量意味着什么

看到有一位同学在头文件中这么写:12static const wchar_t* g_str1 = …static const wchar_t* g_str2 = …这种定义变量的方式我从来没有见过,而且它还能顺利通过编译,于是我很想知道编译器是如何处理这种变量定义的。 定

2016-08-10 21:36:46 311

转载 【c++】浅谈C/C++中的static和extern关键字

一.C语言中的static关键字    在C语言中,static可以用来修饰局部变量,全局变量以及函数。在不同的情况下static的作用不尽相同。    (1)修饰局部变量    一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话,该变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束。但是

2016-08-10 20:12:27 189

原创 【c++】插入法排序

插入法的基本思想是:从第一个元素到第i个元素,假设已经排序好,然后将第i+1个元素按照大小顺序插入前i个元素中。#pragma once#include #include #include "Test.h"#include #includeusing std::cout;using std::endl;void Sort(double* dArr, int nSize){

2016-08-03 00:28:20 594

原创 【c++】在一组数中找出最小值的第二小的值

#pragma once#include #include #include "Test.h"#include #includeusing std::cout;using std::endl;void fun(std::vector& vecT,double& d1, double& d2){ int nSize = (int)vecT.size(); int nIdx1

2016-08-02 21:14:24 3246

原创 【c++】初步探索c++对象模型

#pragma once#include using std::cout;using std::endl;class A{public: //virtual void f1(); //int a;};void main(int argc,char* argv[]){ cout << "sizeof(A):  " << sizeof

2016-07-26 21:53:35 207

原创 【c++】指针和引用实现多态

#include "Test.h"#pragma once#include #include using namespace std;class CBse{public: virtual void f1() { cout << "base" << endl; } void f2() { cout << "f2::base" <<endl; }};cl

2016-07-16 09:18:37 1765

原创 【c++】类的静态成员函数

先看代码#include using namespace std;class A{public: int fun1(int a, int b){return a+ b;}};void main(){ int a = 1 ,b = 0; int c = A::fun1(a,b); cout<< c; system("pause");}

2016-07-14 08:51:02 210

原创 【c++】函数参数传值与传引用的区别

先上代码#include using namespace std;void fun(int a, int b);void main(){ int a = 0 ,b = 0; cout<<&a<<endl; fun(a,b); cout<< a <<" "<<b; system("pause");}void fun(int a,

2016-07-13 09:37:54 711

原创 虚函数的调用

头文件class A{public: virtual void f1(); void f2();};class B : public A{public: virtual void f1();};源文件#include "123.h"#include void A::f1(){ std::cout << "A::f1()\n";}void A:

2016-06-15 21:44:40 217

原创 MFC消息机制的具体实现方法

在每个能接收盒处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否有含有该消息,就可知道能否处理此消息。如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。

2016-06-09 09:35:56 234

转载 extern "c"用法解析

引言C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,

2016-03-08 09:18:02 182

转载 【C++】静态成员函数小结

类中的静态成员真是个让人爱恨交加的特性。我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。 静态类成员包括静态数据成员和静态函数成员两部分。 一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数

2015-12-14 15:01:41 264

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除