自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 现网操作数据的注意点

作为后台开发,需要操作一下现网数据库,无论是为了修复脏数据,还是正常的业务需求,应该或多或少会遇到。但是,操作现网数据是一个风险极高的动作,稍有不慎操作错误,就会导致现网的大面积故障。因此在现网操作数据之前,需要认真check一下这些点:1、操作数据的命令或者sql最好需要其他熟悉相关业务的同事进行review任何人都有操作粗心或者考虑不周的时候,我们即使对业务比较熟悉,也难免发生少...

2019-08-31 18:53:30 645

原创 Java中AES加密算法使用

之前在搜索引擎上搜索了很多的AES使用例子,但是使用起来总是有各种各样的问题。经过自己实验之后,终于写出一个可用的AES封装类。下面直接上代码:import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import j

2017-07-13 15:35:25 469

原创 mysql++中的escape和quote原理的学习

看了一下mysqlpp中的manip.h这个头文件,大概了解mysqlpp中的escape和quote中的实现方式msyqlpp::escape和mysqlpp::quote分别是枚举类型quote_type0和枚举类型escape_type0的一个值。在头文件里面定义了quote_type1 operator 这个quoto_type1是一个简单封装的结构体,里面有一

2017-03-21 16:30:03 2071

原创 Protobuf c++使用小坑(set_allocated函数)

protobuf是后台开发中,比较常用的数据通信协议。相对于json,具有数据压缩率高等优点。但是,在某些情况下,稍不留神容易用错。最近使用protobuf的时候,使用了相对陌生的复合类型的赋值。结果用错了,然后就莫名其妙core dump了。使用的数据类型简化如下:message Answer { optional uint32 choice = 1; op

2016-11-22 21:43:03 23589 1

原创 CAS的小实验

CAS是什么?cas是一种在多线程的编程中的一种避免竞争态的方法,作用类似与互斥锁。当多个线程对一个共享的数据进行访问的时候,如果多个线程同时对这个数据进行写,而没有采取任何方法避免多线程同时写,数据就会出现各种问题。解决这个问题的最经典的方法就是使用互斥锁了。一个线程需要对那个数据进行访问之前,就先对那个数据上锁,而互斥锁只能被一个实体(线程)获取,在获取互斥锁的线程释放那个锁之

2016-07-10 21:36:02 512

原创 腾讯实习生面试印象

2016.4.21今天终于收到腾讯的电话,让我几天之后到酒店签约。其实离hr面试已经好多天了,经过这么多天煎熬的等待,在收到通知的时候没有激动,只是长舒一口气:终于定下来了!本来hr面之后就有同学让我写一个面经,但是为了攒rp,我等到收到最后的确认才写~~2016.4.10在前一天收到初试的面试通知,让我到一个酒店。初试很多人,酒店里面有很多在等待叫号的人。因为我的时间段比较早,很快就

2016-04-21 17:13:59 594

原创 udp学习杂记

以下内容均是阅读《Unix网络编程》关于UDP章节的笔记。1.因为udp的数据报的传输是不可靠的,所以,如果传出一个数据报之后然后通过读取操作获得返回结果,有可能发送的数据报没有发送成功,或者回复没有接受成功,都可能使得程序在读取操作中阻塞。所以,在读取操作的时候,可以定一个定时器,防止程序永远睡眠。2.如果其他程序知道udp通信中的ip和端口号,就可以冒充通信中的另外一方,来进行攻击等恶

2016-03-26 19:18:55 356

原创 linux复习杂记(三)select函数相关

1.select函数允许进程指示内核等待多个事件中的任何一个发生,并且在只有一个或多个事件发生或经历一段时间后才唤醒进程(函数返回)。函数原型为:int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set * exceptset,const struct timeval *timeout)。第一个参数maxfdp1是指所有监听的描述

2016-03-16 20:27:41 445 1

原创 linux复习杂记(二) linux网络编程中的细节

1.在学习《Unix网络编程》过程中,有一个例子,就是服务器每收到一个连接请求,在调用accept函数并获取socketid之后,就会调用一个fork函数生成一个子进程来处理这个连接(这种是多进程服务器的模式吧~)。然而在子进程的事务结束之后,会发出一个SIG_CHLD信号,告诉父进程子进程结束了。这时候如果父进程不做任何处理,子进程就会进入僵死状态,会占用着资源。这时候需要父进程捕捉这个信号,并

2016-03-14 22:42:20 331

原创 linux 复习杂记(一) linux中的进程

