内存映射

(十)Linux 网络编程之ioctl函数

旧街凉风 提交于 2019-12-25 03:12:26
1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的信息,所以,我们有必要了解一下ioctl函数的具体实现. 2.相关结构体与相关函数 #include int ioctl(int d,int request,....); 参数: d-文件描述符,这里是对网络套接字操作,显然是套接字描述符 request-请求码 省略的部分对应不同的内存缓冲区,而具体的内存缓冲区是由请求码request来决定的,下面看一下具体都有哪些相关缓冲区。 (1)网络接口请求结构ifreq struct ifreq{ #define IFHWADDRLEN 6 //6个字节的硬件地址,即MAC union{ char ifrn_name[IFNAMESIZ];//网络接口名称 }ifr_ifrn; union{ struct sockaddr ifru_addr;//本地IP地址 struct sockaddr ifru_dstaddr;//目标IP地址 struct sockaddr ifru_broadaddr;//广播IP地址 struct sockaddr ifru_netmask;//本地子网掩码地址 struct sockaddr ifru

初识MyBatis

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-24 13:57:29
MyBatis框架   MyBatis是一个优秀的数据持久层框架,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。其封装性要低于Hibernate,性能优秀,并且小巧、简单易学,现在应用也越来越广泛。 数据持久化概念   数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如,文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。 MyBatis框架简介   MyBatis是一个开源的数据持久层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。这样做的好处是将SQL与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改SQL。   MyBatis的前身是iBatis,本身是Apache的一个开源项目,2010年这个项目有Apache Software Foundation迁移到了Google Code,并改名为MyBatis。2013年迁移到Github。 ORM介绍   ORM(Object/Relational

第七章:集合类

北慕城南 提交于 2019-12-24 05:24:53
7.1集合概述 类可以存储任意类型的对象,并且长度可变,统称为集合。这些类都位于java.util包中。 集合按照其存储结构可以分为两大类,即单列集合Collection和双列集合Map,这两种集合的特点具体如下。 Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是list和set。其中,list的特点是元素有序、元素可重复。set的特点是元素无序并且不可重复。list接口的主要实现类有ArrayList和LinkedList,set接口的主要实现类有HashSet和TreeSet。 Map:双列集合类的根接口,用于存储具有键(Key)、值(Value)映射关系的元素,每个元素都包含一对键值,在使用Map集合时可以通过指定的Key找到对应的value,例如根据一个学生的学号就可以找到对应的学生。Map接口的主要实现类有HashMap和TreeMap。 7.2 Collection接口 Collection是所有单列集合的父接口。 Collection接口的方法 Boolean add(Object o):向集合中添加一个元素 Boolean addAll(Collection c):将指定Collection中的所有元素添加到该集合中 Void clear():删除该集合中的所有元素 Boolean remove(Object

Map获取键值

纵饮孤独 提交于 2019-12-24 01:45:04
Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。 Map的接口 Map---实现Map Map.Entry--Map的内部类,描述Map中的按键/数值对。 SortedMap---扩展Map,使按键保持升序排列 关于怎么使用,一般是选择Map的子类,而不直接用Map类。 下面以HashMap为例。 public static void main(String args[]) { HashMap hashmap = new HashMap(); hashmap.put("Item0", "Value0"); hashmap.put("Item1", "Value1"); hashmap.put("Item2", "Value2"); hashmap.put("Item3", "Value3"); Set set = hashmap.entrySet(); Iterator iterator = set.iterator(); while (iterator.hasNext() { Map.Entry mapentry = (Map.Entry) iterator.next(); System.out.println(mapentry.getkey() + "/" + mapentry.getValue()); } } 注意

Mybatis常见面试题总结

泄露秘密 提交于 2019-12-23 08:31:48
1、什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。 (2)MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 (3)通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。 2、Mybaits的优点: (1)基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。 (2)与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接; (3)很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。 (4

进程间通信(IPC)

给你一囗甜甜゛ 提交于 2019-12-23 00:31:14
以下是阿鲤对Linux下进程间通信的总结,希望对大家有所帮助;若有误请慷慨指出。 因为每一个进程都要有一个独立的虚拟地址空间,在保证了进程的独立性同时,却使得进程间无法通信;所以必须要借助一定的方法进行进程间通信,阿鲤在这里主要介绍以下几种通信方式(以下均为SystemV标准) 1:管道 -- 用于进程间的数据传输 2:共享内存 -- 用于进程间的数据共享 3:消息队列 -- 用于进程间的数据传输 4:信号量 -- 用于时间进程间控制 注:以下的代码实现均为centos7环境; 一:管道 -- 用于进程间的数据传输 1:本质: 通过让多个进程都能访问到同一块内核中的缓冲区,通过半双工通信实现数据传输 (半双工通信:方向可选择的单项通信) 2:分类: 匿名管道 和 命名管道 3:匿名管道: 这块内核中的缓冲区没有标识符 3.1: 因为匿名管道没有标识符,故只能用于具有亲缘关系之间的进程通信; 3.2: 在创建管道时,操作系统会提供两个操作句炳(文件描述符),其中一个用于从管道读取数据,一个用于向管道写入数据;但是我们在使用时往往会关闭一个使用一个 3.3: 我们都知道子进程是通过复制父进程进行创建的所以,子进程也会复制到父进程所创建管道的操作句柄,故父子进程便可以通过父进程所创建的匿名管道进行进程间通信。 3.4: int pipe(int pipefd[2]): 创建一个匿名管道

第三季-第18课-共享内存通讯

不打扰是莪最后的温柔 提交于 2019-12-21 22:34:21
第18课-共享内存通讯 18.1 基本概念 共享内存是IPC机制中的一种. 顾名思义,它允许两个不相关的进程访问同一段内存,这是传递数据的一种非常有效的方式。即,可以让进程A和B同时访问一段内存。 18.2 函数学习 1. 创建/获取共享内存 (1)函数名 shmget (2)函数原型 int shmget(key_t key, size_t size ,int shmflg); (3)函数功能 创建或者获取共享内存,并返回其描述符。(allocates a shared memory segment)。 (4)所属头文件 #include<sys/ipc.h> #include<sys/shm.h> (5)返回值 成功:返回创建或者获取到的共享内存的描述符 失败:-1 (6)参数说明 key:共享内存的键值 size:共享内存的大小 shnflg:打开标志,如果使用了IPC_CREAT这个标志,就会新创建一个共享内存。 2. 映射共享内存 (1)函数名 shmat (2)函数原型 void *shmat(int shmid, const void *shmaddr, int shmflg); (3)函数功能 把shmid指定的共享内存映射到进程的地址空间里。(shared memory operations)。 (4)所属头文件 #include<sys/types.h>

使用内存映射开发高性能进程间消息通信组件

喜你入骨 提交于 2019-12-21 20:07:59
原文: 使用内存映射开发高性能进程间消息通信组件 一、背景   项目开发中免不了各模块或系统之间进行消息通信,目前热门的消息中间件有Redis、RabbitMQ、Kafka、RocketMQ等等。 以上几种组件中Redis在消息队列方面表现还可以,但是如果涉及发布订阅功能,就不行了,最近项目就使用了redis的发布订阅, 每秒只能发出几千条,虽然目前绰绰有余,但是瓶颈可以预期。   其余的几种都是比较重量级的消息中间件,什么跨平台、分布式、集群、支持N种协议等等,很高大全, 我们可能就只使用了其中1、2个功能。严格来说,项目中集成这几种MQ的工作量是不小的,对于中小型系统来说,可能维护MQ 稳定的工作量都比项目还大,难度也高,所有功能用全了的程序员恐怕不多。   从长远考虑出发,选择重量级MQ恐怕是板上钉钉的事,但是项目一开始就上这几种,我觉得那也是欠缺考虑的。如果项目 根本不要求跨机器通信,那杀鸡就不要用牛刀了。比如,你只是在模块之间、线程之间、进程之间,或者是在同一主机的各种不同系统之间, 其实都可以不用重量级MQ。当然你使用了也没事,看个人选择。   最近的项目有这么个场景,采集近所有底层设备,每个设备有点3000个,总共20多万个点需要采集上来。刚开始使用了Redis的发布订阅, 但是程序毫无疑问地挂了,根本带不起来;因为程序启动时每个点的值都是从0变成N,就需要发消息出来

LINQ入门(完结篇)

心已入冬 提交于 2019-12-21 19:00:01
来自森大科技官方博客 http://www.cnsendblog.com/index.php/?p=175 GPS平台、网站建设、软件开发、系统运维,找森大网络科技! http://cnsendnet.taobao.com 到现在为止你还未触碰LINQ,那进来吧 —— LINQ入门(完结篇) 前 言   各种懒惰,各种拖沓,终究是要动笔写终结篇了,在这个系列的前几篇文章里我们主要学习linq的基础语法以及他对内存数据的操作等,那么本篇文章我们将讨论学习最为大家所熟悉的,也是最受争议的 Linq To SQL,再次强调,如果你到目前为止认为LinqToSql就是linq的话,有以下几种方式可共君选择:1.把这个系列的前面几篇文章给读了。2.到菜市场卖块豆腐给撞了。3.(MM可以忽略跳过哈)把屁股洗干净,让大家把你菊花给爆了。 用 意   Linq To Sql 相对现在来说,不可否认它已经过时了,伴随着vs2010和Entity Fromwork 4的出现,linq to sql 退出历史舞台是必然的,因为EF4比之更强大更完善。但是linq to sql 并不是一无是处,有很多东西它与EF4是相通的,简单的了解linq to sql并无害处,并且还可以对EF4有一定的过渡帮助。   由于这个主题能讲的内容非常多,篇幅关系不能全部说完,在这里只能简单地向大家分享个大概,敬请谅解。 目

软件架构学习小结

让人想犯罪 __ 提交于 2019-12-21 07:17:39
软件架构 设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使设计的项目尽量效率高,开发容易,维护方便,升级简单。本文从 架构师职责、 软件架构定义、设计架构、评估架构、架构管理 等方面来描述了解软件架构的含义和怎样设计软件架构。 一、软件架构师的职责 架构师分为以下几大类:业务架构师、主题领域架构师、技术架构师、项目架构师( J2EE 架构师、 .NET 架构师等)、系统架构师。 1 、架构师的职责主要体现 架构师的职责就是设计一个公司系统的基础架构,并提供关于怎样建立和维护系统的指导方针。具体来讲,架构师的职责主要体现在以下几方面: 1 )、负责公司系统的架构设计、研发工作。 2 )、承担从业务向技术转换的桥梁作用。 3 )、协助项目经理制定项目计划和控制项目进度。 4 )、负责辅助并指导系统分析开展设计工作。 5 )、负责组织技术研究和攻关工作。 6 )、负责组织和管理公司内部的技术培训工作。 7 )、负责组织及带领公司内部员工研究与项目相关的新技术。 8 )、管理技术支撑团队并给项目、产品开发实施团队提供技术保障。 9 )、理解系统的业务需求,制定系统的整体框架(包括、技术框架和业务框架)。 10 )、对系统框架相关技术和业务进行培训,指导开发人员开发。并解决系统开发、运行中出现的各种问题。 2 、构架设计师必须具备的技能 经验:既包括在问题领域的经验