内存映射

java面试小结——框架(hibernate、MyBatis、spring、Spring MVC)

ε祈祈猫儿з 提交于 2019-12-03 08:16:06
Hibernate 什么是ORM 对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术;简单的说,ORM是通过使用描述对象和数据库之间映射的元数据(在Java中可以用XML或者是注解),将程序中的对象自动持久化到关系数据库中或者将关系数据库表中的行转换成Java对象,其本质上就是将数据从一种形式转换到另外一种形式。 持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些? 所谓”持久”就是将数据保存到可掉电式存储设备中以便今后使用,简单的说,就是将内存中的数据保存到关系型数据库、文件系统、消息队列等提供持久化支持的设备中。持久层就是系统中专注于实现数据持久化的相对独立的层面。 持久层设计的目标包括: - 数据存储逻辑的分离,提供抽象化的数据访问接口。 - 数据访问底层实现的分离,可以在不修改代码的情况下切换底层实现。 - 资源管理和调度的分离,在数据访问层实现统一的资源调度(如缓存机制)。 - 数据抽象,提供更面向对象的数据操作。 持久层框架有: - Hibernate - MyBatis - TopLink - Guzz - jOOQ - Spring Data - ActiveJDBC Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗

Mybatis面试题一

半腔热情 提交于 2019-12-03 07:26:41
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

SSH框架面试题(转)

我们两清 提交于 2019-12-03 04:50:38
Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件 2. 读取并解析映射信息,创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation 5. 持久化操作 6. 提交事务 7. 关闭Session 8. 关闭SesstionFactory 为什么要用: * 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 * Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 * hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 * hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 Hibernate是如何延迟加载? * Hibernate2延迟加载实现:a)实体对象 b)集合(Collection) * Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)

框架和事务

匿名 (未验证) 提交于 2019-12-03 00:39:02
1**** Hibernate与MyBatis 开发学习 Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。 开发工作量 针对高级查询Mybatis需要手动编写SQL语句,以及ResultMap(映射)Hibernate有良好的映射机制SQL的生成与结果映射,可以更专注于业务流程。 SQL优化方面 Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗,也可以手动Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。 扩展性方面 Hibernate与具体数据库的XMLHQL语句与具体使用的数据库无关,移植性很好。MyBatis项目中所有的SQL语句都是依赖所用的数据库的,所以不同数据库类型的支持不好。 五章 缓存机制对比 Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。 Hibernate的调优方案 制定合理的缓存策略;

教你如何迅速秒杀掉:99%的海量数据处理面试题

匿名 (未验证) 提交于 2019-12-03 00:26:01
我是慕小白, 一个专注前端/Java/Python/大数据/人工智能资源分享的技术人,我会在群里不定期免费分享一些资源,资源包括各种VIP教程(我会严格审核质量),以及书籍和优质文章。目前群是免费加入,后面会考虑会加收一点钱,当做群运营费用,用户买资料以及发红包给那些活跃的人。 程序员资源交流2群(加群需注明来意,最好可以注明自己的CSDN账号,否则不会允许加入):135948728 前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了 哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也 甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理 面试题与十个方法大总结的一般抽象性总结。 毕竟受文章和理论之限,本文将摒弃绝大部分的细节,只谈方法/模式论,且 注重用最通俗最直白的语言阐述相关问题。最后,有一点必须强调的是,全文行 文是基 于面试题的分析基础之上的,具体实践过程中,还是得具体情况具体分 析,且场景也远比本文所述的任何一种情况复杂得多。 OK,若有任何问题,欢迎随时不吝赐教。谢谢。 何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量, 就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大, 导致无法一次性装入内存。 那解决办法呢?针对时间

项目中错误类型的定义和思考

匿名 (未验证) 提交于 2019-12-03 00:21:02
现在开发业务都是微服务,api调用rpc,rpc之间互相调用。除了常规的链接失败或超时以外,还有很多业务上的错误。为了使返回的错误码容易判断和查错,通常会靠一个统一定义的错误代码映射表。其实我们平时http的各种错误码也就是一个映射表。 有一种做法是代码里写死一个映射表文件,每次有新增去修改这个文件。 但是当系统渐渐变大。业务可能会按模块进行拆分并接耦合,业务之间可能只是一个对接,代码repo不会有一个公有的错误码包。这样返回的错误就比较难定位了。再加上每次要去修改文件,彼此之间合代码还可能会出现错误码冲突,然后还要fix merge,很麻烦。 想到一个相对简单的方式,提供一个错误码的微服务,每次代码中要增加新的错误类型就向该微服务请求一个错误码。而所有服务启动时都会调用错误码微服务拉到线上所有的错误码拉到内存,这样就可以实时的保证对各种错误码的映射,可以在捕捉下游调用出错时直接用内存里的错误码映射表打印出错误类型的详细信息,如果下游做的有心的话甚至可以把可能的错误原因都列出来,便于新同学接手。 转载请标明出处: 项目中错误类型的定义和思考 文章来源: 项目中错误类型的定义和思考

以及Hibernate和Mybatis区别

