- 博客(86)
- 资源 (17)
- 收藏
- 关注
原创 字节跳动2019夏令营笔试总结
2019 ByteDance Summer Camp19年夏令营,头条请了天奇大神过去做talk,我是冲着天奇大佬去的,他是做DL编译器的,跟我个人的研究方向很类似,所以很期望能跟他当面交流一下。夏令营有两次笔试机会,取成绩最高的一次作为最终的成绩。由于消息看到得晚,在下开始申请的时候,第一次笔试已经结束了。本人只参加了第二次笔试,笔试题目构成如下:单选题3题、不定向选择题1题、填空题2题、编...
2019-06-03 22:38:58 5558 9
原创 to be or not to be, that is a question...
很少发布负能量的东西,没地方写,就放这里吧。时间过得够快的,本科毕业一年了,研究生入学也一年了,今天心情不太好,想总结一下自己在这一年都干了什么。为时一年的雁栖湖集中教学马上就要结束了,我在努力地回想,除了每天都在写代码,代码量确实上去了,但是这一年来好像也没干什么实质性的工作,至少在科研方面没有任何的进展(没进展也正常,因为入学初就没给自己定什么科研目标,至少我没给自己定
2017-06-08 15:26:36 2959 1
原创 博客已迁移至github pages
从武大本科毕业以后,就很久没有写过博客了,呵呵。不过定期总结的习惯依然没有丢弃,只不过都没有发布出来。当想再次提起笔在CSDN上写总结的时候,博客已经搬家了。很久以前就用Jekyll结合github pages搭建了一个静态的博客,只不过一直没有发布内容,以后的博客会尽量发布在github pages上,这是我的github pages主页,https://lijiansong.githu
2016-08-22 20:08:29 1577
原创 REST实战——调用百度语音的云服务
RESTfulREST(REpresentation State Transfer)描述了一个架构样式的网络系统,比如说web应用程序。它首次出现在2000年Roy Thomas Fielding的博士论文中,他是 HTTP 规范的主要编写者之一。REST指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计,即具有REST风格就是RESTful。在REST中,以资源为核心,任何
2016-04-19 13:31:34 8978
原创 IFTTT的数据架构
最近在调研一款神器——IFTTT,发现这个应用用了不少高端的技术,比如说:Docker、微服务架构、Kafka、Amazon云服务、Elasticsearch、机器学习、数据挖掘等。下面开始介绍。IFTTT简介各种各样的互联网服务如社交、相册、云存储、笔记、邮箱等等都在不同程度上融入了人类的工作与日常生活,但是不同的服务之间往往互不相干,以至于我们的信息都被碎片化放在了不同的地方。正是IF
2016-04-11 18:51:29 9547 1
原创 Intel HEX文件解析
最近有一个需求就是为Arduino开发板做一个基于蓝牙的无线烧录程序。目前的Arduino程序都是通过USB线连接到电脑的主机上,实际的传输过程是基于USB协议的,这个过程还是比较麻烦的。因为每次的编译完以后都需要通过一个USB线来完成传输烧录的工作,这个还是很麻烦的。原理解读在Arduino中,利用USB来完成传输烧录大概是这么一个过程。每个Arduino源程序,即sketch文件,
2016-04-05 17:22:50 14829 2
原创 利用lex和yacc做词法、语法分析
最近在一直做一个东西。设计一种脚本语言,再写一个翻译器,将这种脚本语言翻译成avr-gcc可以执行的C语言程序,再将得到的C语言程序利用avr-gcc编译器编译成Intel的hex文件格式,再写一个类似bootloader的东西,将这个hex文件以无线的方式加载到内存执行。这个类似bootloader的东西就是直接跟单片机芯片的存储器打交道,实现起来确实有点难度。万事开头难,只要做好第一步,慢慢来
2016-03-25 21:48:27 5961
原创 用Source Insight追踪Arduino的setup和loop
查看一些大型的开源项目自然少不了一款神器——Source Insight。呵呵,不扯了一般情况下,在ArduinoIDE中编写的程序非常简单,只有setup和loop这两个核心函数。一般的C语言程序都有一个main函数的入口点,而Arduino是基于avr-gcc的二次封装,把这些底层的东西都屏蔽掉了。其实查看Arduino IDE的源码,会发现在其\hardware\arduino\av
2016-03-12 22:07:31 4430
原创 Arduino IDE的编译执行过程解读
avr-gcc1997年ATMEL公司的A先生和V先生推出了全新配置的8位精简指令集微处理器(RISC-Reduced Instrction Sot CPU),起名为AVR。AVR是一种指令内核的统称,内部又分为ATtiny、AT90S、ATmega三大系列,分别对应AVR的低、中、高档产品。对于开发者而言,关注更多的是AVR单片机的开发方式,而AVR单片机最初在设计的时候的目的就是为了迎
2016-03-10 21:17:22 21656 1
原创 Arduino自定义通信协议解析
上一篇文章给出了通信协议的设计。通信协议的格式如下:协议首部指令长度控制指令校验和“控制指令”设计成如下格式:设备类型设备号端口号比如说上位机发送如下的格式的数据:AA0305020106,意思就是协议的首部为AA,指令长度为03,控制
2016-03-04 15:28:35 12804 13
原创 Arduino通信协议设计
最近在一直在研究Arduino硬件平台的东西,先从做一个简单的东西入手,比如说,我通过Android端向Arduino硬件发送指令,控制电机的正转、反转。其中一个必不可少的问题就是这两个端设备之间的通信问题。它们之间的通信可以通过蓝牙模块来完成,此外,还需要自己设计通信协议。分析从最简单的模块开始,需求就是控制电机的旋转:反转和正转。再考虑最实际的硬件设备情况:Arduino开发板
2016-03-02 18:36:40 5402
原创 关于毕业设计
终于来到北京了,本来说好的上学期从Zoyon离职后就来计算所做毕设,学习。结果被几门扫尾的课程拖到了寒假,呵呵呵。。。20号终于来到了北京,衣服和被子提前从武汉邮寄过来的,结果,人到了北京,衣服也到了,就是被子没有到北京,悲剧了,夜里没被子盖,虽然身体还算强壮,但是还是成功地感冒了O(∩_∩)O~悲剧。感冒让自己浑浑噩噩度过了大概一周,囧。到计算所就是做毕设,研究题目为《面向海云计算的新型编程
2016-02-29 21:18:22 1166 2
原创 woj1208 Sherlock's Code
题目链接:http://acm.whu.edu.cn/learn/problem/detail?problem_id=1208题目的大概意思是输入两个长度为N的数组,计算数组的两两之和,得到N*N个数后,从小到大排序,输出前N个数。题目的限制条件还是有的,数据的规模:数组的长度1 这道题卡了我很久。拿到题的第一想法就是,肯定不能直接按照题目的意思去做,因为这样做内存很容易超。需
2016-01-21 23:37:46 1104
原创 暴力枚举算法的优化:抽签问题
题目描述将写有数字的n个纸片放入口袋中,你可以一次从口袋抽取4次纸片,每次记下纸片的数字后将其放回口袋。如果这4个数字的和是m,那么你就赢了,否则你就输了。编写程序,判断当纸片上的数字是k1,k2,…,kn时,是否存在抽取4次和为m的方案。如果存在,输出Yes;否则输出No.限制条件,数据规模1i时间限制为1s.输入的第一行表示n,第二行表示m,第三行的n个数字表示k.
2016-01-21 15:26:13 1657
原创 C++虚函数的底层实现原理
在C++中,多态是利用虚函数来实现的。比如说,有如下代码:#include using namespace std;class Animal{public: void Cry() { cout << "Animal cry!" << endl; }};class Dog :public Animal{public: void Cry() { cout << "
2016-01-11 18:01:58 24932 8
原创 深拷贝和浅拷贝
C++中一个非常经典的问题就是深拷贝和浅拷贝的问题,这属于拷贝构造函数中的内容。浅拷贝时,拷贝类的对象时,将拷贝其指针成员,但是没有复制指针指向的缓冲区,这样做的结果就是,两个对象指向同一块动态分配的内存。浅拷贝会威胁程序的稳定性。这样说起来可能不太好理解,下面给出一个很好的例子,自定义一个类似string的MyString类如下:#include #pragma warning(disab
2015-12-30 17:10:42 921
原创 基于OK6410嵌入式WinCE 6.0的“街霸”游戏的设计与实现
很久没写博客了。这几天在做嵌入式的课程设计,忙活了将近两周。实验平台的开发板子用的是OK6410,操作系统是WindowsCE,微软旗下一个嵌入式方向的产品。本打算做一个三维的游戏,结果学了一段时间DirectX的东西。悲哀的是WinCE目前还不支持DirectX的API。囧,只好做一个二维的游戏。上周末一兄弟去北京工作,在寝室为他饯行,喝了几杯白兰地,结果周一难受得在床上躺了一天,呵呵,其实我酒
2015-12-21 23:21:59 1525
原创 DirectX天空球和天空盒子模型
在一些大型的3D游戏中,有几个必不可少的元素,比如说天空和大地,这些元素的存在可以增加3D场景的真实感。三维场景中天空和大地场景的模拟其实很简单,这种场景跟古人所说的“天圆地方”有着异曲同工之妙。天空其实就是一个很大的容器,把整个世界都罩在下面,大地就是一个平面,场景中所有的元素都显示在二者所包围的空间中。三维天空的技术主要包括三种类型:一种是平面型天空(Sky Plane),仅用一个平面盖在所有
2015-11-21 11:48:56 4294
原创 Direct3D高程图立体显示
在微软的DirectX Sample Browser中,有个RaycastTerrain例子,做得很好,将一张平面的地形图,在底面添加了一个底部,四周的高度差再封闭起来,然后再添加一个浅蓝色的背景,平面图形的立体感很强,而且灯光和阴影的效果也做得很棒!这个例子是基于C++的,这里模仿这个例子,给出一个基于C#的实现。思路也大致类似,找一张bmp格式的深度图,经过像素值的计算处理,生
2015-11-10 21:44:46 2037
原创 Direct3D 地形
高程图生成三角形网格3D场景的模拟离不开地形,因此3D地形的模拟在3D程序设计中很重要。在3D场景中,地形的表面都是通过三角形网来表示,即通过高度图(也称影像图)上的对应坐标值来表示规则网格顶点坐标值,从而形成规则的矩阵分布三角网。具体的实现就是通过读取高度图上象元的值来获取该坐标位置的高程,然后根据这些高程值及坐标值形成一个规则的三角网。由于在三角网中相邻三角形都具有公共点,所以为了节约内存
2015-11-06 23:11:39 1223
原创 DirectX 3D Mesh类
Mesh类中定义了若干个3D模型,比如说立方体、圆柱、茶壶等。对于一些复杂的模型可以使用专业的软件比如说3D Max等设计,再利用DirectX提供的插件,将复杂的3D模型保存为.x文件。用Mesh类对象可以加载.x文件,并显示.x文件中的3D模型。Mesh类位于Direct 3D的扩展库中,为了使用Mesh类必须引用Microsoft.DirectX.Direct3DX组件。可以用Mesh类
2015-11-03 23:41:11 3959 2
原创 DirectX 3D纹理
纹理就是3D模型外表面上的图案。在3D场景中纹理极大地增加了物体的真实性。纹理的本质是把平面图形贴到3D物体表面。在Direct3D中纹理的x和y坐标一般称为Tu和Tv坐标,纹理坐标范围都是0.0-1.0。如果知道一个面的顶点坐标,使面的顶点坐标和句型图片纹理坐标相对应,就可以将这些二维图片贴到3D图形表面。在Direct 3D中Texture类定义纹理。如果希望为墙壁贴上瓷砖,可以只绘制一个
2015-11-03 23:26:39 1398
原创 DirectX 3D灯光和材质
前面所介绍的东西都假设模型有自己的颜色,即认为模型自己发光。其实自然界的大部分物体并不发光。当光线照射到物体上,物体吸收某些颜色的光,反射另一些颜色的光,反射的光的颜色就是我们所看到的物体的颜色。这里的灯光是指光源,在Direct 3D中有4种光源:环境光、定向光源、点光源和聚光灯。反射光被分为3类:环境光、漫反射光和镜面高光。材质描述物体反射光的反射属性。可以用法线来计算光的反射,光照的反射强度
2015-11-03 23:20:50 1621
原创 DirectX 3D图形
前面的一篇文章Direct 3D基础介绍了一些基本概念,叙述了如何在显示器上直接绘制具有立体感的2D图形。上面的方法是不现实的,因为预先根据透视原理人工计算出3D物体在显示屏幕上显示的坐标然后再绘制的这种方式如果涉及从不同角度观察的3D物体的话,需要计算的次数会很多。Direct 3D实现3D所采用的方法是首先设计一个仿真真实3D物体的立体模型,然后由计算机根据透视原理计算出每一个角度模型显示在计
2015-11-01 20:51:15 2797 3
原创 Direct3D基础
最近在公司里实习,有个项目的接合点需要用到三维处理的东西,还是比较麻烦的,虽然之前也学过一点图形学的理论知识,但都是皮毛,研究得也不深入。所以趁现在把一些基本的概念拾起来,开发平台用微软的DirectX框架并结合C#,很多东西都是现学的。下面给出几个基本的概念。图形卡即显卡,计算机和显示器之间的接口。很多图形卡都有自己的处理器,称为GPU,图形处理器。GPU是针对图形和图像所需要的计算进行过优
2015-11-01 15:42:19 909
原创 实习入职第一周
前段时间一直在忙着保研的事情,现在事情算是定下来了。作为一名计算机专业的本科生,说来惭愧,还没有真正到公司实习过,所以也不知道自己是几斤几两。都说在公司里成长地很快,所以我迫不及待地想找一份短期的实习,只做两三个月的那种。前端时间也面了不少公司,结果都是挂在了HR那个环节,一听说保研了,只做两三个月,当时说得很客气,说让我回去等通知,呵呵。终于有个公司肯收留我了,当时面我的是技术部的一个主任,人很
2015-10-23 23:58:34 1218
原创 strlen、strcpy、strcat等字符串处理函数的实现
最近参加不少小公司的笔试,都是关于C++开发工程师的岗位,考察的题目比较基础。不少公司都考察了关于字符处理函数的实现,这些看起来很简单,其实需要注意的地方还是很多的。这里给出strlen、strcpy、strcat等函数的实现,以及指出需要注意的地方。strlen求字符串的实际长度,其函数的原型为:extern unsigned int strlen(char *s);其实现如下:
2015-10-17 17:10:20 1748 1
原创 C++ String类的构造函数、拷贝构造函数的实现
构造函数、析构函数与赋值函数是每个类最基本的函数,在一些公司的面试中也会经常问到这方面的问题。每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不手动编写上述函数,C++编译器将自动为类A生成四个缺省的函数: A(void); // 缺省的无参数构造函数 A(con
2015-10-10 10:51:24 9951 1
原创 Linux流编程
与文件编程相比,基于流的IO方式最大特点就是先对缓冲区进行操作,具有较高的操作效率。流的操作过程与基于文件描述符的I/O操作过程十分类似:对流进行读写、定位操作等,最后关闭流。在Linux中,对于流的打开就是建立一个缓冲区,将这个缓冲区和对应的文件相关联的过程,Linux提供了fopen、fdopen、freopen等函数来完成相应的操作,调用fclose函数会将流中的数据写入对应的文件中,并
2015-10-08 10:36:30 1121
原创 流和文件的区别
前面介绍的Linux下的文件编程所涉及的操作方式都是不带缓冲的I/O,因为每次调用相应的函数比如说read、write等对文件进行操作的时候都会调用内核的系统调用,由于每次都要通过内核对文件进行操作,所以操作效率比较低,对于流编程来说,首先对文件所映射的流进行操作,然后分阶段将相应的数据写入文件,极大地提高了相应的操作效率。Linux也提供了很多流操纵库函数,称为标准I/O库,是ISO C的组成部
2015-10-07 00:54:18 7482 3
原创 Linux文件编程
在Linux下可以通过相应的文件I/O函数来完成对文件的操作,这些函数通常被称为不带缓冲的I/O,因为这些函数对文件的读写都是调用Linux内核的系统调用来实现的。基本的函数包括:open read write lseek(设置文件指针) close等文件打开函数调用格式:#include#include#includeint open( const char * pathn
2015-10-06 23:42:32 1034
原创 Linux C下的内存映射函数
前面有一篇文章 内存映射文件 给出了windows环境下,内存映射文件的例子。其实在Linux环境下,针对C语言也有相应的内存映射函数。使用内存映射函数可以提高文件读写的速度,在Linux环境下,利用mmap函数可以将指定的文件映射到内存区域中,通过对该内存区域的操作即可以实现对该文件的操作。mmap函数的调用格式如下:#includevoid *mmap(void *addr,si
2015-10-06 20:07:03 1576
原创 2016中科院推免
最近一直在忙着推免的事情,有一段时间没写东西了。很感谢CSDN能够提供一个平台让我在这里写一些与技术无关的东西,让我在这里肆意吐槽而不会把我拉进黑名单。接到了软件所面试的通知,就过去了。15号下午的机试题目不难,就三题,要求一个半小时之内完成。第一题很简单,但是被我做麻烦了。第一题的大概意思就是输入四个顶点的坐标,分别表示两个矩形的对角线顶点。输出两个矩形的重叠面积。当时用了一个笨方法,把所有
2015-09-17 19:15:26 2102 2
原创 共享内存和动态数据交换
仔细研究一下操作系统本身的机制,比如说内存管理、进程间通信等,越发觉得这些机制很精妙,很精深,perfect!为了让具有依赖关系的线程或者进程协调工作,可以使用两种技术,第一种是进程间或者线程间通信(interprocess or interthread communication),在具有通信依赖关系的两个进程间传递信息;第二种技术是同步。进程间通信,一般情况下,单个进程拥有自己的地址空间,
2015-08-31 20:06:57 2980
原创 Windows 多进程通信API总结
在一个大型的应用系统中,往往需要多个进程相互协作,进程间通信(IPC,Inter Process Communication)就显得比较重要了。在Linux系统中,有很多种IPC机制,比如说,信号(signal)、管道(pipe)、消息队列(message queue)、信号量(semaphore)和共享内存(shared memory)、套接字(socket)等,其实Windows操作系统也支持
2015-08-30 20:16:25 28298 7
原创 Windows中的宽字符串处理问题
在用VC做开发的时候,对于一些字符串,会经常调用一般_t、_T、T(),其实这些东西都和Unicode有关系。比如说,AfxMessageBox(_T("Error! Fail to connect the database!"));这里用到了一个_T(),不使用_T()有时候编译会报错。Windows操作系统使用Unicode作为默认的文本编码格式。Unicode定义了对大于8位的字符编码的
2015-08-30 11:52:27 1334
原创 Windows多线程问题
进程和线程是操作系统里面经常遇到的两个概念,还有一个概念,是应用程序。应用程序包括指令和数据,在开始运行之前,只是分布在磁盘上的指令和数据。正在执行的应用程序称为进程,进程不仅仅是指令和数据,它还有状态。状态是保存在处理器寄存器中的一些值,记录一些信息,比如说当前执行指令的地址,保存在内存中的值等。进程是应用程序的基本构件块,同时运行的多个应用程序就是多个进程。每个进程可以运行多个线程。线程也有一
2015-08-30 00:57:04 3604 2
原创 内存映射文件
在做科研,实现一些大数据的算法的时候,经常要调用一些文件的I/O函数,在数据量很大的时候,除了设计的算法和数据结构的耗时以外,其实主要的耗时还是文件的I/O。因为一般常规的方法就是先读出磁盘文件的内容到内存中,然后修改,最后写回到磁盘上。读磁盘文件是要经过一次系统调用,先将文件的内容从磁盘拷贝到内核空间的一个缓冲区,然后再将这些数据拷贝到用户空间,实际上是两次数据拷贝。写回同样也需要经过两次数据拷
2015-08-28 16:26:19 94526 1
原创 Max Sum
Leetcode上有一个Max Sum问题,题目的描述很简单,即对于一个输入的数组,求其连续子数组的最大和。比如说,A={ 6,-1,5,4,-7},那么其连续子数组的最大和为6 + (-1) +5 + 4 = 14.分析:这是很简单的动态规划题,动态规划做多了,第一个想法就是用一个一维数组记录以每个元素为结尾的子序列的最大和,然后再扫描一遍这个数组,以获取最大值。但是仔细分析一下,其
2015-08-26 21:35:47 1772
原创 排序算法小结
网上关于排序算法的总结太多了,这篇文章就写得不错。http://m.blog.csdn.net/blog/likaiwalkman/23713373经典就是经典,个人觉得这些经典的算法被反复研究几十遍都不为过。同时也参考了很经典的书籍《数据结构与算法分析——C语言描述》,温故而知新,每次回头看这些算法的时候都为其中博大精深的思想所折服,呵呵,不扯了。这里只贴出一份用代码敲出来的各个排序算法
2015-08-24 19:00:53 1024
xposed框架拦截微信客户端的当前位置
2015-08-30
基于VC的Web服务器Demo
2015-07-10
基于xposed框架的发送时client端短信拦截
2015-06-14
基于OpenGL的Demoscene
2015-04-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人