Posts List

决定人生的是思维方式,而不是你掌握的知识

我们的思维模式会逐渐固化,要想有所改变,改变思维模式才是唯一有效的办法。 已故历史学家Will Durant和Ariel Durant花了四十年的时间研究、编纂和撰写西方文明史。他们几十年如一日的成果《The Complete Story of Civilization》字数高达几百万,总页数超过8800页,一共有11本书。 在完成这样一项艰巨的任务后,他们 ...

CLion远程调试

CLion是JetBrains出品的C++ IDE,工程管理使用cmake。除了本地调试之外,CLion还支持远程调试,本文介绍下基于CLion的远程调试的配置,远程服务器环境是CentOS。 CentOS依赖依赖 # cmake yum install cmake -y # gcc & gdb yum install gcc-c++ -y yum install gdb -y #gdbserver yum install gdb-gdbserver -y 远程设置 基本代码 调试需要本地和远程的代码一致 CMakeLists.txt cmake_minimum_required(VERSION 2.8) project(hello) set(CMAKE_CXX_STANDARD 11) add_executable(hello main.cpp) main.cpp #include ...

JVM调优之 死锁问题

一般服务端应用都是多线程的程序,它服务于多个请求,程序发生死锁后,死锁的线程处于等待状态(WAITING或TIMED_WAITING),等待状态的线程不占用cpu,消耗的内存也很有限,而表现上可能是请求没法进行,最后超时了。在死锁情况不多的时候,这种情况不容易被发现。 死锁可以使用jstack工具来查看 jps查看java ...

JVM调优之 内存泄漏问题

java会自动收回不再使用的内存,但是不要以为jvm帮我们回收了内存就不会出现内存泄漏。 程序发生内存泄漏后,进程的可用内存会慢慢变少,最后的结果就是抛出OOM错误。发生OOM错误后可能会想到是内存不够大,于是把-Xmx参数调大,然后重启应用。这么做的结果就是,过了一段时间后,OOM依然会出现。最后无法再调大最大堆内存了 ...

JVM调优之 高CPU占用问题

CPU占用过高要分情况讨论,是不是业务上在搞活动,突然有大批的流量进来,而且活动结束后cpu占用率就下降了,如果是这种情况其实可以不用太关心,因为请求越多,需要处理的线程数越多,这是正常的现象。 第二种情况,CPU占用率长期过高,这种情况下可能是你的程序存在耗CPU计算的逻辑,也可能循环次数超级多的代码,甚至是出现死循环 ...

JVM工具使用

本文介绍JVM的常用工具。 jps 用来显示Java进程。 jstack 主要用来做线程堆栈分析,常用来分析CPU和load高的问题,一般步骤如下: 找到java进程的pid ps -ef | grep java 找到Java进程中的占用cpu较高的线程的线程id top –Hp pid java进程的信息dump到本地文件中 命令:jstack -l -m pid > dump.txt jstack线程信息dump内容的 ...

陆奇:如何成为一个优秀的工程师

陆奇出席百度内部Engineering Leadership Talk。作为计算机科学博士及优秀的管理者,他提出的五点要求,对每一位百度工程师都适用。 “我们一定要有一个坚定不移的深刻的理念,相信整个世界终究是为技术所驱动的。” “有没有其他人已经解决这个问题?然后你可以把你的时间放在更好的创新上。” “做什么事情一定要做最好,一定要是做业界最强 ...

fastjson库的使用

fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 序列化 String jsonString = JSON.toJSONString(obj); 反序列化 VO vo = JSON.parseObject("...", VO.class); 泛型反序列化 import com.alibaba.fastjson.TypeReference; List<VO> list = JSON.parseObject("...", new TypeReference<List<VO>>() {}); 使用@JSONField定制序列化 注解定义 注意:1、若属性是私有的,必须有set* ...

MySQL与Spring boot对接

本文整理了下CentOS7下mysql与Spring boot对接的基本配置,Spring boot与Mybatis结合使用。 pom.xml引入依赖 引入连接mysql的必要依赖 mysql-connector-java 引入整合MyBatis的核心依赖 mybatis-spring-boot-starter <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency> 搜索mapper DAO的指定 @MapperScan @SpringBootApplication @MapperScan("net.suninf.dao") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } application.pro ...

CentOS7 安装MySQL

本文整理了下CentOS7下安装mysql的基本配置。 Docker安装 推荐使用Docker方式,非常方便,容易配置。 安装mysql service docker start docker pull mysql:5.7 docker images 运行mysql docker run -itd --name idb -v /root/suninf/datadir:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -e TZ=Asia/Shanghai -d mysql:5.7 结束docker容器 docker ps docker stop <containId> docker rm -f <containId> shell进入容器 docker exec -it idb bash 本机连接 mysql -h localhost -P 3306 --protocol=tcp -u root -p CentOS下直接安装 安装 wget https://dev.mysql.com/get/Downloads/MySQL-4.7/mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar tar -xvf mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar rpm ...

FFmpeg像素格式YUV与RGB分析

针对视频操作(如实时美颜)的时候,就会遇到处理视频的每一帧图像,图像内容在内存中存放的形式也就是像素格式。 YUV格式介绍 YUV格式有两大类:planar 和 packed 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V;将几个分量分开存,比如YUV420中,data[0]专门存Y ...

macOS下依赖自动打包脚本

macOS下,应用加载依赖的dylib或Framework需要根据rpath等信息去加载,而链接后默认依赖的路径是机器上的路径(可以通过otool命令查看),不方便打包出去使用。 下面的脚本信息能把应用依赖的dylib等拷贝到相同的输出目录,并且使用install_name_tool设置好相应的依赖,输出的目录下可以单独 ...

Homebrew使用

macOS安装开发包和应用工具,常常使用Homebrew来管理,Homebrew是基于ruby开发的、macOS下的自动化包管理器。 homebrew 更新镜像 解决默认配置访问慢的问题,参考: https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/ 安装特定版本 在线安装 brew安装好后,可以通过brew search xxx来查看是否支持包xxx 通过 brew instal xxx 就能快速执行安装 比如,安装最新的ffmpeg只要执 ...

FFmpeg时间戳整理

使用FFmpeg库进行音视频处理时,经常需要处理视频时间、编解码的dts/pts时间戳,时间的准确处理对音视频处理至关重要。 time_base 时间基(time_base)是FFmpeg中作为时间单位的概念。不同的音视频封装格式,可以使用不同的time_base。 FFmpeg内部的时间都会基于AV_TIME_BASE作为时间单位,比如A ...

macOS下编译CEF62

CEF是基于chromium的开源项目,让集成chrome的浏览器内核非常方便,而且紧跟升级的节奏,在客户端产品上广泛使用。官网其实已经打了二进制包,可以直接拿来集成。 不过有时候我们还需要自己来打包,最常见的几个原因: 需要集成音视频能力(默认打包的音视频能力很弱) 有安全漏洞,可以自己简单的集成patch,频繁升级版本不 ...