匿名 (未验证) 提交于 2019-12-03 00:11:01
ORM框架? Object Relational Mapping,对象-关系映射。 项目中的业务实体有两种表现形式:对象和关系数据,即在内存中表现为对象,在数据库中表现为关系数据。 为什么需要ORM框架? ORM框架是对象关系映射,那为什么要映射mapping? 因为对象之间可以存在关联和继承关系,但是在数据库中,关系数据无法表达多对多关联和继承关系。(ps:在数据库原理中,会把逻辑上的多对多转换为多个一对关系才能实现)因此,对象和关系(业务实体的两种表现形式)想要映射正确,项目系统一般以中间件的形式,即持久层框架。 Hibernate? Hibernate是一个开源的对象关系映射框架。 它对jdbc进行了非常轻量级的对象封装,将pojo(普通的Java对象)与数据库表建立映射关系,是一个全自动的ORM框架,甚至自动生成SQL语句,自动执行。 因此,程序员可以随心所有地使用对象编程思维来操纵数据库。 Hibernate特点: Hibernate通过修改一个“持久化”对象的属性,从而修改数据库表中对应的记录数据 提供线程和进程两个级别的缓存提升应用程序性能 有丰富的映射方式将 Java对象之间的关系(POJO) 转换为 数据库表之间的关系 屏蔽不同数据库实现之间的差异。在Hibernate中只需通过“方言”的形式指定当前使用的数据库,就可以根据底层数据库的实际情况生成适合的SQL语句

Unity shader学习笔记(一)―― 渲染流程

匿名 (未验证) 提交于 2019-12-03 00:03:02
文章目录 渲染流水线 OpenGL 和 DirectX GPU做的事情 总结 渲染流水线 为了渲染一个模型,我们需要知道这个模型的每个顶点信息,有可能还需要知道由几个顶点构成的每个片元的颜色,这个颜色可能是直接指定的顶点颜色然后做的插值,也可能是用一张纹理“贴”上去,然后还要经过顶点变换,裁剪,等等操作,最后才渲染到屏幕上。为了加快这些步骤的执行,我们希望能够将这些步骤拆分成具体的几步,参考CPU指令流水线的思想,用流水线的思想加快执行。 在这些步骤中,可以分成两个部分。一部分在CPU上执行,一部分在GPU上执行。一开始模型的信息都存储在硬盘上,然后CPU要将其读取到内存中,之后设置一些渲染的状态(比如使用哪张纹理,顶点变换规则,颜色计算规则等等),然后将渲染状态和模型的顶点信息发送到显存,再发送一个指向该渲染状态的渲染命令 Draw Call ,通知GPU读取该渲染状态和模型顶点信息,开启第二部分的步骤绘制模型。而在第二部分中,又可以拆分出来两部分。总共三部分的步骤,分别如下: 应用阶段 几何阶段 光栅化阶段 其中应用阶段在CPU上执行,几何阶段和光栅化阶段在GPU上执行。这三个部分里面的十几个步骤(下文提及)最终构成了整个渲染流水线的元素。 注意上文提到的渲染命令,CPU有可能会发送多个,这些命令都会发送到一个命令缓存中,再由GPU一一读取。 OpenGL 和 DirectX

计算机硬件基础知识

◇◆丶佛笑我妖孽 提交于 2019-12-03 00:02:02
2.1 计算机硬件基础知识   2.1.1 计算机系统的组成、体系结构分类及特性       CPU和存储器的组成、性能和基本工作原理     CISC/RISC,流水线操作,多处理机,并行处理     常用 I/O 设备、通信设备的性能以及基本工作原理     I/O 接口的功能、类型和特性     I/O控制方式(中断系统、DMA、I/O处理机方式)   2.1.2 存储系统     虚拟存储器基本工作原理,多级存储体系     RAID 类型和特性   2.1.3 可靠性与系统性能评测基础知识     诊断与容错     系统可靠性分析评价     计算机系统性能评测方法      计算机体系结构分类 :     从 宏观 上按 处理机数量 进行分类,分为单处理系统、并行处理与多处理系统和分布式处理系统。     从 微观 上按 并行程度 分类:最为常见分类方式有:Flynn分类法与冯氏分类法。考试中主要考察的是Flynn分类法。        Flynn分类法 是根据指令流、数据流和多倍性三方面来进行分类的:                计算机硬件组成 :     计算机硬件系统是依照冯·诺依曼所设计体系结构,即包括 运算器 、 控制器 、 存储器 、 输入设备 和 输出设备 五大部件组成。     运算器和控制器组成中央处理器(CPU)      运算器 负责完成算术

内存管理

匿名 (未验证) 提交于 2019-12-02 23:57:01
为了让每个进程认为 独占 地使用内存,并且让每个进程看到的内存是 一致 的,操作系统对物理内存、磁盘进行了 抽象 ,抽象出 虚拟内存 。并且把虚拟内存、物理内存以相同固定大小的 ҳ 进行切分管理( 分页 ),虚拟内存中叫页,物理内存中的叫页帧。 每个进程虚拟地址空间是独立的。用户访问的是虚拟内存的地址,即虚拟地址。需要通过 CPU 芯片上的 内存管理单元 MMU 硬件根据页表 翻译 成物理地址,才能真正访问内存。 页表 :每个进程都有它的独立的页表(放在内存里),用来存对虚拟页、物理页的 映射 。页表可以有多级页表,以时间换取空间(实际上,多级页表的地址翻译,并不比单级页表慢很多)。 如果直接按一个个程序加载到内存,会出现内存 碎片 。 后来出现 分段 机制,按程序的各段来存储,从而减少碎片,但是还是有很多。 所以引出分页,把程序分成更小的页(一般大小为 4KB )来管理内存。分得更小,会增加负荷,但实际上利大于弊。 通过虚拟地址 访问 数据: MMU 先通过它里面的 TLB 缓存查询,如果没有,则去内存中的 页表 进行查询。成功翻译成物理地址后,访问 一级缓存 获取数据。如果没有则访问 二级缓存 (可能还有三级缓存)。还是没有就访问 内存 。 物理内存 不够 时: 将不用的页面换出到磁盘中的 swap 分区 里。 包含: 程序代码和静态变量(根据可执行文件进行初始化,并固定了大小