自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 mybatis基础

SSM三层结构:SpringMvc,Spring,Mybatis定义是一个持久层框架,封装了jdbc的源码,将sql语句与xml或者注解来配置和映射SQL信息ORM定义对象-关系映射,用于把对象模型表示的对象映射到基于SQL的关系型数据库结构中。这样操作数据库的时候,只需要操作对象的实体与属性方法。mybatis只是一个半自动化的ORM关联查询一对一:association标签一对多:collection标签延迟加载延迟加载也称为懒加载,在进行关联查询的时候,推迟关联对象

2021-10-21 17:13:42 103

原创 Happens-Before原则

1.原则综述:前一个操作的结果可以被后续操作获取2.遵循规则1)程序次序规则单一线程内,一段代码执行结果是不变的2)管程锁定规则多线程环境中,对于同一个锁,后获取锁的线程都能看到前一个线程的操作结果3)volatile变量规则对于一个volatile变量,前面线程所做的操作对后面线程必然可见4)线程启动规则主线程A与其启动得子线程B,则A在启动B之前所有的内存操作,对B可见5)线程终止规则主线程A与其启动得子线程B,如果B线程终止,则B线程终止前的所有内存操作

2021-08-07 10:36:49 111

原创 并发系列2-- 线程基础

线程和进程的概念

2021-06-15 15:53:27 104

原创 并发系列1-- JAVA并发基础

一.并发三要素1.可见性一个线程对共享变量进行修改,另外一个线程能够立刻看到。由cpu缓存引起的问题2.原子性多个连续操作,执行过程中视为整体,不能被其他任务打断。常见于数据库的数据更新 x=10 //具有原子性,线程执行这个语句会直接将数值写入内存3.有序性编译器、指令、内存会对执行顺序进行重新排序二、JVM解决并发问题1.JVM内存模型规范JVM按照需求禁用缓存和编译优化的方法: volatile、synchronized和final关键...

2021-06-08 16:13:06 139 2

原创 netty基础与应用

定义netty是一款异步的事件驱动的网络应用程序框架,支持快速开发可维护的高性能面向协议的服务器。netty提供了对TCP/IP、UDP和文件传输的支持,具有高并发,传输快和封装好的优点。高并发:netty基于NIO开发的网络通信框架,并发性能得到了提升。传输快:netty基于NIO的零拷贝,接受数据时,开辟一块内存直接从IO读取数据到ByteBuf,操作时直接操作ByteBuf,加快了传输速度。封装好:隐藏了很多NIO的细节,提供了易于使用的API,提供心跳、重连机制、拆包、粘包等处理

2020-09-01 16:52:08 166

原创 CAS原理

CAS(compare-and-Swap)简介比较替换,是一种实现并发算法的常用技术其核心是Usafe类,内部的方法都是native方法,这些方法可以直接操作内存中的数据,访问系统底层。public class AtomicInteger extends Number implements java.io.Serializable { private static final long serialVersionUID = 6214790243416807050L; // s

2020-08-10 14:08:20 110

原创 HashMap源码剖析

HashMap数据结构数组定义transient Node<K,V>[] table;链表节点定义static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next;...}树节点定义static final class TreeNode<K,V.

2020-08-06 21:05:10 178 1

原创 数据结构-树基础知识

二叉树性质第i层节点不超过2i-1深度为h的二叉树最多节点数为2h-1二叉树叶子节点为N0,度为2的节点为N2,则N0=N2+1具有n个节点的完全二叉树深度为二叉排序树/二叉查找树(BST binary search/sort tree)左节点小于根节点,右节点大于根节点。对其做中序遍历,是有序集合平衡二叉树(AVL树)左右两个子树高度差不超过1,并且子树全都为平衡二叉树。目的是为了减少查找次数,提高查找速度平衡因子左树的高度减去右树的高...

2020-08-06 16:32:29 266

原创 JVM基础知识详解

1.JVM内存模型蓝色为进程共享,黄色为线程共享-Xms 为jvm启动时分配的内存,比如-Xms200m,表示分配200M-Xmx 为jvm运行过程中分配的最大内存,比如-Xms500m,表示jvm进程最多只能够占用500M内存-Xss 为jvm启动的每个线程分配的内存大小,默认JDK1.4中是256K,JDK1.5+中是1M程序计数器较小的内存空间,当前线程的所执行的字节码的行号指示器,通过此来选取下一条所需要的执行的字节码指令,分支、循环、跳转、异常处理、线程恢复都需要依..

