<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[GrimCake的博客]]></title><description><![CDATA[励志当一名快乐的程序猿]]></description><link>https://blog.youkuaiyun.com/GrimCake</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; GrimCake]]></copyright><item><title><![CDATA[（3）servlet获取参数和返回响应]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/106064732</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/106064732</guid><author>GrimCake</author><pubDate>Mon, 11 May 2020 22:51:08 +0800</pubDate><description><![CDATA[servlet获取参数和返回响应
在web目录下新建login.html
&lt;html&gt;
&lt;head&gt;
	&lt;meta http-equiv="content-type" content="text/html; charset=UTF-8"&gt;
	&lt;title&gt;login&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;form action="login" method="post"&gt;
		&lt;b&gt;id:]]></description><category></category></item><item><title><![CDATA[（2）搭建servlet环境]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/106059932</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/106059932</guid><author>GrimCake</author><pubDate>Mon, 11 May 2020 18:22:51 +0800</pubDate><description><![CDATA[搭建servlet环境
本文将介绍在Eclipse下用最原始的方法，即直接创建java project来搭建，从而更方便地理解各个配置文件的作用。


创建项目：
File-&gt;new-&gt;Project-&gt;java project
假设项目名j2ee


在j2ee目录下创建web/WEB-INF/web.xml


在src目录下new Package，包名为j2ee，创建一个HelloServlet.java文件


最终，目录结构如图所示：

先来看一下Tomcat服务器如何访问项目中]]></description><category></category></item><item><title><![CDATA[（1）配置Tomcat]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/106051564</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/106051564</guid><author>GrimCake</author><pubDate>Mon, 11 May 2020 12:21:24 +0800</pubDate><description><![CDATA[下载源码包解压


新建系统变量
变量名：CATALINA_BASE
变量值：D:\Java\apache-tomcat-8.5.51-windows-x64\apache-tomcat-8.5.51（bin目录的位置）
变量名：CATALINA_HOME
变量值：D:\Java\apache-tomcat-8.5.51-windows-x64\apache-tomcat-8.5.51


编辑Path变量
新建 %CATALINA_HOME%\bin


打开cmd，输入startup启动，或者直接在..]]></description><category></category></item><item><title><![CDATA[bloom]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/96164107</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/96164107</guid><author>GrimCake</author><pubDate>Tue, 16 Jul 2019 18:22:48 +0800</pubDate><description><![CDATA[BloomFilter
模块信息
util/bloom.cc
模块概要
布隆过滤器由一个很大的bit数组和很多的哈希函数组成，用于判断一个元素是否在集合中。
当要往集合中加入一个元素时，就通过这些哈希函数将这个元素映射到bit数组不同的位上，并将该位设置为1。
当要判断一个元素是否在集合中时，同样通过一系列哈希函数将元素映射到bit数组不同位上，如果出现某个位不为1，则说明该元素不在集合中。
布隆...]]></description><category></category></item><item><title><![CDATA[leveldb源码分析：内存池 Arena]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/96144157</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/96144157</guid><author>GrimCake</author><pubDate>Tue, 16 Jul 2019 15:53:19 +0800</pubDate><description><![CDATA[Arena
模块信息
util/arena.h
util/arena.cc
模块概要
用于实现一个简单的内存池，有两种内存分配方式，一种是普通分配，一种是对齐分配
主要接口




方法
说明




char* Arena::Allocate(size_t bytes)
普通方式分配内存


char* Arena::AllocateAligned(size_t bytes)
对齐方式分配内存
...]]></description><category></category></item><item><title><![CDATA[redis源码阅读笔记 字典]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/90603994</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/90603994</guid><author>GrimCake</author><pubDate>Mon, 27 May 2019 15:14:25 +0800</pubDate><description><![CDATA[redis源码阅读笔记 字典
​	字典是redis中实现的一种数据结构，其中一些api函数的相互调用关系有一点复杂，故做一篇记录整理一下。
常用api

dictCreate			创建新的字典
dictAdd                 向字典中插入给定键值
dictReplace          同上，如果存在则替换
dictFetchValue     返回给定键的值
dictGetRa...]]></description><category></category></item><item><title><![CDATA[Linux多线程服务端编程读书笔记 chapter 1 线程安全的对象生命期管理]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/89646176</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/89646176</guid><author>GrimCake</author><pubDate>Sun, 28 Apr 2019 21:19:02 +0800</pubDate><description><![CDATA[析沟函数与多线程
c++对象生命周期由程序员管理，那么在多线程环境下，如何保证调用成员函数时该成员还存活，如何保证析沟函数只被调用一次，如何保证不会析构到一半时其他线程又调用了成员函数？
安全地创建对象
为了保证对象安全地被构造，即不被其他线程访问一个构造了一半的对象，关键是在构造过程中不泄露this指针，即

不要在构造函数中注册任何回调
不要在构造函数中将this指针传给跨线程的对象
即使在构...]]></description><category></category></item><item><title><![CDATA[Nginx学习 2.模块开发]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/89509675</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/89509675</guid><author>GrimCake</author><pubDate>Thu, 25 Apr 2019 09:53:34 +0800</pubDate><description><![CDATA[模块调用原理
 先来看看nginx是如何调用模块的，以http模块为例，从书中截了一张图：

]]></description><category></category></item><item><title><![CDATA[Nginx学习 1.基本使用]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/89494630</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/89494630</guid><author>GrimCake</author><pubDate>Wed, 24 Apr 2019 15:35:46 +0800</pubDate><description><![CDATA[1 Nginx的启动与关闭
 Nginx的可执行文件在/nginx/sbin目录下，配置文件在/nginx/conf目录下，可以通过whereis命令进行查找。
 启动Nginx后若修改了配置文件只需要用nginx -s reload进行重新加载即可。删除了一些语句后，有的浏览器如firefox可能需要清理缓存数据才能显示删除后的效果。
2

...]]></description><category></category></item><item><title><![CDATA[Nginx学习 0. 概述]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/89492194</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/89492194</guid><author>GrimCake</author><pubDate>Wed, 24 Apr 2019 14:31:17 +0800</pubDate><description><![CDATA[开一篇博客记录一下学习Nginx的过程，主要参考官方文档以及《深入理解Nginx：模块开发与结构解析（第二版）》。
主要内容有：





]]></description><category></category></item><item><title><![CDATA[chapter 4 读书笔记]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/89483996</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/89483996</guid><author>GrimCake</author><pubDate>Wed, 24 Apr 2019 00:18:12 +0800</pubDate><description><![CDATA[多进程处理客户端请求框架如代码所示


for(;;){
    connfd = Accept(listenfd, ...);
    if((pid = fork()) == 0){
        close(listenfd);
        deal(connfd);
        close(connfd);
        exit(0);
    }
    close(con...]]></description><category></category></item><item><title><![CDATA[从零开始写操作系统（1）环境配置]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/86561189</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/86561189</guid><author>GrimCake</author><pubDate>Sun, 20 Jan 2019 13:06:26 +0800</pubDate><description><![CDATA[       寒假来了，从今天开始正式进入操作系统内核学习。最近在读田宇写的《一个64位操作系统的设计与实现》，感觉是本炒鸡棒的书，所以开一系列的博文来记录一下自己碰到坑。也不知道一个寒假能学多少。

       话不多说，首先第一步当然是要配置环境啦。我使用的操作系统是Ubuntu 7.3。此外我们需要安装gcc，nasm，bochs。...]]></description><category></category></item><item><title><![CDATA[1106: [POI2007]立方体大作战tet（树状数组）]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/81429030</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/81429030</guid><author>GrimCake</author><pubDate>Sun, 05 Aug 2018 11:07:56 +0800</pubDate><description><![CDATA[题意：有n种数字的牌叠成一堆，每种数字有两个。相邻相同的数字可以消去，每次只能交换相邻两个数字，消去某种数字后上面的牌会落下，因此可能产生连锁反应。问最少交换几次使所有牌都消去。

题解：

有几种情况

第一种： 1.....1 2.....2这样先消1和先消2一样

第二种：1212  同上，并且只用消一个

第三种： 1 2 ....2 1 显然先消2更优

分析可得，每种数字记录中间有多少...]]></description><category></category></item><item><title><![CDATA[2017 Multi-University Training Contest - Team 3]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/81194081</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/81194081</guid><author>GrimCake</author><pubDate>Tue, 24 Jul 2018 23:12:15 +0800</pubDate><description><![CDATA[HDU-6058 Kanade's sum(维护附近第k大+链表)

题意：给一个1-n的排列，求所有区间第k大数的和

题解：对每一个数考虑其贡献，那么我们可以往左找第k大，然后往右找第k大，类似与单调栈算贡献的思想。关键是怎么找，可以用链表来优化，记录下每个数字出现的位置，从小数字开始找，算完它的贡献后把它删掉，这样对于每个数字他两边都是比他大的。

代码：


#include&amp;lt;ios...]]></description><category></category></item><item><title><![CDATA[codeforces-1009D Relatively Prime Graph]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/81175638</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/81175638</guid><author>GrimCake</author><pubDate>Mon, 23 Jul 2018 22:01:54 +0800</pubDate><description><![CDATA[题意：给n，m，要求构造一个n个点，m条边的图，要求对于任意一条边&amp;lt;u,v&amp;gt;，gcd(u,v)=1 .     0&amp;lt;n，m&amp;lt;1e5

题解：可以打一下欧拉函数表，发现573内互质的对数就大于1e5了，因此可以从1开始枚举和他互质的点，然后把点对加入vector，当size大于m时就跳出

代码：


#include&amp;lt;bits/stdc++.h&amp;gt;
#define...]]></description><category></category></item><item><title><![CDATA[2017 Multi-University Training Contest - Team 2]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/81125192</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/81125192</guid><author>GrimCake</author><pubDate>Fri, 20 Jul 2018 01:27:11 +0800</pubDate><description><![CDATA[HDU-6045 Is Derek lying? (判断)

题意：给出N，X，Y，代表有N个选择题，以及两个字符串代表两位同学的答案。D同学说他能得到X分，说A同学能得到Y分，请问他是否撒谎。

题解：求出两个字符串对应位不同字符的有多少位。然后看代码吧。

代码：


#include&amp;lt;iostream&amp;gt;
#include&amp;lt;cstdio&amp;gt;
#include&amp;lt;cst...]]></description><category></category></item><item><title><![CDATA[bzoj 1012: [JSOI2008]最大数maxnumber(线段树)]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/81082406</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/81082406</guid><author>GrimCake</author><pubDate>Tue, 17 Jul 2018 15:39:23 +0800</pubDate><description><![CDATA[
#include&amp;lt;iostream&amp;gt;
#include&amp;lt;cstdio&amp;gt;
#include&amp;lt;cstring&amp;gt;

using namespace std;

int M;
long long D;
long long t = 0;
int cnt;

struct node{
    int l, r;
    long long ma;
}s[200010*4]...]]></description><category></category></item><item><title><![CDATA[HDU-1520 Anniversary party(树形dp)]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/81079358</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/81079358</guid><author>GrimCake</author><pubDate>Tue, 17 Jul 2018 13:04:02 +0800</pubDate><description><![CDATA[题意：给一棵树，每个节点有一个权值，从中选一些点，相邻节点不能同时选，问能选的最大值是多少

代码：


#include&amp;lt;iostream&amp;gt;
#include&amp;lt;cstdio&amp;gt;
#include&amp;lt;cstring&amp;gt;
#include&amp;lt;vector&amp;gt;

using namespace std;

int dp[6010][2];
int a[6010];...]]></description><category></category></item><item><title><![CDATA[codeforces-159C String Manipulation 1.0(vector)]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/81067704</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/81067704</guid><author>GrimCake</author><pubDate>Mon, 16 Jul 2018 16:46:32 +0800</pubDate><description><![CDATA[题意：给一个字符串，把他赋值k编，然后有m个操作，删除某个字母第x次出现的位置，输出所有操作结束后的字符串

题解：vector的应用

代码：


#include&amp;lt;iostream&amp;gt;
#include&amp;lt;cstdio&amp;gt;
#include&amp;lt;cstring&amp;gt;
#include&amp;lt;vector&amp;gt;
using namespace std;

int vis[...]]></description><category></category></item><item><title><![CDATA[codeforces-191C (树链剖分+边的区间修改)]]></title><link>https://blog.youkuaiyun.com/GrimCake/article/details/81042914</link><guid>https://blog.youkuaiyun.com/GrimCake/article/details/81042914</guid><author>GrimCake</author><pubDate>Sat, 14 Jul 2018 13:37:57 +0800</pubDate><description><![CDATA[题意：给出一棵树，每次可以使任意两点间的路径的权值加1，最后求出每条边的权值题解：可以作为基于边权的树链剖分的模板，有个技巧是用eg数组来将边的序号和点关联起来代码：#include&amp;lt;iostream&amp;gt;
#include&amp;lt;cstdio&amp;gt;
#include&amp;lt;cstring&amp;gt;
#include&amp;lt;algorithm&amp;gt;

using namespace st...]]></description><category></category></item></channel></rss>