自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(147)
  • 收藏
  • 关注

原创 Jenkins使用httpRequest插件报错unable to find valid certification path to requested target

原因:JVM未能找到对方网站的证书解决方案:手动下载对方网站的证书并添加到JVM的信任列表中解决步骤:找出jenkins运行的JVM,进入其jre/lib/security目录使用openssl导出对方网站的证书:openssl s_client -connect xxxx.xxx.com:443 | openssl x509 -out xxx.cert将生成的xxx.cert证书添加...

2020-04-27 14:58:59 882

原创 一条命令解压当前目录下所有rpm包

find . -type f -print0 | xargs -0 -I x sh -c 'rpm2cpio x | cpio -idv'说明:find -print0表示将find到的文件以null字符分开,而xargs -0表示将null当做分隔符,参考xargs -I x表示将x当做变量,表示从find命令获得的一个参数如果xargs后的命令同样需要使用管道,那么需要将其放在一条...

2020-03-27 14:41:33 1146

原创 yocto依赖关系小结

首先说明,yocto中的依赖本质上是任务之间的依赖,即使是使用DEPENDS或者RDEPENDS定义的两个recipe之间的依赖关系,但实际上在yocto运行时依赖关系还是会体现在这两个recipe中的task之间,即在运行时,yocto会将recipe之间的依赖解析成task之间的依赖。task之间的依赖关系可以分为两种:属于同一个recipe的task之间的依赖或者属于不同recipe的ta...

2020-03-21 14:25:17 4646

原创 yocto运行时依赖规则

动态库依赖。yocto在do_package时会保存每个包提供的.so文件等信息,在运行时,如果检测到包A链接了包B提供的.so文件,那么会自动把B添加到A的依赖中pc文件依赖。yocto在构建时会使用pkgconfig生成包的*.pc文件,如果包A的*.pc文件中出现了Require:字样指向包B提供的,那么会自动把B添加到A的依赖中根据1、2两条规则,如果A依赖了B,B依赖了C,那么A会...

2020-03-19 20:50:46 1311

原创 Git实用技巧

git log -all:查看所有分支上的日志。默认情况下只查找当前分支的日志。git log -S:查看有关某个关键字的日志,如git log -Spasswordgit branch -vv:查看本地分支与上游分支的对应关系git branch -r/-a/[None] --contains commit_id:查看某个commit_id在哪个分支上提交的。什么参数都不加代表查找本地分...

2019-11-19 10:38:43 254

原创 解决WSL中文件owner全部为root的问题

在/etc/wsl.conf中添加内容如下:[automount]enabled = trueoptions = "metadata"mountFsTab = false重启windows,再登录WSL的bash就会发现文件所有者变成了登录时的用户名...

2019-10-19 22:38:45 1165

原创 vim 正则替换

在正则表达式中以\(和\)括起来的部分,在后面可以使用\1、\2来访问。如将file.endswith(".h")替换成suffix == ".h",可以使用命令:1,$s/file.endswith(\(.*\))/suffix == \1/gc...

2019-10-17 18:53:38 293

原创 Git命令笔记

git checkout -b {tag}:从tag标签检出一条新的分支并切换到该分支git checkout -B {branch}:如果已存在同名分支,强制检出并切换到该分支,覆盖原同名分支git checkout -f {branch}:切换到目标分支,原有分支上暂存区的修改被丢弃...

2019-09-26 15:53:18 196

原创 patch参数记录

在遇到打了一次补丁之后继续运行patch命令时,patch会提示Reversed (or previously applied) patch detected! Assume -R? [n]。对此:-t:该参数遇到这种情况直接将打过补丁的文件恢复原样,即未打补丁之前的状态-f:该参数遇到这种情况则继续打补丁,当然一般情况下会报错,毕竟对比不一致了-N:忽略该文件...

2019-09-03 16:38:45 4998

原创 Docker容器启用systemctl

在docker ubuntu18.04的image中安装jenkins并启动之后发现没有反应。使用service命令也看不出来什么有用的信息,于是想到用systemctl启动,这样可以使用journalctl -xe查看具体的出错信息。但是运行之后说没有systemctl这个命令,首先进行安装apt install systemd。systemd是最近流行的linux启动服务管理工具,基本上替换了...

2019-08-27 10:25:25 3175

原创 Linux中脚本执行方式

直接执行:使用绝对/相对路径,或者bash + script.sh的方式运行脚本,脚本会使用一个新的bash环境来运行,即该脚本在原bash的子进程中运行,因此脚本中定义的变量不会在原bash中出现使用source/.的方式执行:使用source命令或者小数点来运行脚本,该脚本会在原有bash中执行...

2019-08-14 16:01:25 616

原创 Vim常用快捷键整理

