基于Netty的HTTP代理服务器

最近在看netty,光看看书也是挺无聊的,就想着写点东西。Netty的Github上面有很多example可以学习,想到之前做的项目用Javascript写了一个http/https代理服务器来获取某些请求的参数,就想着自己再用netty来实现一下。思想很简单,实现的时候还是有很多细节的地方要注意。而且暂时https的代理还没能实现,遇到了一些问题,暂时避开这方面。

网易面试小记

前段时间有幸拿到了网易校招内推批次的内推码,于是就抱着试一试的心态投了杭研的Java职位。首先是笔试,笔试过程也是充满了戏剧性。第一次笔试由于平台的原因导致我提前交卷,没能答好,于是就有了第二次笔试的机会。鉴于第一次笔试的经验,第二次做的比较顺利,编程题有的很快也就有了思路,所以最后笔试也是过了,还是挺高兴的。

Java线程池的简单实现

最近在写Java程序的时候,接触到一些多线程方面的东西,用到了Java中的线程池。JDK中对线程池的支持比较完善,在java.util.concurrent包中,用ThreadPoolExecuter类表示一个线程池,同时还有一个Executor类扮演着线程池工厂的角色。例如:

1
2
3
4
public static ExecutorService newFixedThreadPool(int nThreads)
public static ExecutorService newSingleThreadExecutor()
public static ExecutorService newCachedThreadPool()
...

有关递增子序列的几个问题

昨天在Leetcode上刷了几道关于递增子序列的题,在discussion里看到一些非常简洁高效的代码,故学习记录于此。

递增三元子序列

给定一个存放整数的vector,求其是否存在长度为3的递增三元子序列,时间复杂度的要求是$O(n)$,空间复杂度的要求是$O(1)$。
既然时间复杂度是$O(n)$,就要求一遍遍历要得到答案,一种可行解的方式就是,使用两个变量存储三元递增子序列的前两个。设两变量分别为c1、c2,初值设为INT_MAX,设每一次循环取的数是x,若x比c1小,则将c1更新为x,否则判断x是否比c2小,是则更新c2,否则递增三元子序列找到。

时钟的SDL2实现

今天花了一下午时间写了一下这个程序。一开始摸不着头脑,更是走了歪路,所以浪费了很多时间。最后竟是无意间在贴吧的帖子上看见一个函数,才解决了困扰我很久的图片旋转的问题。

基本实现思路是这样:有一个表盘图片和三个指针图片,表盘图片作为背景,指针图片起始点在表盘的中央。获取系统时间,计算指针角度,重绘。监听退出事件,程序退出。

汉诺塔非递归算法

最近的算法课,讲到了递归与分治策略,书上递归的例子是很经典的汉诺塔问题。问题大意是有三个塔座,分别为a,b,c,开始时塔座a上叠有n个圆盘,这些圆盘自上而下,由小到大地叠放在一起,各圆盘从小到大编号为1到n。要求将塔座a上的圆盘移动到塔座b上,并且在移动时每次只能移动一个圆盘,且每个塔座上的圆盘都必须保持自上而下、由小到大的排列顺序。

本文不涉及对非递归算法的数学性证明,若想理解非递归算法的道理,下面的就不用看啦。

统计数字问题

前言

这学期学校开设了算法课,我们的教材是王晓东编著的《计算机算法设计与分析(第四版)》,在第一章绪论的课后编程练习题里看到了这个题目,除了最朴素的解法,自己并没有想到复杂度更低的办法,上网看了很多博客文章,或多或少都有讲的不清楚的地方,在绞尽脑汁想明白了一些地方后,觉得有必要自己来写一篇文章,算是为后人铺铺路吧。

|