1.父进程与子进程拥有私有的内存映像,调用fork函数生成子进程之后,父进程对属于它的变量作出修改对于子进程来说是不可见的。但是,父进程和子进程是可以共享已经打开的文件的。如果一个文件在子进程创建之前被打开了,那么父进程对文件内容作出了修改,对于子进程来说是可见的。2.fork函数会返回两次,一个是返回给父进程的,返回值是子进程的id。一个是返回给子进程的,返回值是0。子进程可以通过getpi

2016-03-12 16:49:56 383

原创 Django中的F表达式来解决丢失修改问题

在使用django开发自己的博客的时候,有一个就是统计每一片博文的访问次数。一开始是这样实现的:def readArticle(req,article_id): article = Article.objects.get(id=article_id) article.read_time+=1 #read_time就是一片博文的访问次数 article.save() return ren

2016-03-01 19:28:24 1172

原创 STL容器的size()函数的一个容易忽略的点

STL容器的size()函数会返回容器里面的元素个数,它的类型是size_t,即无符号整型。而我之前没有留意这个,以为是整型,然后在一份代码中写了如下代码,找bug找了很久。。。for(int i=0;i<path.size()-1;i++){//some code}path是一个vector对象,我本来设想,如果path为空,就直接跳出for循环,但是事实上如果path为空,是会在里面

2016-02-18 11:29:54 1361 1

原创 HDU 3488 HDU3435 HDU 1853 (最小费用流或者最大完美匹配)

这三道题都基本差不多:给定一个图,让每一个点都在一个环中,并且使得这些环的权值之和最小。这类型的题目有至少两种做法:最小费用流或者最大完美匹配。但是具体选择哪一种要结合具体的数据量范围。最大完美匹配的时间复杂度是O(n^3),最小费用流的时间复杂度是O(F*E*log*V),F是做最短路的次数。最小费用流的做法:建图方式是,将一个点拆成两个,编号为i,i+n,对于一条边(u,v,val),

2015-09-18 16:32:49 684 1

原创 HDU 5442 (串的最大表示+KMP)

题意:一个环形的字符串长度为n,求出长度n的字典序最大的子串,如果多个符合的子串,取顺时针起始字符下标最小的子串,如果从该起始字符的顺时针和逆时针得到结果相同,取顺时针的那个。做法:这道题据说可以用后缀数组、后缀自动机之类的重型兵器解决,也可以用字符串的最大表示法加KMP这种相对轻量级的工具来解决。字符串的最大表示可以参考http://blog.csdn.net/zy691357966/art

2015-09-13 22:33:50 548

原创 HDU 3966 Aragorn's Story(树链剖分)

树链剖分的点剖分(相对应的是边剖分)。算是很基础的树链剖分模板题吧。将树的链分成一段段连续的区间,然后应用到线段树中,就可以实现树上两点之间的路径查询了。#include#include#include#include#include#include#include#include#include#include#include#includeusing namespa

2015-09-09 21:26:46 256

原创 POJ 3237(树链剖分)

这道题算是树链剖分的模板题吧(其实也是我过的第一道树链剖分的题目)。历尽千辛万苦,终于把两百多行的代码敲出来了,ac的一瞬间还是挺爽的。在学会了树链剖分之后,这道题不算很难的了,主要是在区间取反的部分注意一下细节。树链剖分代码挺长的,很多地方都是容易写错。我也是通过讨论区的acmer给出的数据找出一些错误的地方。#include#include#include#include

2015-09-08 22:21:13 370

原创 POJ 1830(高斯消元)

过的第一道高斯消元题,继续加油。#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #i

2015-08-27 01:08:02 361

原创 CodeForces 547B(单调栈)

题目地址:http://codeforces.com/problemset/problem/547/B题意:有一个长度为n的序列,序列有长度为1...n的连续子序列,一个连续子序列里面最小的值称作这个子序列的子序列的strength,要求出每种长度的连续子序列的最大的strength。做法:我们可以求出每一个数所在的一个区间,使得这个区间里面该数是最小的。那么,对于每个长度i(1

2015-08-24 13:44:20 1206

原创 HDU 3613(Manacher算法)

题意:字母表的26个字母都有一个价值,给定一个字符串,将该字符串切成两份,对于每一份,如果是回文串,就获得该子串的字母价值之和,否则该子串的价值为0。求出将字符串切成两份后能够获得的最大价值。做法:先用Manacher算法求出以每个字母为中心的回文串的长度,并计算该字符串的前缀价值和。然后枚举切割点,得到两份子串。这样就可以知道每个子串的中心点,然后检查以该子串的中心点作为中心点的回文串的长度

2015-08-20 10:57:19 1527

原创 poj 1947(树形背包问题)

题意:给定一棵树,求获取一棵节点数为p的子树需要切割的边的最小数量做法:定义数组dp[i][j]为以i为根节点获取节点数为j的树需要切割的最小的边的数量。对于i的一个子节点v,如果不要以v为根节点的整棵子树,那么dp[i][j]=dp[i][j]+1(因为要切割i与v的相连的边)。否则,可以枚举以v为根节点的子树的大小,假设为W,那么dp[i][j]=min(dp[i][j].dp[i][j-

2015-08-10 11:01:33 536

原创 hdu 4819(二维线段树)

生涯过的第一道二维线段树!其实思维上没有什么难度啦,就是裸的二维线段树模板题。#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include#include#includeusing namespace std;const int maxn = 801;int num[maxn][maxn

2015-08-09 17:37:19 723

原创 HDU 5335 walk out(特殊bfs)

题意:在一个只有‘0’和‘1’的矩阵中,找一条从(0,0)到(n,m)的字典序最小的一个路径。做法:bfs。但是不能每条路径都搜,要按照一定层次的搜。如果(0,0)是‘0’,就从(0,0)开始找一个离终点最近的且值为‘0’的点。然后,从那个点开始进行按照层次来进行bfs。每个点的层次就是坐标的x和y加起来的值。每搜索一个层次,就找出该层次中最小的值,并将该层次中与最小值一样的点搜索到下一层。这

2015-07-31 16:04:43 441

原创 hdu 5305 (搜索+剪枝)

题意:有n个人(n做法:建成一个图,如果边的数目是奇数或者有人的度数是奇数,那个方法数肯定是0。否则,我们可以将边进行染色。假设黑色代表两个人之间是线上朋友,白色代表两个人之间是线下朋友。那么要满足条件,必须全部边有一半被染色,并且对于每个人相连的边有一半被染色。我们可以取一半的边进行染色,然后判断是不是每个人的一半相邻边被染色。这样,耗时为C(14,28)。加上一些情况的剪枝,就能顺利通过!

2015-07-24 11:17:17 578

原创 POJ 1523 SPF (割顶 点双连通分量)

题意就是求出在一个图上去除一个点之后,那个图会变成多少个子连通图。显然我们要求出割顶。我的代码套用了刘汝佳的大白书的tarjan算法,用一个数组cnt[]记录一个点是多少个点双连通分量的割顶。当发现一个点是割顶的时候,就cnt[i]++。最后,如果一个点是一棵dfs树的树根时,就输出cnt[i],否则就输出cnt[i]+1(因为那个点有父亲,而cnt数组记录的相当于是该点的儿子个数)。#i

2015-05-16 20:13:12 458

原创 HDU 3394 Railway(点双连通分量的应用)

题意:给定一个无向图,分别求出不在任何环中的边的数量和同时在两个或以上的环中的边的数量。解法:桥上的边就是不在任何环中的。而如果一个点双连通分量中边的数量比点的数量要多,那么该双连通分量的所有边都同时在两个或以上的环中(这个可以想象一下,在一个简单环中多加一条端点不同的边,这样简单环就会被分割成两个小的简单环,任何一条在大的环中的边都会同时处于一个其中一个小的环中)。在tarjan算法中,

2015-05-02 22:22:26 701

原创 ZOJ 3862 Intersection (dijkstra)

题意:有一个机器人和n个点,机器人从一个点只能走到与那个点距离小于等于r的另外一个点,而且机器人从一个角度转到另外一个角度的用时等于角度之差。求从第一个点走到第n个点的最短用时。比较容易想到用dijkstra算法。需要用到一个二维的vis数组来记录访问情况,表示从一个点到另外一个点的访问情况(而不是一个点被访问一次之后就不能再被访问了)。细节就是注意浮点数的精度问题就行了。不算难题,但挺有意思

2015-04-15 21:04:21 684

原创 POJ 2570

我在Codeforces上做过一道类似的题目,当时是纯DFS暴力解决的。做这题时以为还是一样,结果TLE了。然后用floyd来做,但是我是用三维数组的方式的conj[i][j][k]代表i和j直接边都是k是否为一条通路。结果还是TLE,看其他人的题解,发现竟然是二进制。conj[i][j]代表i和j之间的状态,状态中二进制的第k位为1的话代表i和j之间存在一条所有边都是k的通路。其实我一开始的做法

2015-04-06 23:19:08 656

原创 hdu 2430 Beans 单调队列

#include#include#include#include#include#include#include#includeusing namespace std;//题意:从num[1]~num[n]中取一段连续的序列,使得(num[i]+...+num[j])%p<=k且该序列的和最大化//令ma=a%mod,mb=b%mod,如果ma<mb,那么(a-b)%mod的值

2015-04-02 00:34:26 641

原创 UVA Live Archive的一个坑点

在UVa Live Archive OJ上面做题的时候,如果你不小心交了一份会死循环的代码,OJ不会像其他OJ一样判定为TLE ,而是会过很长时间之后才判定为submission error。如果你不清楚这个,可能就会在上面浪费很多时间却不知道为什么总是submission error。在多次遇到submission error之后,可以检查一下代码中可能会出现死循环的地方了。

2015-03-26 18:38:18 701

原创 hdu 5188 (zhx and contest)

题意:zhx在比赛的时候有n道题目,第i道题目有一个分值vi,需要ti时间做完,而且必须在li或li之后完成。问zhx在获得至少w分数的情况下需要的最少时间。做法:类似于01背包的做法,第i题可以选择做或者不做。先对题目按照li-ti(即第i道题最早的开始时间)从小到大进行排序。然后遍历,在此过程中维护一个top值,top指的是完成前I题之后尽可能迟的时间值。对于第i道题,li-ti到top的

2015-03-17 22:06:15 663

原创 LeetCode #188

LeetCode OJ是一个有一些面试算法题的OJ,这次碰到一道令我颇为头疼的题。https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/题意:给定一只股票N天的股价,一个人最多做出k次交易,而且只有在卖了之后才能买进。问最多能获取的最大利益。我一开始往DP方向想,但是没什么思路。后来在讨论区看到了一个解法,看明

2015-03-10 21:47:44 754

原创 URAL 1471(lca tarjan算法)

题意:给定一棵树,查询时给定两个点,求出两个点的距离。暴力做肯定超时的。我的做法是采用lca(最近公共祖先)的离线算法,即tarjan算法(据说Tarjan提出了很多算法,可能还有很多tarjan算法),算法里用到了并查集。在输入完所有查询之后,在求出答案。tarjan算法的做法是:一开始vis数组初始化为0,从树根开始递归往下对点进行染色,刚到一个点的时候将vis取为-1,在继续递归

2015-01-23 21:56:14 685

原创 从一个序列中获取前K大的数的一种方法

这个方法是利用快速排序的。在快速排序中,得到中间元素(pivot)之后,比较中间元素之前的元素个数和K的大小关系,从而确定后面该往哪个方向继续递归。如果中间元素前面的元素个数等于K,那就停止递归过程;如果中间元素前面元素个数小于K,那就再中间元素后面进行递归;否则就往中间元素前面进行递归。这样最终得到的是没有排序的前K大的元素,这样再对前K个元素进行一次真正的快速排序。这样就能得到排好序的前K大元

2015-01-04 20:22:35 2404

原创 简单Graph类

#include#include#include#include#include#includeusing namespace std;class Node{public: bool vis; int first; Node() { vis=false; first=-1; }};templateclass Edge{public: int fr

2014-12-18 21:37:31 1848

原创 hdu 5090

由于数据量较小,可以用暴力解决。

2014-11-02 19:18:32 1011

原创 HDU 3714

在一场悲剧的队内训练中习得了新技能——三分法。三分法可以应用于凸函数或者偶函数的求极值。将一个区间分成三段并通过函数值的比较来缩小区间范围,最终就可以求得极值。

2014-10-30 17:26:56 859

原创 二叉搜索树(BST)模板

#include#include#include #include#include#include#include#includeusing namespace std;templateclass binNode{public: elem val; binNode *left,*right; binNode(elem v,binNode *leftChild,bin

2014-10-17 17:20:13 686

原创 非递归的二叉搜索树的中序遍历

本来就是想实现一下二叉树的中序遍历,就用了二叉搜索树来搞,结果发现了一个非常浅显但我之前不知道的现象,就是中序遍历二叉搜索树得到的序列是有序序列。算是涨姿势了……#include #include using namespace std;class binNode{public: int val; binNode *left,*right; binNode(int v,

2014-10-11 00:05:04 814

原创 ZOJ 2526(最短路+优先队列)

题意:求出一个图的最短路的数量,

2014-09-26 22:51:16 622

原创 HDU 5014(Number Squence)

这道题一开始没有什么想法。后来队友找到了一些规律,试验了一下,发现规律成立,然后就AC了。我们的做法是由n开始从大到小遍历,每到一个数w,就找出比它小的二次方数h(就是h=2^k),然后找到w关于h对称的数,进行组合,并且将组合过的数用vis数组标记一下,下一次遍历到的时候就不再操作。而二次方数h就和h-1进行组合。0如果没有被组合过,就是0和0组合。

2014-09-14 19:29:02 501

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除