2020-08-04 11:30:47 213

原创 ElasticSearch原理与实践

1.数据结构 名称 描述 与关系型数据库对应 Index(索引) 就有类似特性的文档集合,是一个存储方案,必须全小写 数据库 Type(l类型) 是索引的内部逻辑分区,对应的是不同业务的存储逻辑 表 Document(文档) 是Lucene索引和搜索的原子单位,基于json表示 .

2020-07-30 11:22:05 250

原创 OpenCV在Ubuntu和Linux系统下的使用

1安装cmake-qt-gui:sodo apt-get install cmake-qt-gui2. 配置cmake:进入存放opencv2.4.10的文件夹,输入cmake-gui。进入如下界面,点击configure,选择最后一个,下一步Finish之后勾选 如下两个:去掉如下两个:再次点击configu

2020-07-28 15:02:19 1627

原创 dubbo原理与实践

1.dubbo整体架构服务接口层(Service):该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。服务注册层(Reg...

2020-07-27 16:51:35 121

原创 Spring基础+思想

Spring基于IOC反转,依存于ssh框架(struts+Spring+hibernate)SSH框架简介:Struts是一款mvc开源框架,采用一个过滤器作为控制器,调用过程为:转存失败重新上传取消1.客户端初始化一个请求,指向Servlet容器2.请求经过一系列过滤器(filter)到达filterDispatcher(分发器)3.FilterDispatcher询问ActionMapper(structs.xml中配置)来映射到具体的action4.决定好调用的act..

2020-07-21 20:11:55 92

原创 kafka原理及其使用

1.broker,kafka的集群中的实例,由多个服务组成的集群2.topic,消息分类器,用于存储与分类不同的消息数据3.partition,每个topic拆分为多个partition,消息在其内部有递增序列存储(0,1,2,3,4...),partition均匀分布在集群中,增加并发能力,可设置过期时间,在linux服务器上就是一个文件夹,命名规则为topic名+有序序号生产者生产消息时,通过分配策略,将消息打上标号,放入partition消费者消费消息时,通过id(代...

2020-07-21 10:59:45 165

原创 java多线程常识

线程通常都有五种状态,创建、就绪、运行、阻塞和死亡线程三种方法:继承Thread类创建线程类,实现run方法实现Runnable接口创建线程类实现Callable接口,实现call方法,使用FutureTask包装对象,call方法可以返回值,使用FutureTask、Future配合可以异步获取执行结果。线程池运行安全保护:原子性:(atomic,synchronize),同一时刻数据只能被一个线程进行操作,对于自加和赋值等操作,volatile不能保证原子性,只能保证一个..

2020-07-17 15:06:40 99 1

原创 C++虚函数

指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。classA{public:virtualvoidprint(){cout<<"ThisisA"<<endl;}};classB:publicA{public:voidprint(){cout<<"ThisisB"<<endl;}};由于这两个类中有虚函数存在,所以编译器就会...

2020-07-15 15:08:45 103 1

原创 设计模式分类与设计原则

主要分为三大类:创建型模式:对象实例化的模式,用于解耦对象的实例化过程。单例模式:某个类只能有一个实例,提供一个全局的访问点。简单工厂:一个工厂类根据传入的参量决定创建出那一种产品类的实例。工厂方法:定义一个创建对象的接口,让子类决定实例化那个类。抽象工厂:创建相关或依赖对象的家族,而无需明确指定具体类。建造者模式:封装一个复杂对象的构建过程,并可以按步骤构造。原型模式:通过复制现有的实例来创建新的实例。结构型模式: 把类或对象结合在一起形成一个更大的结构。适配器模式:将

2020-07-15 15:00:16 93 1

转载 存储过程和函数

存储过程简介SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。存储过程的优点:(1)

2020-07-15 14:57:06 141 1

原创 imx6配置iomux

Soc芯片上有很多引脚,每个引脚对应特定的功能。例如控制电机需要控制电机的功能引脚1和引脚2,控制传感器需要控制传感器功能的引脚3和引脚4。对于使用Soc芯片的需求方来说,可能只是控制电机,或者只是控制传感器。这样Soc芯片上的4个引脚就浪费了2个引脚。为了能提供更多的功能,减少引脚的浪费,可以把引脚1,2和引脚3,4合并,通过复用引脚来解决问题。i.mx6的Soc芯片提供IOMUX机制就是用来解决引脚复用的问题。如何确定使用引脚12,还是使用引脚34,是下面要介绍的主要内容需要的概念Pad

2020-07-15 14:55:10 743

原创 ubuntu nfs常见错误解决方法

1.出现问题:reason given by server: Permission denied解决:服务器端启动一定要sudo启动,不然启动失败,服务拒绝2.出现问题:svc: failed to register lockdv1 RPC service (errno 111).lockd_up: makesock failed, error=-111mount: mounting 192.168.1.101:/home/share on /mnt/hosts failed:

2020-07-15 09:46:35 901

原创 RTC,Linux修改及查看硬件时间

#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <fcntl.h>#include <linux/rtc.h>#include <sys/time.h>#include <sys/ioctl.h>int main(int argc ,char *argv[]){ ...

2020-07-15 09:44:38 904

原创 imx6 驱动位置

emmc/sdcard 驱动 drivers/mmc/host:sdhci-esdhc-imx.c /dev/mmcblk* sdhci.c sdhci-platform.c ...

2020-07-15 09:43:35 380

原创 imx.6 gpio配置

在linux或android系统中,假如我们要配置飞思卡尔IMX6处理器的GPIO管脚,比如是GPIO_19这个管脚,那么要像这样:[cpp]view plaincopy #defineMX6Q_PAD_GPIO_19__GPIO_4_5\ (_MX6Q_PAD_GPIO_19__GPIO_4_5|MUX_PAD_CTRL(NO_PAD_CTRL)) 其中_MX6Q_PAD_GPIO_19__GPIO_4_5定义为:[cpp]...

2020-07-15 09:42:33 266

原创 Linux线程绑定

不管是线程还是进程,都是通过设置亲和性(affinity)来达到目的。对于进程的情况,一般是使用sched_setaffinity这个函数来实现,网上讲的也比较多,这里主要讲一下线程的情况。 与进程的情况相似,线程亲和性的设置和获取主要通过下面两个函数来实现:int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize,const cpu_set_t *cpuset);int pthread_getaffinity_n...

2020-07-15 09:39:17 293

原创 v4l2框架(CSI用,配合csi_module.c代码)

1、概述Video4Linux2是Linux内核中关于视频设备的内核驱动框架,为上层的访问底层的视频设备提供了统一的接口。凡是内核中的子系统都有抽象底层硬件的差异,为上层提供统一的接口和提取出公共代码避免代码冗余等好处。就像公司的老板一般都不会直接找底层的员工谈话,而是找部门经理了解情况,一个是因为底层屌丝人数多,意见各有不同,措辞也不准,部门经理会把情况汇总后再向上汇报;二个是老板时间宝贵。 V4L2支持三类设备:视频输入输出设备、VBI设备和radio设备(其实还支持更多类型的设...

2020-07-15 09:38:06 1237

原创 TCP三次握手四次挥手

TCP/IP协议三次握手与四次握手流程解析一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:图1 TCP报文格式seq是序列号,这是为了连接以后传送数据用的,ack是对收到的数据包的确认,值是等待接收的数据包的序列号。在第一次消息发送中,A随机选取一个序列号作为自己的初始序号发送给B;第二次消息B使用ack对A的数据包进行确认,因为已经收到了序列号为x的数据包,准备接收序列号为x+1的包,所以ack=x+1,同时B告诉A自己..

2020-07-14 15:45:47 3925 1

原创 websocket基础与应用

websocket是HTML5的新协议,实现了全双工服务器向客户端的通信技术,基于TCP/IP,连接时通过HTTP1.1协议,传输时通过TCPhttp与websocket区别http是短连接,请求之后会关闭连接,虽然后keepalive机制可以保持连接,但是仍然有时间段限制,每次连接都要消耗三次握手四次挥手,单向传输websocket是长连接,双向传输socket是一组接口,websocket是一个完善的应用层协议,有一套完整的API常用注解:@ServerEndp...

2020-07-14 15:41:58 73

原创 RabbitMQ基础与运用

实现了高级队列协议(AMQP),erlang语言编写,通过队列通信,无需专用连接保持链接1.运用:数据传输非阻塞操作,异步执行推送通知发布/订阅机制工作队列好处:应用解耦,异步处理,消息分发,流量削峰,监控2.特性可靠性,通过数据持久化,传输ack获取信息确认,传输确认,发布确认可集群,多个RabbitMQ服务器形成集群,组成逻辑broker灵活路由,进入消息队列前,使用Exchange路有消息,提供了多种路由,也可以将多个Exchange绑在一起,也可以实.

2020-07-14 15:39:04 128

原创 Spring IoC基础概念

Ioc:inversion of Control,控制反转、依赖注入控制的是java对象的创建与销毁,反转指的是对象控制权被反转了,将对象的控制权交给了IoC类里面使用的其他对象,不由类来创建,由IoC来创建三个约定:1.所有Bean的生命周期交由IoC容器管理2.所有被依赖的Bean通过构造方法执行注入3.被依赖的Bean需要优先创建Spring的IOC有三种注入方式 :构造器注入、setter方法注入、根据注解注入。...

2020-07-14 15:37:41 154

原创 Spring bean

BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。(1)BeanFactory:是Spring里面最底层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具有的功...

2020-07-14 15:36:46 63

原创 Spring AOP

AOP(Aspect-OrientedProgramming,面向切面编程)oop实现了建立对象的层次结构,用于模拟公共行为的一个集合。而AOP可以解决将分散的对象引入公共行为。例如日志功能、异常处理,日志平均的散步在所有对象,oop会导致大量重复代码。动态代理:对于某个类,做一些额外的处理,比如加日志,加事务,这个额外的处理并不是定义好的,是动态生成的,具有解耦意义:AOP,事务,权限,日志等实现方法:1.定义一个接口2.InvocationHandler(将实现接口的类的对象..

2020-07-14 15:35:54 111 1

原创 servlet,session等

servlet其实就是在前端和数据库之间的中间层,JSP编译之后也变成servletJSP有9个内置对象: request:封装客户端的请求,其中包含来自GET或POST请求的参数; response:封装服务器对客户端的响应; pageContext:通过该对象可以获取其他对象; session:封装用户会话的对象; application:封装服务器运行环境的对象; out:输出服务器响应的输出流对象; config:Web应用的配置

2020-07-14 15:33:50 97

原创 代理(Proxy)

是一种设计模式。通过代理访问目标对象,扩展对象的功能,多余的功能交给代理实现1.静态代理定义interface与Impl,代理实现interface,通过代理实现impl对象可以在不修改目标类的前提下,对目标进行扩展//目标对象UserDaoImpl target = newUserDaoImpl();//代理对象,把目标对象传给代理对象,建立代理关系UserDaoProxy proxy = new UserDaoProxy(target);2.动态代理动态...

2020-07-14 15:32:52 264

原创 反射

反射:访问,检测和修改本身状态的行为 在运行时判断任意一个对象所属的类。 在运行时构造任意一个类的对象。 在运行时判断任意一个类所具有的成员变量和方法。 在运行时调用任意一个对象的方法。 反射用途:1.编译器自动出现方法名,属性等2.开源框架动态配置类等,例如Spring利用xml文件配置3.获取.Class属性4.判断对象是否为某个类的实例5. 使用 Class 对象的 newInstance() 方法来创建对象对应类的实例。...

2020-07-14 15:31:09 64

原创 [MyBatis] foreach collection用法

foreach一般在使用在SQL语句的IN条件中,目的是确认某个字段是否在目的范围内。在SQL开发过程中,动态构建In集合条件查询是比较常见的用法,在Mybatis中提供了foreach功能,该功能比较强大,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内。它也允许你指定开放和关闭的字符串,在迭代之间放置分隔符。这个元素是很智能的,它不会偶然地附加多余的分隔符。格式为WH...

2018-09-20 16:20:48 1969

linux平台下运行的跟踪算法

linux平台的算法移植,通过EIM从FPGA获取摄像头的数据,然后通过跟踪算法,在ARM板上实现

2015-11-26

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

TA关注的人

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