深复制和浅复制
在面向对象的编程中,经常会遇到对象的克隆,如果不理解深复制和浅复制(深拷贝和浅拷贝)的概念,你的代码就可能出现一些问题。
我们知道,对象是由一系列key,value的元素组成,不同的编程语言中,key,value的数据类型划分不太一样,有些语言所有数据都是对象,如python,有些则有其它的划分。但是基于数据或者对象的存储方式,基本可以把数据类型划分为值类型和引用类型。一般值类型的数据是存储在栈内存中,引用类型的数据是存放在堆内存中,如下图:
…阅读更多>>
在面向对象的编程中,经常会遇到对象的克隆,如果不理解深复制和浅复制(深拷贝和浅拷贝)的概念,你的代码就可能出现一些问题。
我们知道,对象是由一系列key,value的元素组成,不同的编程语言中,key,value的数据类型划分不太一样,有些语言所有数据都是对象,如python,有些则有其它的划分。但是基于数据或者对象的存储方式,基本可以把数据类型划分为值类型和引用类型。一般值类型的数据是存储在栈内存中,引用类型的数据是存放在堆内存中,如下图:
…阅读更多>>
一些浏览器在设置代理的时候,有多个选项,包括HTTP代理,HTTPS代理,FTP代理,SOCKS代理等。它们之间有什么区别呢?为了寻找它们之间的区别,我专门做了个实验,用nginx搭建了HTTP和HTTPS代理服务器,并在chrome上设置不同的代理浏览网站。
…阅读更多>>
一个项目的需求:前台的留言表单中基于用户的输入,有两种不同情况的提交方式,一种是当前页面,另外一种是弹出另外一个页面,通过JS控制表单的target属性即可实现。为了保证良好的客户体验,通过当前页面跳转提交成功后,会返回上一页,通过弹出方式提交的结果会在展示之后关闭。于是我想到了最简单的方式,在目标页面加上了”<script>window.history.go(-1)||window.close()</script>”这一段代码,经过简单测试,发现效果良好,功能上完全能够满足要求。
…阅读更多>>
事件是javascript的客户端编程中很常见,常见的事件有click,mouseover,mouseenter,keyup,focus等只要接触到事件,相信事件冒泡和事件捕获这两个概念都或多或少的听说过,那么它们到底有什么区别呢?先看一下事件冒泡:
当事件在某一DOM元素被触发时,例如用户在客户名字节点上点击鼠标,事件将跟随着该节点继承自的各个父节点冒泡穿过整个的DOM节点层次,直到它遇到依附有该事件类型处理器的节点,此时,该事件是onclick。
在上一篇文章《HTML中动态生成内容的事件绑定问题》中,我们讲到了事件冒泡这个问题,简单来说,就是子元素绑定的事件,会逐级冒泡到父元素,当它的一个或多个父元素上绑定有相同事件时,相应的事件处理函数会被触发。
…阅读更多>>
由于实际的需要,有时需要往网页中动态的插入HTML内容,并在插入的节点中绑定事件处理函数。我们知道,用Javascript向HTML文档中插入内容,有两种方法,一种是在写HTML代码写入JS,然后插入到文档中;另外一种是通过ajax的方式,从服务器获取数据,然后用js把获取的数据经过处理后插入文档中;两种方法各有特点,本文将分析新插入到文档中的元素的事件绑定问题,并假定新插入的对象不做内联的事件绑定(即不用类似 <a onclick=””>的形式)。所有的示例将会用到jQuery和原生Javascript。
…阅读更多>>
在程序猿的世界中,线程和进程是一个很重要的概念,很多人经常弄不清线程和进程到底是什么,有什么区别,本文试图来解释一下线程和进程。首先来看一下概念:
进程(英语:process),是计算机中已运行程序的实体。进程为曾经是分时系统的基本运作单位。在面向进程设计的系统(如早期的UNIX,Linux 2.4及更早的版本)中,进程是程序的基本执行实体;在面向线程设计的系统(如当代多数操作系统、Linux 2.6及更新的版本)中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。–维基百科
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。–维基百科