光标移动:h:向左j:向下k:向上l:向右space:向右一个字符n(数字)+space:向右n个字符gg/1G:第一行G:最后一行nG:移动到第n行n+Enter:向下移动n行0:移动到行首$:移动到行尾Ctrl+f:向下一页Ctrl+b:向上一页Ctrl+u:向上半页Ctrl+d:向下半页搜索及替换:/word:向下搜索word,使用n来向下寻找,N向...

2019-08-13 20:10:40 376

原创 两台linux电脑互相传输文件的简单方法

接收方:nc -l -p port > a.txt,使用nc工具监听一个端口号发送方:nc ip port < a.txt,向地址为ip的port端口发送文件

2019-04-24 20:03:48 551

原创 Docker环境配置ffmpeg nvidia加速

Docker环境是ubuntu 16.04 xenial,实际上是tensorflow/tensorflow:1.13.1-gpu-py3的image。主机为ubuntu 19.04,,刚release就把笔记本系统升级,也是没谁了。。显卡为小米笔记本上的垃圾MX150,CUDA版本为10,nvidia driver版本为418.56。使用docker run运行tensorflow的imag...

2019-04-21 17:01:23 10092 1

原创 Spring 5 Reactive WebClient 添加请求及响应的interceptor

Spring 5 Reactive WebClient 添加请求及响应的interceptor百度鹰眼返回的数据使用WebClient发送时不知道为什么是text/javascript类型的,所以想在webclient上添加一个拦截器,把response header的content-type修改成application/json。本来以为只是一个 函数调用的事,在stackoverflow上面...

2018-11-22 14:36:39 4040

原创 ubuntu 18.04 鼠标多功能键绑定键盘按键

首先安装两个软件包:sudo apt install xbindkeyssudo apt install xautomation然后在命令行输入xev | grep button,这个是用来检测鼠标的键对应的编号,如下所示:jia@jia:~$ xev | grep button state 0x0, button 1, same_screen YES sta...

2018-07-31 13:50:06 5793 2

原创 JDK锁的基础--AQS实现原理(三)

本文主要来分析一下AQS共享模式锁的获取和释放,AQS其实只是一个框架,它主要提供了一个int类型的state字段,子类继承时用于存储子类的状态,并且提供了一个等待队列以及维护等待队列的方法。至于如何使用这个状态值和等待队列,就需要子类根据自己的需求来实现了。以Semaphore类为例,Semaphore允许多个线程同时获得信号量先来看一下Semaphore的接口: //Semaphore

2018-04-11 13:27:37 1170 1

原创 JDK锁的基础--AQS实现原理(二)

