<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[moses1213的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/moses1213</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; moses1213]]></copyright><item><title><![CDATA[python爬虫实现自动发天气预报]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/97006100</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/97006100</guid><author>moses1213</author><pubDate>Tue, 23 Jul 2019 16:36:35 +0800</pubDate><description><![CDATA[两年前写的自动发天气预报的脚本，今天测试了一下发现依然还能运行。利用了itchat包，实际上调用的就是网页版微信的接口，有一个缺点就是时间长了不活跃会掉线，可以在win7的计划任务里设置每隔一分钟给自己发送一条空消息。


# -*- coding: utf-8 -*-
"""
Created on Wed Aug 30 14:55:57 2017

@author: moses1213
"""
...]]></description><category></category></item><item><title><![CDATA[浅谈MySQL中优化sql语句查询常用的30种方法]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52733833</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52733833</guid><author>moses1213</author><pubDate>Tue, 04 Oct 2016 14:32:44 +0800</pubDate><description><![CDATA[1.对查询进行优化，应尽量避免全表扫描，首先应考虑在 where 及 order by 涉及的列上建立索引。 

2.应尽量避免在 where 子句中使用!=或

3.应尽量避免在 where 子句中对字段进行 null 值判断，否则将导致引擎放弃使用索引而进行全表扫描，如： 
select id from t where num is null 
可以在num上设置默认值0，确保表中]]></description><category></category></item><item><title><![CDATA[三个骰子点数之和概率]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52558256</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52558256</guid><author>moses1213</author><pubDate>Fri, 16 Sep 2016 22:46:47 +0800</pubDate><description><![CDATA[题目出自美团点评在线笔试题，求三个骰子的点数之和概率最大的是？
思路：三个骰子点数之和的范围是3~18，越靠近两边出现的概率越小，因此点数和概率最大的情况应该出现在中间位置。计算中间9,10,11,12
出现的概率比较一下。
首先计算出现9的概率：为了避免重复和遗漏，将点数和为9分成两种情况：
（1）三个骰子点数都不相同：（1，2，6），（1，3，5），（2，3，4）
（2）可以允许存在]]></description><category></category></item><item><title><![CDATA[美团点评编程题]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52490599</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52490599</guid><author>moses1213</author><pubDate>Fri, 09 Sep 2016 21:26:17 +0800</pubDate><description><![CDATA[1.输入一个数组nums,要求返回一个新的数组count，count的i位置上放置的是nums[i]右边有多少比它小的数。
例如输入： 1 2 3 4
输出：0 0 0 0 
这道题从右边倒着数比较好，可惜当时没有考虑到相邻的数相等的情况，美团点评的题目没有自己的测试用例，需要用户自己考虑到所有可能的情况……
#include 
#include 
using namespace std;]]></description><category></category></item><item><title><![CDATA[全概率公式、贝叶斯公式推导过程]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52416743</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52416743</guid><author>moses1213</author><pubDate>Fri, 02 Sep 2016 20:37:41 +0800</pubDate><description><![CDATA[（1）条件概率公式

        设A,B是两个事件，且P(B)>0,则在事件B发生的条件下，事件A发生的条件概率（conditional probability)为：

                     P(A|B)=P(AB)/P(B)

 

（2）乘法公式

         1.由条件概率公式得：

                       P(A]]></description><category></category></item><item><title><![CDATA[腾讯模拟笔试]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52411169</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52411169</guid><author>moses1213</author><pubDate>Fri, 02 Sep 2016 10:13:38 +0800</pubDate><description><![CDATA[编程题：有蛇形矩阵，比如宽为3的时候为 1    2    3
                                                                    8    9    4
                                                                    7    6    5，
宽为4的]]></description><category></category></item><item><title><![CDATA[itoa函数的实现]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52400176</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52400176</guid><author>moses1213</author><pubDate>Thu, 01 Sep 2016 15:30:08 +0800</pubDate><description><![CDATA[#include 
using namespace std;

//itoa函数的实现
void MyItoa(int x, char* str)
{
	int i, j;
	i = j = 0;
	char tmp[50];
	bool negative = false;
	if(x < 0)
	{
		x = -x;
		negative = true;
	}
		
	while(x > 0)]]></description><category></category></item><item><title><![CDATA[C++11多线程编程]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52396611</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52396611</guid><author>moses1213</author><pubDate>Thu, 01 Sep 2016 10:03:05 +0800</pubDate><description><![CDATA[C++11开始支持多线程编程，之前多线程编程都需要系统的支持，在不同的系统下创建线程需要不同的API如pthread_create()，Createthread()，beginthread()等，使用起来都比较复杂，C++11提供了新头文件、、、等用于支持多线程。

使用C++11开启一个线程是比较简单的，下面来看一个简单的例子：



#include 

#include 
]]></description><category></category></item><item><title><![CDATA[Linux多线程编程]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52396603</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52396603</guid><author>moses1213</author><pubDate>Thu, 01 Sep 2016 10:00:17 +0800</pubDate><description><![CDATA[一直对多线程编程这一块很陌生，决定花一点时间整理一下。

os:ubuntu 10.04  c++

1.最基础，进程同时创建5个线程，各自调用同一个函数





[html] view
 plain copy






#include iostream>  
#include pthread.h> //多线程相关操作头文件，可移植众多平台  
  ]]></description><category></category></item><item><title><![CDATA[C++线程安全的单例模式]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52302492</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52302492</guid><author>moses1213</author><pubDate>Wed, 24 Aug 2016 18:08:07 +0800</pubDate><description><![CDATA[一、懒汉模式：即第一次调用该类实例的时候才产生一个新的该类实例，并在以后仅返回此实例。

需要用锁，来保证其线程安全性：原因：多个线程可能进入判断是否已经存在实例的if语句，从而non thread safety.

使用double-check来保证thread safety.但是如果处理大量数据时，该锁才成为严重的性能瓶颈。

1、静态成员实例

class Singleton]]></description><category></category></item><item><title><![CDATA[KMP代码实现]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52224060</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52224060</guid><author>moses1213</author><pubDate>Tue, 16 Aug 2016 19:00:47 +0800</pubDate><description><![CDATA[void GeneratePrefix(const string& pattern, int* prefix)
{
	int length = pattern.size();
	prefix[1] = 0;
	int LOLP = 0;           //LOLP表示最长的前缀数组
	int NOCM;              //number of characters matched]]></description><category></category></item><item><title><![CDATA[内存限制下查找数组的重复数]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52192501</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52192501</guid><author>moses1213</author><pubDate>Fri, 12 Aug 2016 17:14:15 +0800</pubDate><description><![CDATA[题目：给定一个数组，包含1到n的整数，n最大为32000，数组可能含有重复的值，且n的取值不定。若只有4KB的内存可用，该如果打印数组中所有重复的元素？
思路：检测重复数的题目做过很多了，通常是建议一个哈希表，对访问过的元素进行标记，当访问的元素未标记时，标记这一元素，如果已经标记，说明重复，输出。哈希表可以用数组实现，假设申请int型的大小为32000的数组，那么使用的空间大小为32000*4]]></description><category></category></item><item><title><![CDATA[位操作求余数]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52190614</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52190614</guid><author>moses1213</author><pubDate>Fri, 12 Aug 2016 12:34:03 +0800</pubDate><description><![CDATA[在一些位操作里可能需要求余数的操作，而且位操作执行效率更高，但除数为2的N次方时，位操作也是一种实现方式。
总结了两种方法如下：
1:MOD(X, M) = X - (X >> M) 
2:MOD(X, M) = X&(M-1)  //M必须是2的N次方

其实方法1就是低位置零的方法，也可以这样实现：假设M = 2^n, X & (~(1]]></description><category></category></item><item><title><![CDATA[走格子问题]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52164248</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52164248</guid><author>moses1213</author><pubDate>Tue, 09 Aug 2016 17:21:08 +0800</pubDate><description><![CDATA[6×9的的方格中，起点的左下角，终点在右上角，从起点到终点，只能从下向上，从左向右走，问一共有多少种不同的走法。
A.  4200
B.   5005
C.  1005

D.  以上都不正确
这原本是道选择题，答案选B。已选择题的思路的来解决这道问题，假设左下角坐标为（0，0），那么右上角坐标为（6，9）。从左下角走到右上角，横向要走9步，纵向走6步，不管采用哪种方式横向和纵向走的步]]></description><category></category></item><item><title><![CDATA[八皇后问题的两种解法]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52145829</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52145829</guid><author>moses1213</author><pubDate>Sun, 07 Aug 2016 23:32:08 +0800</pubDate><description><![CDATA[八皇后问题，即八个皇后放在8*8的格子上，要求每个皇后不同行、不同列，也不再对角线上。
解法一：全排列解法。八个皇后不同行，那么假设存在一个数组大小为8，数组下标代表行，0~7都会被占满，数组每个下标位置上的值代表当前皇后的列，即下标值代表皇后的行，数组值代表列。下标0~7肯定会不同，如果以0~7初始化数组，那么列也会完全不同。那么列的排列就是0~7八个数的全排列问题，剩下的就是要判断是不是在对]]></description><category></category></item><item><title><![CDATA[硬币的表示法]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52143673</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52143673</guid><author>moses1213</author><pubDate>Sun, 07 Aug 2016 17:37:10 +0800</pubDate><description><![CDATA[题目：给定数量不限的硬币，币值为25分、10分、5分和1分，编写代码计算n分有几种表示法。
思路：这个问题真的非常有意思，需要用到递归的思想。假设现在有50分，求它的表示法。（1）50分可以用0个25分硬币，这下剩下的问题就是50分用10分、5分和1分表示；（2）50分用1个25分表示，问题转化为25分用10分、5分和1分表示；（3）50分用2个25分表示，这时候返回1。
所以可以看到这是一个]]></description><category></category></item><item><title><![CDATA[打印n对括号的全部有效组合]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52137902</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52137902</guid><author>moses1213</author><pubDate>Sat, 06 Aug 2016 19:16:42 +0800</pubDate><description><![CDATA[这道题最基本的思路是求出n对括号的全排列，然后对每种排列方式判定是否有效。判定方法如下：
bool IsMatch(string& str)
{
	if(str.size() % 2 != 0)
		return false;
	int result = 0;	
	for(string::iterator it = str.begin(); it != str.end(); ++it)
	{
	]]></description><category></category></item><item><title><![CDATA[给定因子求第K个数]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52127755</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52127755</guid><author>moses1213</author><pubDate>Fri, 05 Aug 2016 12:21:04 +0800</pubDate><description><![CDATA[题目：有些数的素因子只有3，5，7，请设计一个算法，找出其中第K个数。
思路：因为只存在素因子3，5，7，所以这些数具有这样的形式：3^x * 5^y * 7^z。假设当前已经生成了一些数，那么产生下一个数应该还是拿3或5或7乘以已经生成的数中的某个数。这一步可以在生成一个数的时候预先处理，每生成一个数x，同时将3*x,5*x,7*x放入预备队列，生成下一个数的时候总是从预备队列里找出一个最小的]]></description><category></category></item><item><title><![CDATA[链表的冒泡排序]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52098502</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52098502</guid><author>moses1213</author><pubDate>Tue, 02 Aug 2016 22:12:54 +0800</pubDate><description><![CDATA[由于链表的特殊性，只存在后向指针，所有的数只能向后移动，所以采用冒泡排序时先把最大的数交换到最后，然后第二大的数交换到倒数第二个结点上，注意每次交换的边界的更新。
void ListSort(ListNode* pHead)
{
	if(pHead == NULL)
		return;
		
	ListNode* pEnd;
	for(pEnd = pHead; pEnd != NULL; pE]]></description><category></category></item><item><title><![CDATA[最长回文字串-Manacher解法]]></title><link>https://blog.youkuaiyun.com/moses1213/article/details/52088381</link><guid>https://blog.youkuaiyun.com/moses1213/article/details/52088381</guid><author>moses1213</author><pubDate>Mon, 01 Aug 2016 19:37:42 +0800</pubDate><description><![CDATA[对于一个比较长的字符串，O(n^2)的时间复杂度是难以接受的。Can we do better? 

先来看看解法2存在的缺陷。

1) 由于回文串长度的奇偶性造成了不同性质的对称轴位置，解法2要对两种情况分别处理；
2) 很多子串被重复多次访问，造成较差的时间效率。

缺陷2）可以通过这个直观的小]]></description><category></category></item></channel></rss>