<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Updating!]]></title><description><![CDATA[奋斗之人]]></description><link>https://blog.youkuaiyun.com/qq_25560423</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_25560423]]></copyright><item><title><![CDATA[Redis使用单线程的原因]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/98797766</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/98797766</guid><author>qq_25560423</author><pubDate>Wed, 07 Aug 2019 23:45:55 +0800</pubDate><description><![CDATA[单线程指的是网络请求模块使用了一个线程（所以不需考虑并发安全性），即一个线程处理所有网络请求，其他模块仍用了多个线程。
Redis快的主要原因是：
1绝大部分请求是纯粹的内存操作（非常快速）
2数据结构简单，对数据操作也简单
3采用单线程,避免了不必要的上下文切换和竞争条件
4非阻塞IO - IO多路复用
IO多路复用：
多路 I/O 复用模型是利用select、poll、epoll可以同时监察多...]]></description><category></category></item><item><title><![CDATA[twemproxy-内存管理机制]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/89084938</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/89084938</guid><author>qq_25560423</author><pubDate>Mon, 08 Apr 2019 11:38:32 +0800</pubDate><description><![CDATA[官方对内存管理方面介绍如下：
在twemproxy中，请求进入和响应输出的所有内存都在mbuf中进行分配。mbuf启用零拷贝，因为客户端接收请求使用到的内存结构，后端服务器可以复用。同样，从服务器端接收响应时使用的mbuf，也可在客户端复用。
此外，使用重用池管理mbuf的内存。这就是说：一旦分配了mbuf，它就不会被释放，而只是重新进入重用池。默认情况下，每个mbuf块的大小设置为16K。在mb...]]></description><category></category></item><item><title><![CDATA[内核-strcpy]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/89084824</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/89084824</guid><author>qq_25560423</author><pubDate>Mon, 08 Apr 2019 11:34:20 +0800</pubDate><description><![CDATA[看libc里面实现的strcpy
说明一下,这个libc代码的来源貌似比较复杂,有来自BSD的,有来自GNU,还有一些其他的
#define UNALIGNED(x,y) (((unsigned long)x &amp; (sizeof (unsigned long)-1)) ^ ((unsigned long)y &amp; (sizeof (unsigned long)-1)))
#defin...]]></description><category></category></item><item><title><![CDATA[read()]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/89084799</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/89084799</guid><author>qq_25560423</author><pubDate>Mon, 08 Apr 2019 11:33:03 +0800</pubDate><description><![CDATA[read函数在用户空间是由read系统调用实现的，由编译器编译成软中断int 0x80来进入内核空间，然后在中端门上进入函数sys_read，从而进入内核空间执行read操作。
sys_read函数定义在fs/read_write.c文件，定义如下
asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t cou...]]></description><category></category></item><item><title><![CDATA[linux内核相关-c字符数组底层处理]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/89084757</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/89084757</guid><author>qq_25560423</author><pubDate>Mon, 08 Apr 2019 11:31:30 +0800</pubDate><description><![CDATA[C语言中字符串结束符’\0’
本质
‘\0’就是8位的00000000，因为字符类型中并没有对应的这个字符，所以这么写。’\0’就是 字符串结束标志。
'\0’是转义字符，意思是告诉编译器，这不是字符0，而是空字符。空字符\0对应的二进制为00000000，而数字0为00110000
原来，在C语言中没有专门的字符串变量，通常用一个字符数组来存放一个字符串。字符串总是以’\0’作为串的结束符。因此...]]></description><category></category></item><item><title><![CDATA[twemproxy源码解析-前言：特性简介]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/88868416</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/88868416</guid><author>qq_25560423</author><pubDate>Thu, 28 Mar 2019 14:29:33 +0800</pubDate><description><![CDATA[下面是twemproxy的特性 后面根据这些特性做一些讲解:

1.Fast，即快速，据测试，直连twenproxy和直连redis相比几乎没有性能损失，这已经很逆天了，最重要的是他还没有进行读写分离就能达到这样的效果，确实fast
2.Lightweight，即轻量级，就我个人而言，它代码量就是轻量级的，解压后仅仅1.8MB!!!因为透明连接池，内存零拷贝以及epoll模型的使用，使得它足够快速...]]></description><category></category></item><item><title><![CDATA[twemproxy源码解析2 部分数据结构定义]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/88852618</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/88852618</guid><author>qq_25560423</author><pubDate>Wed, 27 Mar 2019 18:55:18 +0800</pubDate><description><![CDATA[在nc_mbuf.h里
struct mbuf {
    uint32_t           magic;   /* mbuf magic (const) 这个值不是很理解是什么意思，一般是0xdeadbeef*/
    STAILQ_ENTRY(mbuf) next;    /* next mbuf 下一块mbuf，代码里所有的mbuf几乎都是以单向链表的形式存储的*/
    uint8...]]></description><category></category></item><item><title><![CDATA[twemproxy源码解析1  源码文件总体简介]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/88852506</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/88852506</guid><author>qq_25560423</author><pubDate>Wed, 27 Mar 2019 18:49:29 +0800</pubDate><description><![CDATA[src/nc.c文件 是程序入口main函数所在，下面我给各个函数加了注释
int
main(int argc, char **argv)
{
    rstatus_t status; //rstatus_t 返回类型
    struct instance nci;//nc实例

    nc_set_default_options(&amp;nci); //为nc实例设置一些默认的参数属性值...]]></description><category></category></item><item><title><![CDATA[MySQL去重语句]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/86180679</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/86180679</guid><author>qq_25560423</author><pubDate>Wed, 09 Jan 2019 21:24:52 +0800</pubDate><description><![CDATA[按照某个键值将最小ID创建新表储存：
create table tmp_table as select min(id) from wp_posts group by post_title;

然后将储存在tmp中的id与原表对照，将原表中不存在与tmp中的id删除：
delete from wp_posts where id not in (select * from tmp_table);


...]]></description><category></category></item><item><title><![CDATA[新SQLAdvisor sql索引审核]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/85166498</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/85166498</guid><author>qq_25560423</author><pubDate>Fri, 21 Dec 2018 17:48:59 +0800</pubDate><description><![CDATA[https://github.com/nwsuafzq/SQLAdvisor 修复了部分bug；

因为美团团队不对其进行维护了，现在准备寻找有识之士一起维护，详情加群

]]></description><category></category></item><item><title><![CDATA[ajax post包含分号;带来的问题]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/83789253</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/83789253</guid><author>qq_25560423</author><pubDate>Tue, 06 Nov 2018 16:15:41 +0800</pubDate><description><![CDATA[前段时间在做无刷新提交评论时，遇到一个怪怪的问题一直无法解决，其实这个问题看起来很小，也就是在提交评论时，如果评论内容里面包括有;(分号) 时，哪么分号后面的内容将会无故的丢失。
我当时的写法：
$.ajax({
url: ‘/user/post/comment/add/’,
type: Componsents.Settings.AJAX_TYPE,
data:‘id=’ + Post.setti...]]></description><category></category></item><item><title><![CDATA[Android Studio运行app时提示Please select Android SDK]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/79986470</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/79986470</guid><author>qq_25560423</author><pubDate>Wed, 18 Apr 2018 11:24:44 +0800</pubDate><description><![CDATA[从github clone 代码到本地放到AS后发现，发现并不能点“Run”键运行app，并报错Error:Please select Android SDK： 

最后在File-&amp;gt;Project Structure中将Build tools version修改，问题解决。 ...]]></description><category></category></item><item><title><![CDATA[Android Studio开发应用 手机桌面出现两个或多个图标]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/79986449</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/79986449</guid><author>qq_25560423</author><pubDate>Wed, 18 Apr 2018 11:23:45 +0800</pubDate><description><![CDATA[安装运行之后手机桌面出现两个ICON，首先查找的是不是自己的AndroidManifest中 多个Activity  注册了两个lancher

所以桌面出现两个或多个 Icon肯定是 多个Activity添加了 android.intent.category.LAUNCHER 属性。除了自己的 AndroidManifest 还要排查引用的工程的 AndroidManifest。

也就是多个A...]]></description><category></category></item><item><title><![CDATA[linux/Mac下批量替换文件内容]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/79953822</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/79953822</guid><author>qq_25560423</author><pubDate>Sun, 15 Apr 2018 21:48:11 +0800</pubDate><description><![CDATA[grep -rl “str1” dir | xargs sed -i ‘s/str2/str3/g’  

意思就是把dir路径下面，还有子文件夹里面的所有包含‘str1’的文件里的‘str2’替换为‘str3’

当str1和str2相同时，就是批量查找和替换了

另外

grep -rl “str1” dir 
就是显示dir下所有包含str1字符串文件的路径 
但是有时候上面提到的语句并不好...]]></description><category></category></item><item><title><![CDATA[hashtable,concurrenthashmap为什么键和值不能为null，而hashmap可以？]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/77713423</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/77713423</guid><author>qq_25560423</author><pubDate>Wed, 30 Aug 2017 12:09:38 +0800</pubDate><description><![CDATA[因为hashtable,concurrenthashmap它们是用于多线程的，并发的 ，如果map.get(key)得到了null，不能判断到底是映射的value是null,还是因为没有找到对应的key而为空，而用于单线程状态的hashmap却可以用containKey（key） 去判断到底是否包含了这个null。hashtable为什么就不能containKey(key) 
一个线程先get(ke]]></description><category></category></item><item><title><![CDATA[objc[1183]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/77683671</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/77683671</guid><author>qq_25560423</author><pubDate>Tue, 29 Aug 2017 17:35:42 +0800</pubDate><description><![CDATA[Mac版本IntelliJ Idea 2017.1在运行程序时，Console出现红色警告『objc[4163]: Class JavaLaunchHelper is implemented in both XXX』 
[plain] view plain copy 
objc[4163]: Class JavaLaunchHelper is implemented in both /Library]]></description><category></category></item><item><title><![CDATA[Hashtable和HashMap]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/75199050</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/75199050</guid><author>qq_25560423</author><pubDate>Sun, 16 Jul 2017 11:43:42 +0800</pubDate><description><![CDATA[HashMap和Hashtable的比较是Java面试中的常见问题，用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题。Hashtable是个过时的集合类，存在于Java API中很久了。在Java 4中被重写了，实现了Map接口，所以自此以后也成了Java集]]></description><category></category></item><item><title><![CDATA[实现网页多人聊天室 Socket.IO]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/74011175</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/74011175</guid><author>qq_25560423</author><pubDate>Fri, 30 Jun 2017 17:50:20 +0800</pubDate><description><![CDATA[socket.io是个基于node.js的快平台实时通讯框架。只用不到10行代码，就可以搭建一个简单的多人实时聊天室。先来看看运行后的效果: 
 
socket.io多人聊天室 
只要简单几步，就可以实现。在这里我们使用本机作为服务端。安装node.js由于socket.io使用node.js为服务端，所以必须安装node.jsNode.js 是一个基于 Chrome V8 引擎的 JavaScri]]></description><category></category></item><item><title><![CDATA[Mybatis的一对一的关联映射 插入]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/73936116</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/73936116</guid><author>qq_25560423</author><pubDate>Fri, 30 Jun 2017 10:09:56 +0800</pubDate><description><![CDATA[Mybatis的一对一的关联映射 插入1.数据库脚本:CREATE TABLE `product` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `product_name` varchar(50) DEFAULT NULL,
  `description` varchar(50) DEFAULT NULL,
  `add_time` bigint(19)]]></description><category></category></item><item><title><![CDATA[多线程同步 未完]]></title><link>https://blog.youkuaiyun.com/qq_25560423/article/details/73824545</link><guid>https://blog.youkuaiyun.com/qq_25560423/article/details/73824545</guid><author>qq_25560423</author><pubDate>Fri, 30 Jun 2017 09:57:24 +0800</pubDate><description><![CDATA[synchonized关键字 
当一个线程调用对象的一段synchonized代码是，需要先获取这个锁，然后去执行相应的代码，执行结束后，释放锁。 
synchroniced方法。这个方法同一时刻只能被一个线程访问。 
synchroniced块。任意代码段生命为synchroniced、也可以指定上锁的对象。
wait()方法与notify()方法 
在synchroniced代码被执行期间，线程]]></description><category></category></item></channel></rss>