<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[txx_laughing的博客]]></title><description><![CDATA[你看到的永远只是天空的一角]]></description><link>https://blog.youkuaiyun.com/ttx_laughing</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ttx_laughing]]></copyright><item><title><![CDATA[JS内存管理]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/106282594</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/106282594</guid><author>ttx_laughing</author><pubDate>Fri, 22 May 2020 16:19:39 +0800</pubDate><description><![CDATA[内存分配

32位操作系统给V8执行引擎分配的内存空间是700Mb；
64位操作系统给V8执行引擎分配的内存空间是1.4Gb
JS把内存空间分为栈，堆和池（也叫栈中）

栈（stack）

主要用于存储JS中的基本数据类型，包括Boolean、Number、String、undefined、null，以及引用类型的指针。栈是一个线性排列的内存空间，存储的内容都是空间大小已知或者有有范围上限的，如基本类型的值、堆内存空间块的起始地址等，算作一种简单存储。

特点：

内存空间由系统自动分配和自动释放；
线性存]]></description><category></category></item><item><title><![CDATA[H5移动端适配方案]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/105657341</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/105657341</guid><author>ttx_laughing</author><pubDate>Tue, 21 Apr 2020 14:24:29 +0800</pubDate><description><![CDATA[在讨论适配方案之前，先熟悉几个概念：

设备像素/物理像素：设备实际物理像素点，是显示设备中一个最微小的物理部件，每个像素可以根据操作系统设置自己的颜色和亮度。任何设备的物理像素的数量都是固定的。例如（iphone6 750 * 1337） （iphone6plus 1960 * 1080）。注意：设备像素不等于CSS像素


像素密度：屏幕上每英寸可以显示的像素点的数量，单位是PPI


屏幕分...]]></description><category></category></item><item><title><![CDATA[React diff 算法 & Virtual DOM]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/105117307</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/105117307</guid><author>ttx_laughing</author><pubDate>Thu, 26 Mar 2020 13:54:47 +0800</pubDate><description><![CDATA[将Virtual DOM（虚拟Dom）树转换成Actual DOM（真实Dom）树的最少操作的过程，叫作调和。diff算法是调和的具体实现，将O(n^3)复杂度 转化为 O(n)复杂度。
diff算法原则：

分层同级比较，不跨层比较；
相同的组件生成的DOM结构类似；
分组内的同级节点通过唯一的id进行区分（key）

不同类型节点比较
逐层比较，不同类型节点直接替换，组件经历unmount，m...]]></description><category></category></item><item><title><![CDATA[npm / cnpm / yarn]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/104914709</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/104914709</guid><author>ttx_laughing</author><pubDate>Tue, 17 Mar 2020 09:37:01 +0800</pubDate><description><![CDATA[npm
官网[https://www.npmjs.com/]
常用命令
## 1，初始化npm包
$ npm init

## 2，安装node依赖
$ npm install
//简写：npm i

## 3，安装插件
$ npm install 包名@版本号 [-g/--save/--dev/--save-dev]
//-g表示全局安装，默认安装在当前目录
//--save表示安装在生产环境（...]]></description><category></category></item><item><title><![CDATA[快速搭建node服务]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/104914675</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/104914675</guid><author>ttx_laughing</author><pubDate>Tue, 17 Mar 2020 09:35:17 +0800</pubDate><description><![CDATA[Express搭建web服务器

安装express和express应用生成器

$ mkdir webServer
$ cd webServer
$ cnpm install express --save
$ cnpm install express-generator -g


初始化项目

$ express -e server
//-e 表示采用ejs模板引擎


安装依赖并启动服务

$...]]></description><category></category></item><item><title><![CDATA[axios / fetch / ajax]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/104914631</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/104914631</guid><author>ttx_laughing</author><pubDate>Tue, 17 Mar 2020 09:33:30 +0800</pubDate><description><![CDATA[ajax
传统 Ajax 指的是 XMLHttpRequest（XHR）， 最早出现的发送后端请求技术，隶属于原始js中，核心使用XMLHttpRequest对象，多个请求之间如果有先后关系的话，就会出现回调地狱。最常用的是jquery的ajax api，对原生XHR请求的封装，添加了对JSONP的支持。
$.ajax({
   type: 'POST',
   url: url,
   data...]]></description><category></category></item><item><title><![CDATA[jQuery的defer对象]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/78507512</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/78507512</guid><author>ttx_laughing</author><pubDate>Sat, 11 Nov 2017 17:12:14 +0800</pubDate><description><![CDATA[jQuery的deferred对象详解
一、什么是deferred对象？开发网站的过程中，我们经常遇到某些耗时很长的javascript操作。其中，既有异步的操作（比如ajax读取服务器数据），也有同步的操作（比如遍历一个大型数组），它们都不是立即能得到结果的。通常的做法是，为它们指定回调函数（callback）。即事先规定，一旦它们运行结束，应该调用哪些函数。但是，在回调函数方面，jQuery的功]]></description><category></category></item><item><title><![CDATA[JavaScript 匿名函数自调]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/78503344</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/78503344</guid><author>ttx_laughing</author><pubDate>Fri, 10 Nov 2017 21:02:43 +0800</pubDate><description><![CDATA[我们知道一个HTML文件在被加载的时候是从根标签html依次往下的，在遇到link，script等标签引入的外部资源时，下载外部资源，并执行外部资源。在js中，表达式会被立即执行，也就是说，不管是引入的外部js文件还是嵌入在html文件中的js脚本，其中的表达式都会被立即执行。 
函数名是一个指向函数的指针。在JavaScript中，定义函数有常见的两种形式：函数声明和函数直接量（或者叫函数表达式）]]></description><category></category></item><item><title><![CDATA[JavaScript this指针]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/78502722</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/78502722</guid><author>ttx_laughing</author><pubDate>Fri, 10 Nov 2017 19:32:25 +0800</pubDate><description><![CDATA[this指针，在Java EE等开发语言中叫做“上下文对象”，但是在JavaScript中情况完全不同，不能把Java EE中对this的理解带到JavaScript中来。 
言归正传，在JavaScript中，this代表函数运行时，自动生成的一个内部对象，只能在函数内部使用。也就是说this跟函数的声明没有任何关系，只有在函数或者方法被调用时才知道this的值。this关键字会根据环境变化，但是]]></description><category></category></item><item><title><![CDATA[javaweb国际化]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/78303206</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/78303206</guid><author>ttx_laughing</author><pubDate>Sat, 21 Oct 2017 14:04:14 +0800</pubDate><description><![CDATA[软件开发国际化是一个很常规的需求，实现国际化的方法也比较多，比如前端国际化方法jQuery.i18n.properties，现在介绍采用ResourceBundle和Local对象实现Javaweb国际化。 
ResourceBundle是一个资源包，包含不同区域（Local）的资源集合，只要向ResouceBundle提供一个特定的Locale对象，ResouceBundle就会把相应的资源返回给]]></description><category></category></item><item><title><![CDATA[js闭包]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/78283904</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/78283904</guid><author>ttx_laughing</author><pubDate>Thu, 19 Oct 2017 13:49:22 +0800</pubDate><description><![CDATA[闭包是JavaScript中的一个难点，比较难理解。在讨论闭包之前先明确几个概念： 
1、作用域：顾名思义，函数（对象）的可访问范围 
2、执行环境：函数被调用时创建，并被推入环境栈中；函数执行完成，弹出该执行环境，把控制权返回给上一层执行环境。全局执行环境是window 
3、变量对象：与执行环境一一对应，执行环境中的变量和函数保存在变量对象中，函数的变量对象叫活动对象 
4、作用域链：各执行环境]]></description><category></category></item><item><title><![CDATA[JavaScript对象创建与继承总结]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/78276509</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/78276509</guid><author>ttx_laughing</author><pubDate>Wed, 18 Oct 2017 19:13:56 +0800</pubDate><description><![CDATA[JavaScript中的每个元素都是一个对象，都继承自Object对象，因此可以说Object是JavaScript的根对象。首先说说JavaScript中创建对象的几种常见方式： 
1、对象字面量创建对象，如：var myObject = {
    name: '张三',
    sex: '男',
    age: 25
}
//等价于 
var myObject = new Object()]]></description><category></category></item><item><title><![CDATA[关于JavaScript中的构造函数和对象中的构造属性]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/78253119</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/78253119</guid><author>ttx_laughing</author><pubDate>Mon, 16 Oct 2017 19:22:49 +0800</pubDate><description><![CDATA[JavaScript和面向对象语言（例Java）一样，在创建对象都是通过调用构造函数，但是又与面向对象语言有所区别。初学JavaScript时，总把函数的构造属性和对象的构造属性弄混淆，总结下面几点。 
1、constructor属性始终指向创建当前对象的构造函数1 // 等价于 var foo = new Array(1, 56, 34, 12);  
2 var arr = [1, 56, 34]]></description><category></category></item><item><title><![CDATA[加载并解析XML DOM]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/73655552</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/73655552</guid><author>ttx_laughing</author><pubDate>Fri, 23 Jun 2017 19:22:33 +0800</pubDate><description><![CDATA[前端开发中经常会遇见浏览器兼容性问题，为此，在写业务逻辑之前进行浏览器类型判断很有必要，下面给出几种常用游览器判断：function isIE() {
    if(navigator.userAgent.indexOf("MSIE") > 0 || (navigator.userAgent.toLowerCase().indexOf("trident") > -1 && navigator.use]]></description><category></category></item><item><title><![CDATA[jsonp解决跨域访问受限问题]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/73649230</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/73649230</guid><author>ttx_laughing</author><pubDate>Fri, 23 Jun 2017 16:03:00 +0800</pubDate><description><![CDATA[json和jsonp是两个很容易混淆的概念，再介绍跨域访问之前简单介绍一下这两个概念吧。 
1、json是一种应用广泛，而且很简单的数据描述格式，或者说是规则。 
优点：1、基于纯文本，跨平台传递极其简单； 
        2、JavaScript原生支持，后台语言几乎全部支持； 
        3、轻量级数据格式，占用字符数量极少，特别适合互联网传递； 
        4、容易编写和解析，当]]></description><category></category></item><item><title><![CDATA[websocket与Java实例]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/70854579</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/70854579</guid><author>ttx_laughing</author><pubDate>Thu, 27 Apr 2017 14:56:25 +0800</pubDate><description><![CDATA[websocket是H5里新增的一种技术，主要用于web客户端与服务端之间建立双工通信通道，进行实时消息传输。在websocket之前，web客户端与服务器之间传递消息都是基于HTTP协议，总所周知，HTTP是一种无状态的协议，web客户端与服务端传递消息必须由客户端主动request，然后服务端返回response结果，服务端无法主动推送消息给客户端。为此，出现了轮询（polling）和Comet]]></description><category></category></item><item><title><![CDATA[Log4J使用]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/70633824</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/70633824</guid><author>ttx_laughing</author><pubDate>Mon, 24 Apr 2017 18:01:30 +0800</pubDate><description><![CDATA[一、Log4j介绍 
Log4j中有三个主要的组件，它们分别是 Logger、Appender和Layout 
Logger：日志记录器，设置日志的类型（优先级），Appender的名字，一个logger可以设置多个Appender； 
Appender：日志信息的输出目的地； 
Layout：日志信息的输出格式；二、Log4j的配置 
Log4j配置可以在Java代码中配置，也可以采用配置文件，一]]></description><category></category></item><item><title><![CDATA[synchronized 与 Lock区别]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/62430273</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/62430273</guid><author>ttx_laughing</author><pubDate>Thu, 16 Mar 2017 17:54:39 +0800</pubDate><description><![CDATA[在上一篇文章中，我们谈到了采用synchronized来实现多线程同步，在Java中还一种实现多线程同步的方法，那就是Lock。下面主要谈谈这两种多线程同步的区别。 
1、synchronized是在JVM层面实现的，系统可以监控锁的释放与否。 
2、ReentrantLock使用代码实现的，系统无法自动释放锁，需要在代码中finally子句中显式释放锁lock.unlock()。 
3、相对于sy]]></description><category></category></item><item><title><![CDATA[synchronized同步锁]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/62428560</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/62428560</guid><author>ttx_laughing</author><pubDate>Thu, 16 Mar 2017 17:18:22 +0800</pubDate><description><![CDATA[synchronized是Java中的关键字，是一种同步锁。它修饰的对象有以下几种： 
1. 修饰一个代码块，被修饰的代码块称为同步语句块，其作用的范围是大括号{}括起来的代码，作用的对象是调用这个代码块的对象； 
2. 修饰一个方法，被修饰的方法称为同步方法，其作用的范围是整个方法，作用的对象是调用这个方法的对象； 
3. 修改一个静态的方法，其作用的范围是整个静态方法，作用的对象是这个类的所有对]]></description><category></category></item><item><title><![CDATA[Hibernate操作数据库总结]]></title><link>https://blog.youkuaiyun.com/ttx_laughing/article/details/61922878</link><guid>https://blog.youkuaiyun.com/ttx_laughing/article/details/61922878</guid><author>ttx_laughing</author><pubDate>Mon, 13 Mar 2017 17:39:00 +0800</pubDate><description><![CDATA[初次使用Hibernate框架的时候，只知道用HQL和原生SQL操作数据库，后来发现竟然还有几种更方便的方法，在此做个总结。 
1、使用HQL语句和Query接口，HQL语句语法是：select c from Cat c where … 
其中Cat是一个实体类，c是实体类对象，查询类对象属性，用“.”。如果存在不同包中有同名类，则必须指明包，如com.hibernate.entity.Cat，HQ]]></description><category></category></item></channel></rss>