上文介绍了AQS的一些基础知识,包括CLH锁的原理和AQS的一些数据结构,这篇文章中我们来分析一下AQS的方法。AQS是一个抽象类,定义了几个模板方法交给子类去实现,分别是:protected boolean tryAcquire(int arg) protected boolean tryRelease(int arg)protected int tryAcquireShared(int a

2018-04-09 21:39:04 861

原创 JDK锁的基础--AQS实现原理(一)

AQS全称是AbstractQueuedSynchronizer,是jdk中用来实现锁的基础框架,比如ReentrantLock、ReadWriteLock以及Condition的实现和AQS密切相关。说到AQS,等来介绍一下CLH锁,CLH锁是用来实现自旋锁的一种方式,其大概原理是用一个队列把等待锁的线程保存起来,自旋等待。但是CLH比较特别的地方在于,在某种程度上,每个节点的行为是由其前驱节点的

2018-04-09 16:08:20 1886 2

转载 cglib原理解析

先放上示例代码://Person.javapublic class Person { public void sayHello() { System.out.println("Hello!"); }}//Test.javaimport org.objectweb.asm.ClassWriter;import net.sf.cglib.proxy....

2018-03-29 17:07:48 2259

原创 Cglib的几种Callback简介

Callback是Cglib中一个比较核心的概念,看一下下面的示例代码:import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;public class T

2018-03-28 10:55:24 5142 3

原创 ApplicationContext和BeanFactory

首先要明白两点:BeanFactory和ApplicationContext都是容器,也就是放置所有Java Bean对象的地方,而且它们的关系是ApplicationContext继承自 BeanFactory。BeanFactory的最重要的一个方法是getBean(),调用这个方法会返回给你一个已经完全初始化好的对应的bean对象,不需要你自己去硬编码对象的创建逻辑和创建过程,这样做...

2018-03-25 12:15:21 344

原创 最长公共子字符串的java语言求解及内存优化

动态规划的本质是以空间换时间:把一个问题划分成许多子问题,如果这些子问题会被计算很多次,那就把它们的计算结果存储起来以节省计算时间。比如斐波那契数列的公式F(n) = F(n-1) + F(n-2),其中F(n-1)和F(n-2)的结果会被计算很多次,所以可以使用一个数组存储对应的结果a[i] = F(i)。动态规划问题求解的一般步骤是先划分子问题、找出状态转移方程、找出边界条件然后计算。在最长公共

2018-03-22 16:58:32 545

原创 二叉树输出全部路径问题的非递归式解决方案

问题:对于一棵二叉树,输出所有从根结点到叶子结点的路径。主要思路是和二叉树的非递归式后序遍历差不多,都是先用一个栈来存储已经访问过的结点,直至遍历完它自己、它的左子树、它的右子树。但是后序遍历和其它两种遍历方式还是有些不同,前序遍历的过程是:结点入栈-->访问结点-->访问左子树-->返回结点-->结点出栈-->访问右子树;中序遍历的过程是:结点入栈-->访问左子树-->返回结点-->访问结点-->

2018-03-22 14:26:06 2170

原创 Spring5源码阅读--如何解决循环依赖?

首先要明确的是,循环依赖有以下几种:构造函数的循环依赖。这种依赖显然是解决不了的。非单例Bean的循环依赖。这种依赖也是解决不了的。单例Bean的循环依赖。本文介绍的就是如何解决单例Bean的循环依赖的问题。先来看一下测试代码,为了省略篇幅去掉setter和getter代码://Car.javapackage beans;public class Car { String name

2018-03-19 16:14:28 1454 1

原创 使用VisualVM对IDEA调优(JDK1.8 )

众所周知IDEA的启动是很慢的,最近看了书上对Eclipse启动进行调优的案例,也想对IDEA调整一下,首先贴出来IDEA默认的参数:-Xms128m-Xmx750m-XX:ReservedCodeCacheSize=240m-XX:+UseConcMarkSweepGC-XX:SoftRefLRUPolicyMSPerMB=50-ea-Dsun.io.useCanonCaches...

2018-03-14 22:21:11 6697 1

原创 数独问题的Java语言求解

数独问题有一个很重要的概念是“相关20格”,就是指一个单元格它的同行、同列以及同一个小九宫格的共计20个小单元格 。每个单元格的变化只会直接影响它的相关20格。 首先为每个单元格建立一个候选列表,并且初始化的时候用已经给出的提示数对每个单元格的候选列表进行排除。然后循环对每个单元格进行试数,每进行一次试数,就需要更新这个单元格的相关20格的候选列表,如果这个单元格的相关20格中某个单元格的候选列

2018-03-11 18:47:31 905

原创 有向图的拓朴排序及AOE网关键路径算法的Java语言实现

import java.util.*;public class CriticalPath { static class Graph { int num; //顶点个数 Vertex[] vertices; //顶点数组 public Graph(int num) { this.num = num; ...

2018-03-10 17:06:15 1274 1

原创 爱因斯坦的思考题Java语言求解

题目是这样的,有五个不同颜色的房间排成一排,每个房间里分别住着一个不同国籍的人,每个人都喝一种特定品牌的饮料,抽一种特定品牌的烟,养一种宠物。没有任意两个人的任意属性值是相同的。问:是谁在养鱼? 下面是给出的15条线索。英国人住在红色的房子里;瑞典人养狗作为宠物;丹麦人喝茶;绿房子紧挨着白房子,在白房子的左边;绿房子的主人喝咖啡;抽Pall Mall牌香烟的人养鸟;黄色房子里的人抽Du

2018-03-09 16:32:49 1041

原创 KM算法解决指派(匹配)问题的Java语言实现

KM算法是一个解决最大最小权匹配的经典算法。能解决的问题比如分配几个不同的工人完成不同的工作,求解怎样使得工厂的经济效益最高,建图就是每个工人完成每个工作对应的经济效益。还有一些建图比较复杂的问题,比如poj3686:有n个订单m个车间,每个车间均可以单独完成任何一个订单;每个车间完成不同订单的时间是不同的;不会出现两个车间完成同一个订单的情况;给出每个订单在某个车间完成所用的时间;求解订单完成的最

2018-03-09 09:35:44 3587 1

原创 匈牙利算法的Java语言实现

匈牙利算法的一个重要概念是增广路径,具体思路是对于图的每个顶点都寻找其增广路径,然后将其加入匹配顶点当中,而对于每个顶点A寻找增广路径的过程中,如果另一个顶点B和顶点A有连接且在此轮循环中没有被访问过,则进行下一步处理:如果顶点B没有匹配的顶点或者虽然有匹配的顶点但是能找出另一个匹配的顶点C而把当前匹配的顶点让给顶点A,则把顶点A和顶点C匹配,而顶点B也在递归的过程中更改了匹配顶点,如此下去。关于匈

2018-03-08 19:11:50 3854

原创 三个水桶等分8升水的Java语言求解

题目:有三个容积分别是8升、5升和3升的水桶,其中容积为8升的水桶中有8升水,其它两个水桶是空的。三个水桶都没有刻度,问如何在不借助其它工具的情况下只使用这三个桶把8升水等分。思路:把某一时刻三个水桶的水量称之为一个状态,则初始状态为{8, 0, 0},结束状态为{4, 4, 0}。可以使用穷举法,从初始状态开始,根据状态变化的可能性(引起状态变化的操作)遍历所有可能的状态,每当找到一个从初始...

2018-03-08 10:37:50 2160 1

原创 Linux内核读取文件流程源码及阻塞点超详解

以linux内核3.13版本为例,首先内核通过系统调用read(),执行sys_read()函数,在文件linux/fs/read_write.c中://linux/fs/read_write.cSYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count){ struct fd f = fdget(fd

2018-01-30 21:12:19 2651 1

原创 Linux文件系统的页缓存

Linux系统内核为文件提供了一个缓存,目的是将一些磁盘上的数据缓存到RAM中,这样可以加快文件数据的访问——给定inode索引节点和文件页面偏移量时,可以快速地找到RAM中相应的文件页内容。这个能在称为页缓存(page cache)。使用页缓存的I/O操作称为buffer I/O,默认情况下内核都使用的是buffer I/O,但是有的应用(如数据库)不希望使用内核缓存,而是由应用提供缓存,这种由应

2018-01-26 19:02:15 2161

原创 Linux内核等待队列详解

等待队列用于管理应等待某个条件成立或者事件发生而防人之心不可无的进程。进程发出的请求暂时无法满足的时候,需要将进程阻塞直到条件成立。内核将因相同原因而阻塞的进程集中在一个队列上,该队列就是等待队列,对于每个需要等待的事件都有一个相应的等待队列。等待队列采用链表的方式来存储,各个阻塞进程作为节点存储在链表中。链表头的类型是wait_queue_head_t,节点类型为wait_queue_t,如下所

2018-01-25 16:45:34 2182

原创 Linux向进程发送信号及执行信号处理函数的时机

Linux内核中由于不同原因(例如非法地址、按下Ctrl+C、用户进程系统调用等等)向进程发送信号的函数调用路径最后公用的函数是send_signal(),这个函数位于linux-3.13/kernel/signal.c文件中。这个函数接下来的调用链为complete_signal()->signal_wake_up()->signal_wake_up_state()->wake_up_state

2018-01-23 21:16:59 1786

原创 Linux内核进程调度函数schedule()的触发和执行时机

内核的调度操作分为触发和执行两个部分,触发时仅仅设置一下当前进程的TIF_NEED_RESCHED标志,执行的时候则是通过schedule()函数来完成进程的选择和切换。当前进程的thread_info->flags中TIF_NEED_RESCHED位表示需要调用schedule()函数进行调度。内核在两种情况下会设置该标志,一个是在时钟中断进行周期性的检查时,另一个是在被唤醒进程的优先级比正在运行

2018-01-22 20:07:42 2124 3

原创 CPU缓存实现方式:VIVT、VIPT和PIPT

处理器在进行存储器访问时,处理器访问的是虚拟地址,经过TLB和MMU的映射,最终变成了物理地址。那么在查询cache组的时候,需要使用虚拟地址的索引域或者物理地址的索引域(Index),同样地,在查询到cache组之后,可以使用虚拟地址的标记域或者物理地址的标记域(Tag)来匹配cache line. cache可以设计成通过虚拟地址或者物理地址来访问,这个在处理器设计的时候已经确定下来,可以分成如

2018-01-05 13:22:14 10390

原创 Jackson @JsonView注解自定义返回POJO类的字段

Jackson在Spring框架中可以用来将数据以JSON的格式返回给客户端,@JsonView注解可以作用在POJO类的属性上,用来自定义返回的类的字段,比如一个用户类,有时只需要返回ID,有时却需要返回ID和姓名:public class User { public interface IDView {}; public interface IDAndNameView exten

2018-01-04 14:47:33 2235

原创 Netty基本组件模型简单说明

Netty的基本组件包括Channel、ChannelHandler、ChannelPipeline和EventLoop。其中,Channel可以看做是一个连接(相当于一个Socket),在其上会有传入和传出的数据。Netty使用事件来通知状态的改变或者操作的状态,比如连接到远程主机、对方发送过来数据等等,而ChannelHandler就是用来处理这些事件的组件,在ChannelHandler中实现

2017-10-19 21:24:51 1224

空空如也

空空如也

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

TA关注的人

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