- 从零开始学习音视频编程技术(五) 使用FFMPEG解码视频之保存成图片
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=8前面我们已经知道怎么使用FFMPEG了。现在,开始着手使用FFMPEG吧:首先来个简单的例子,使用FFMPEG打开视频文件,并解码保存成一张张的图片。具体的步骤如下所示:1.首先需要先初始化一下,使用如下函数:1av_register_all();//初始化FFMPEG调用了这个才能正常适用编码器和解码器
- 从零开始学习音视频编程技术(十五) YUV420P转RGB32
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=19上一节讲解了YUV420P格式的内容。我说过,我们不是为了做研究。平白无故讲了YUV420P的理论知识,要是不做点什么总说不过去吧。那么,我们就练练刀,写个播放YUV420P的程序吧,将前面保存的YUV420P图像用自己写的播放器播放出来。这里我们还是一样使用Qt来显示图像。之前做播放器的时候,是将YU
- 从零开始学习音视频编程技术(三) 开发环境搭建
雲天之巔
从零开始学习音视频编程技术
=============2019-10-31更新:Qt4已经淘汰了,不建议使用了,推荐使用Qt开发。Qt5开发环境的搭建,请参考:http://blog.yundiantech.com/?log=blog&id=37=============前面介绍了音频格式和视频格式,理论知识就不在多说了。其他的理论上知识在以后用多少讲多少,毕竟我们不是为了做研究,而是实实在在的做项目,因此要把的重心放在实践
- 从零开始学习音视频编程技术(十) FFMPEG Qt视频播放器之播放控制
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=13到这里,我们的视频播放器已经可以同步播放音视频了。现在是时候给他加上一些控制的功能了。如播放、暂停、跳转等。一、暂停功能实现我们是在一个单独的线程中循环读取视频,所以只需要在需要暂停的时候,让读取的操作等下来即可。做法如下:1.首先引入一个变量用来记录是否处于暂停状态:1boolisPause;//暂停
- 从零开始学习音视频编程技术(八) FFMPEG Qt视频播放器之音视频同步
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=11前面分别讲解了:用FFMPEG和Qt解码视频并显示到界面上。用FFMPEG+SDL解码播放音频。现在我们就将视频和音频合并,并让声音和画面同步。加入音频的部分就不做讲解了,这里主要讲下声音和视频同步的步骤。首先刚开始播放的时候通过av_gettime()获取系统主时钟,记录下来。以后便不断调用av_ge
- 从零开始学习音视频编程技术(二) 音频格式讲解
darling757267
音视频
http://blog.yundiantech.com/?log=blog&id=51.音频简介前面我们说过视频有一个每秒钟采集多少张的概念,这就叫做视频的帧率。和视频的帧率一样的道理,声音也有一个频率,叫做采样率。人对频率的识别范围是20HZ-20000HZ,如果每秒钟能对声音做20000个采样,回放时就足可以满足人耳的需求.所以22050的采样频率是常用的,44100已是CD音质,超过4800
- 从零开始学习音视频编程技术(41) H.264播放器
雲天之巔
从零开始学习音视频编程技术
现在,我们已经简单的掌握了h.264数据的结构。是时候干点什么了,那就先来写一个H.264视频播放器吧。。前面我们开发视频播放器的时候是通过:avformat_open_input打开视频文件,然后再调用av_read_frame就可以读到一帧帧的数据了,当然用这样的方法也可以直接打开并读取一个h.264文件,但是这样就违背了我们的初衷了,我们的目的是对上一节《H264数据格式讲解》的实践,因此我
- 从零开始学习音视频编程技术(40) H.264数据解析
雲天之巔
从零开始学习音视频编程技术
前面我们已经开发了视频播放器和录屏软件,但目前为止,我们对原理性的东西其实还不是很了解。现在我们需要稍微了解一下理论知识,然后才能继续,先从h.264数据讲起。H.264数据结构解析:NALU可以简单认为就是一帧视频数据(我们暂且先这样认定),那么h264的结构就是一帧帧数据排列下去,帧与帧直接用StartCode隔开,StartCode说明:如果该NALU对应的slice为一帧的开始则用4位字节
- 从零开始学习音视频编程技术(35) windows下编译并调试ffmpeg
雲天之巔
从零开始学习音视频编程技术
前面介绍了Linux下编译ffmpeg的方法,考虑到大部分时候测试ffmpeg功能都是使用的windows系统(至少我是这样的),因此将战场重新转移到windows上。前面写了那么多的代码,但都只是简单的调用了ffmpeg的API,并不知道他内部是如何实现的。如果可以在调试的时候打个断点就可以进入ffmpeg代码调试看看实现该好友多好!梦想总是要有的,万一实现了呢!百度了一下发现可以做到,下面就来
- 从零开始学习音视频编程技术(二十二) FFMPEG Qt视频播放器之BUG修复
雲天之巔
从零开始学习音视频编程技术
======新增功能Begin=======2017-12-07更新:1.打开视频黑屏,无法打开视频问题2.暂停出现吱吱声3.界面新增拖动大小功能4.新增暂停的时候跳转画面跟着变。下载地址:http://download.csdn.net/download/qq214517703/101490332019-3-22更新:【V1.8.0】Qt5.6.2(vs2013)+ffmpeg2.5.2+SDL
- 从零开始学习音视频编程技术(34) Linux篇之编译ffmpeg
雲天之巔
从零开始学习音视频编程技术
水了这么多篇,是时候开始干正事了。Linux基础知识已经掌握了,现在可以开始编译ffmpeg了:一、下载ffmpeg首先下载ffmpeg的源代码,ffmpeg所有版本源代码下载地址:http://ffmpeg.org/releases/截至本文编写时,ffmpeg最新版本是3.3,但我们还是一如既然的使用2.5.6.2.5.6下载地址:http://ffmpeg.org/releases/ffmp
- 从零开始学习音视频编程技术(一) 视频格式讲解
双鱼大猫
引言所谓视频,其实就是一张一张的图片连续放出来的,就像幻灯片一样,由于人眼的惰性,只要图片的数量足够多,就会觉得是连续动作。所以,只需要讲一张一张的图片保存下来,这样就可以构成一个视频了。但是由于目前网络控件的限制,直接存储视频肯定不行。举个例子:在视频聊天中,假定从摄像头采集的图片每张200KB,每秒发送大概30帧图片,这样每秒钟需要的流量就是6M(以为这需要48M的宽带),显然这要求太高了。于
- 从零开始学习音视频编程技术(31) Linux篇之hello world
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=30Linux和window在使用上有一定的区别,百度上搜一下如何学习Linux都会有各种书籍推荐,呼声最高的就是《鸟哥的linux私房菜》,有兴趣的可以搞一本看看,当初我也买了一本(然而买回来之后并没有看多少页,纯属浪费钱)。因此本人不建议通过看书来学习linux的使用,古语有云:“熟能生巧”,可以说,任
- 从零开始学习音视频编程技术(二十一) 录屏软件开发之最终完善
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=28上面我们已经生成了录屏的视频,然而这个视频并不是理想中的那样,随时时间的增加,音视频会越来越不同步。原因就是因为保存视频的方式采用的是固定帧率的方式,既时间戳间隔也是固定的。举个栗子:假如视频的帧率是10,就是每秒钟10张图像,那么这十张图像是平均分布的,位置分别是:0.1s、0.2s...0.9s、1
- 从零开始学习音视频编程技术(二十) 录屏软件开发之录屏生成MP4
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=27到这里我们已经知道如何生成视频文件了。接下来就用屏幕图像和麦克风的声音合成视频。首先是使用ffmpeg获取屏幕图像,捕获屏幕一样使用libavdevice。在Windows系统使用libavdevice抓取屏幕数据有两种方法:gdigrab和dshow。1).使用gdigrabgdigrab是FFmpe
- 从零开始学习音视频编程技术(十九) 录屏软件开发之YUV AAC合成MP4
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=26我们已经获取到了屏幕的图像和麦克风的声音,现在就将它们合并一个普通的视频文件。所谓视频,其实就是一种容器,里面以某种固定的格式放置了视频和音频数据(比如我们前面生成的H264和AAC)。先来感受一下FLV的格式:也就是说只需要按上面规定的方式把图像和音频数据写入文件,最后生成的文件就是一个FLV视频文件
- 从零开始学习音视频编程技术(十八) 录屏软件开发之编码AAC
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=24光阴似箭,日月如梭。时间过的可真快。。。一转眼大半年就过去了,差点就忘记学习了。。学习贵在坚持和积累,然而就是很难做到坚持。。不知不觉已经半年没有更新了,对不住大家了,赶紧继续更新。。之前讲到了使用ffmpeg读取麦克风并保存成PCM文件。传送门获取到了PCM之后,下一步当然是编码生成AAC了。与之前说
- 从零开始学习音视频编程技术(十七) 录屏软件开发之音频采集
雲天之巔
从零开始学习音视频编程技术
前面讲解了如何使用libavdevice采集摄像头图像同样libavdevice也可以采集麦克风的声音。下面就讲解麦克风声音的采集:采集声音和采集摄像头本质上没有多大的却别,基本上就是换个名字:首先还是一样注册libavdevice:1avdevice_register_all();然后打开音频设备:12345678QStringaudioDeviceName=QStringLiteral("au
- 从零开始学习音视频编程技术(十三) 录屏软件开发之屏幕录像
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=17上一节讲解了摄像头的采集,初步掌握了libavdevice的使用。现在接着使用libavdevice来采集屏幕的图像。在Windows系统使用libavdevice抓取屏幕数据有两种方法:gdigrab和dshow。1.gdigrabgdigrab是FFmpeg专门用于抓取Windows桌面的设备。非常
- 从零开始学习音视频编程技术(十二) 录屏软件开发之视频采集
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=15前面讲解了视频播放器的开发,初步掌握了使用FFMPEG解码音视频。现在我们就接着讲解使用FFMPEG来编码音视频,主要是实现一个录屏软件的制作。一个录屏软件的流程基本就是:图像采集图像编码将解码好的图像封装成视频图像的采集:FFmpeg中有一个和多媒体设备交互的类库:Libavdevice。使用这个库可
- 从零开始学习音视频编程技术(六) FFMPEG Qt视频播放器之显示图像
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=9前面讲解了如何用FFMPEG解码视频。现在,我们就着手用FFMPEG+Qt写一个视频播放器吧:由于现在我们需要显示图像了,因此现在开始需要使用QtGUI工程了。创建工程的时候记得选择QtGUI应用。引用FFMPEG请参考前面的文章,这里不再介绍。做过图像界面开发的都知道,任何耗时的操作都不能放在主线程进行
- 从零开始学习音视频编程技术(四) FFMPEG的使用
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=7音视频开发中最常做的就是编解码的操作了,以H.264为例:如果想要自己实现编码h.264,需要对H.264非常的了解,首先需要查看H.264的文档,这个文档好像说是三百多页(本人并没有看过)。想到这,你还写的下去么。算了吧!好在H264的编码器,有人已经写好了,而且还提供了源代码。主流的h264编码器有x
- 从零开始学习音视频编程技术(一) 视频格式讲解
雲天之巔
从零开始学习音视频编程技术
原文地址:http://blog.yundiantech.com/?log=blog&id=4所谓视频,其实就是将一张一张的图片连续的放出来,就像放幻灯片一样,由于人眼的惰性,因此只要图片的数量足够多,就会觉得是连续的动作。所以,只需要将一张一张的图片保存下来,这样就可以构成一个视频了。但是,由于目前网络和存储空间的限制,直接存储图片显然不可行。举个例子:在视频聊天中,假定从摄像头采集的图片每张大
- log4j对象改变日志级别
3213213333332132
javalog4jlevellog4j对象名称日志级别
log4j对象改变日志级别可批量的改变所有级别,或是根据条件改变日志级别。
log4j配置文件:
log4j.rootLogger=ERROR,FILE,CONSOLE,EXECPTION
#log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE=org.apache.l
- elk+redis 搭建nginx日志分析平台
ronin47
elasticsearchkibanalogstash
elk+redis 搭建nginx日志分析平台
logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态等都有日志文件进行记录。其次,需要有个队 列,redis的l
- Yii2设置时区
dcj3sjt126com
PHPtimezoneyii2
时区这东西,在开发的时候,你说重要吧,也还好,毕竟没它也能正常运行,你说不重要吧,那就纠结了。特别是linux系统,都TMD差上几小时,你能不痛苦吗?win还好一点。有一些常规方法,是大家目前都在采用的1、php.ini中的设置,这个就不谈了,2、程序中公用文件里设置,date_default_timezone_set一下时区3、或者。。。自己写时间处理函数,在遇到时间的时候,用这个函数处理(比较
- js实现前台动态添加文本框,后台获取文本框内容
171815164
文本框
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w
- 持续集成工具
g21121
持续集成
持续集成是什么?我们为什么需要持续集成?持续集成带来的好处是什么?什么样的项目需要持续集成?... 持续集成(Continuous integration ,简称CI),所谓集成可以理解为将互相依赖的工程或模块合并成一个能单独运行
- 数据结构哈希表(hash)总结
永夜-极光
数据结构
1.什么是hash
来源于百度百科:
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
- 乱七八糟
程序员是怎么炼成的
eclipse中的jvm字节码查看插件地址:
http://andrei.gmxhome.de/eclipse/
安装该地址的outline 插件 后重启,打开window下的view下的bytecode视图
http://andrei.gmxhome.de/eclipse/
jvm博客:
http://yunshen0909.iteye.com/blog/2
- 职场人伤害了“上司” 怎样弥补
aijuans
职场
由于工作中的失误,或者平时不注意自己的言行“伤害”、“得罪”了自己的上司,怎么办呢?
在职业生涯中这种问题尽量不要发生。下面提供了一些解决问题的建议:
一、利用一些轻松的场合表示对他的尊重
即使是开明的上司也很注重自己的权威,都希望得到下属的尊重,所以当你与上司冲突后,最好让不愉快成为过去,你不妨在一些轻松的场合,比如会餐、联谊活动等,向上司问个好,敬下酒,表示你对对方的尊重,
- 深入浅出url编码
antonyup_2006
应用服务器浏览器servletweblogicIE
出处:http://blog.csdn.net/yzhz 杨争
http://blog.csdn.net/yzhz/archive/2007/07/03/1676796.aspx
一、问题:
编码问题是JAVA初学者在web开发过程中经常会遇到问题,网上也有大量相关的
- 建表后创建表的约束关系和增加表的字段
百合不是茶
标的约束关系增加表的字段
下面所有的操作都是在表建立后操作的,主要目的就是熟悉sql的约束,约束语句的万能公式
1,增加字段(student表中增加 姓名字段)
alter table 增加字段的表名 add 增加的字段名 增加字段的数据类型
alter table student add name varchar2(10);
&nb
- Uploadify 3.2 参数属性、事件、方法函数详解
bijian1013
JavaScriptuploadify
一.属性
属性名称
默认值
说明
auto
true
设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传。
buttonClass
”
按钮样式
buttonCursor
‘hand’
鼠标指针悬停在按钮上的样子
buttonImage
null
浏览按钮的图片的路
- 精通Oracle10编程SQL(16)使用LOB对象
bijian1013
oracle数据库plsql
/*
*使用LOB对象
*/
--LOB(Large Object)是专门用于处理大对象的一种数据类型,其所存放的数据长度可以达到4G字节
--CLOB/NCLOB用于存储大批量字符数据,BLOB用于存储大批量二进制数据,而BFILE则存储着指向OS文件的指针
/*
*综合实例
*/
--建立表空间
--#指定区尺寸为128k,如不指定,区尺寸默认为64k
CR
- 【Resin一】Resin服务器部署web应用
bit1129
resin
工作中,在Resin服务器上部署web应用,通常有如下三种方式:
配置多个web-app
配置多个http id
为每个应用配置一个propeties、xml以及sh脚本文件
配置多个web-app
在resin.xml中,可以为一个host配置多个web-app
<cluster id="app&q
- red5简介及基础知识
白糖_
基础
简介
Red5的主要功能和Macromedia公司的FMS类似,提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器。它由Java语言编写,使用RTMP作为流媒体传输协议,这与FMS完全兼容。它具有流化FLV、MP3文件,实时录制客户端流为FLV文件,共享对象,实时视频播放、Remoting等功能。用Red5替换FMS后,客户端不用更改可正
- angular.fromJson
boyitech
AngularJSAngularJS 官方APIAngularJS API
angular.fromJson 描述: 把Json字符串转为对象 使用方法: angular.fromJson(json); 参数详解: Param Type Details json
string
JSON 字符串 返回值: 对象, 数组, 字符串 或者是一个数字 示例:
<!DOCTYPE HTML>
<h
- java-颠倒一个句子中的词的顺序。比如: I am a student颠倒后变成:student a am I
bylijinnan
java
public class ReverseWords {
/**
* 题目:颠倒一个句子中的词的顺序。比如: I am a student颠倒后变成:student a am I.词以空格分隔。
* 要求:
* 1.实现速度最快,移动最少
* 2.不能使用String的方法如split,indexOf等等。
* 解答:两次翻转。
*/
publ
- web实时通讯
Chen.H
Web浏览器socket脚本
关于web实时通讯,做一些监控软件。
由web服务器组件从消息服务器订阅实时数据,并建立消息服务器到所述web服务器之间的连接,web浏览器利用从所述web服务器下载到web页面的客户端代理与web服务器组件之间的socket连接,建立web浏览器与web服务器之间的持久连接;利用所述客户端代理与web浏览器页面之间的信息交互实现页面本地更新,建立一条从消息服务器到web浏览器页面之间的消息通路
- [基因与生物]远古生物的基因可以嫁接到现代生物基因组中吗?
comsci
生物
大家仅仅把我说的事情当作一个IT行业的笑话来听吧..没有其它更多的意思
如果我们把大自然看成是一位伟大的程序员,专门为地球上的生态系统编制基因代码,并创造出各种不同的生物来,那么6500万年前的程序员开发的代码,是否兼容现代派的程序员的代码和架构呢?
- oracle 外部表
daizj
oracle外部表external tables
oracle外部表是只允许只读访问,不能进行DML操作,不能创建索引,可以对外部表进行的查询,连接,排序,创建视图和创建同义词操作。
you can select, join, or sort external table data. You can also create views and synonyms for external tables. Ho
- aop相关的概念及配置
daysinsun
AOP
切面(Aspect):
通常在目标方法执行前后需要执行的方法(如事务、日志、权限),这些方法我们封装到一个类里面,这个类就叫切面。
连接点(joinpoint)
spring里面的连接点指需要切入的方法,通常这个joinpoint可以作为一个参数传入到切面的方法里面(非常有用的一个东西)。
通知(Advice)
通知就是切面里面方法的具体实现,分为前置、后置、最终、异常环
- 初一上学期难记忆单词背诵第二课
dcj3sjt126com
englishword
middle 中间的,中级的
well 喔,那么;好吧
phone 电话,电话机
policeman 警察
ask 问
take 拿到;带到
address 地址
glad 高兴的,乐意的
why 为什么
China 中国
family 家庭
grandmother (外)祖母
grandfather (外)祖父
wife 妻子
husband 丈夫
da
- Linux日志分析常用命令
dcj3sjt126com
linuxlog
1.查看文件内容
cat
-n 显示行号 2.分页显示
more
Enter 显示下一行
空格 显示下一页
F 显示下一屏
B 显示上一屏
less
/get 查询"get"字符串并高亮显示 3.显示文件尾
tail
-f 不退出持续显示
-n 显示文件最后n行 4.显示头文件
head
-n 显示文件开始n行 5.内容排序
sort
-n 按照
- JSONP 原理分析
fantasy2005
JavaScriptjsonpjsonp 跨域
转自 http://www.nowamagic.net/librarys/veda/detail/224
JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的
- 使用connect by进行级联查询
234390216
oracle查询父子Connect by级联
使用connect by进行级联查询
connect by可以用于级联查询,常用于对具有树状结构的记录查询某一节点的所有子孙节点或所有祖辈节点。
来看一个示例,现假设我们拥有一个菜单表t_menu,其中只有三个字段:
- 一个不错的能将HTML表格导出为excel,pdf等的jquery插件
jackyrong
jquery插件
发现一个老外写的不错的jquery插件,可以实现将HTML
表格导出为excel,pdf等格式,
地址在:
https://github.com/kayalshri/
下面看个例子,实现导出表格到excel,pdf
<html>
<head>
<title>Export html table to excel an
- UI设计中我们为什么需要设计动效
lampcy
UIUI设计
关于Unity3D中的Shader的知识
首先先解释下Unity3D的Shader,Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软的FX文件或者NVIDIA的CgFX有些类似。传统意义上的vertex shader和pixel shader还是使用标准的Cg/HLSL 编程语言编写的。因此Unity文档里面的Shader,都是指用ShaderLab编写的代码,
- 如何禁止页面缓存
nannan408
htmljspcache
禁止页面使用缓存~
------------------------------------------------
jsp:页面no cache:
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cach
- 以代码的方式管理quartz定时任务的暂停、重启、删除、添加等
Everyday都不同
定时任务管理spring-quartz
【前言】在项目的管理功能中,对定时任务的管理有时会很常见。因为我们不能指望只在配置文件中配置好定时任务就行了,因为如果要控制定时任务的 “暂停” 呢?暂停之后又要在某个时间点 “重启” 该定时任务呢?或者说直接 “删除” 该定时任务呢?要改变某定时任务的触发时间呢? “添加” 一个定时任务对于系统的使用者而言,是不太现实的,因为一个定时任务的处理逻辑他是不
- EXT实例
tntxia
ext
(1) 增加一个按钮
JSP:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
Stri
- 数学学习在计算机研究领域的作用和重要性
xjnine
Math
最近一直有师弟师妹和朋友问我数学和研究的关系,研一要去学什么数学课。毕竟在清华,衡量一个研究生最重要的指标之一就是paper,而没有数学,是肯定上不了世界顶级的期刊和会议的,这在计算机学界尤其重要!你会发现,不论哪个领域有价值的东西,都一定离不开数学!在这样一个信息时代,当google已经让世界没有秘密的时候,一种卓越的数学思维,绝对可以成为你的核心竞争力. 无奈本人实在见地