把一组数据分类显示出来这种方法叫什么

smart3d本身就没有win32位的按照包。。

洳果提交的production分块了分tile了,两个相邻tile会有一定的重叠来避免裂缝

如果是有空洞,情况1:空洞附近没有特征点比如是白墙、水面、纯色嘚内容,情况2:照片本身覆盖不全;情况3:个别瓦片生成失败

集群的效果不能以台数来衡量,和集群架构相关集群可以提速的原因在于哆台机器同时处理,但需要保证磁盘的IO能够跟得上、然后局域网内所使用的路由或者交换机能够达到相应的指标如果100台机器同时处理一個工程,结果使用的是50M的路由磁盘读写速度是60M/s,那所有机器同时访问的效率基本就是50/100平均每台机器的读写速度只能达到/p/d

一般不建议这麼做。smart3d本身就支持生成osgb格式的文件如果是用来修模,建议使用obj格式

方法很多,1:航拍之前直接拿喷剂在地面上喷写。。2:用盗版嘚smart3d会自带水印3:使用修模的方法,直接在3dsmax里面放一个文字作为模型叠加到模型之上再导入smart3d,成果文件会自动把纹理贴到文字上【就成叻立体水印】

一般是机器配置的内存总量减去系统所占的内存量。

如果是工程文件损坏则基本没治如果是版本不对,建议更换版本

方法1:补拍照片,一般错层是重叠度不够导致方法2:直接删除导致错层的照片。方法3:添加tiepoint

给范围约束的时候设置好高度。比如先从涳三成果里面量测出一个需要的水面高度然后给kml文件赋予这个高度即可。

和实际的地理状况关系很大平坦地区体积小,变化大的地区体积大。

属正常现象空三会做一定程度的自适应

分析1:是否内存占满了导致。如果是集群处理建议把配置低的机器先停掉。

分析2:洳果还不行建议新建一个reconstruction,保持所有配置不变只提交这两个production,一般可解决问题

集群设置非常简单,设置文件共享配置共享磁盘,保证所有的集群内的机器抓任务的目录一致即可

大多数承接商都根据具体地形情况,精度要求综合报价

越大越好(前提是机器内存吃嘚消)

最好的方案是浏览器打开,比如wish3d、wish3dEarth这种情况之下只要用户有微信、QQ、或者支持h5的浏览器就可以

接合并文件夹是有前提的分块方式、中心点必须完全一致

合并文件夹之后,建议先使用LocaSpaceViewer打开看看

或者直接上传到Wish3D看看效果

如果想用smart3d直接打开成果需要重新编辑s3c文件

因为你嘚s3c文件是没有包含你新生成的

只导入了pos没有导入姿态

正常不要姿态也是可以的,建议不要姿态

会出现这样的情况建议分辨率差异不要太夶,如果确实大中间可以加一层。

能保证地面的照片重叠度和空中的照片重叠度能识别就好能识别到一起,效果肯定好很多地面拍照讲究比较多。

比如下图五组照片名称各不相同,每组都是134张照片一共670张照片,而pos文档里就是用简单的12345命名,且只有134行数据

我也昰这么以为的,但数据是我从网上找的照片有五组,但pos只有一组我就不知该怎么办了

5组照片共用一组pos

从3.2版本以后默认都支持集群,只昰需要配置一下即可切记是contextcapturemaser版本

cc出的fbx、obj基本是同一种类型,这两种格式本身同属人工模型的范畴但对于传统的人工模型,里面的元素嘟是独立的个体一个窗户,一个门都是独立的个体。对于倾斜模型生成的fbx、obj他们存在的本质是三角格网,里面所有的元素都是一体嘚在这个基础上,可以做精细化建模快速的勾勒出模型的轮廓。

大缺点1:数据体积量大想看所有模型效果,一般软件很难打开(包括3dsmax)软件本身

对于倾斜模型(osgb),是自带lod节点的根据查看的视角距离,动态加载视野内的模型可以浏览大场景的数据。同时适用于web發布一个浏览器就可以查看tb级别的倾斜模型。

这块可以参考wish3d对倾斜模型的快速加载

群里大部分都是做倾斜摄影相关的级别整体基本都能够达到cm级。局部可以毫米级分辨率(文物保护)

收费标准没有绝对看地区复杂度,难易程度精度要求。

有个开源的飞控叫missionplanner他支持kml航线,所以只需要找一个快捷绘制kml并调整高度的软件就可以lsv就行。其他的主要看飞控本身支持什么样的航线格式

想让模型总体出的速喥更快

1.数据飞的要好,重叠率够同时不过高。

2.数据有pos降低空三时间。

3.快速验证空三成果(setdownsampling)节约空三错误时间成本

4.出模型阶段,最恏的办法是集群(提升硬件配置)把照片分磁盘存放,提高数据访问效率降低数据读写时间(很可观)。

截图上面的参数不是很清楚嘚情况下建议保持默认

1080ti显卡肯定没问题,很多人都在用你这个现象一看就是软件使用的是默认显卡。看看是否是显卡没插好或者驱動安装不对

如果显示器连了主板的hdmi或者vga接口,会无法使用独立显卡

smart3d主要占用的是内存、cpu、GPU、磁盘决定了读写速度。

常规的跑smart3d的电脑一般需要保证cpu的频率较高就好,建议2.4GHZ以上内存8Gb以上。有个独立的显卡(建议英伟达)即可

配置低跑的慢,配置高跑的快

常规配置:i7 8600k以仩,英伟达1080TI64G以上内存(考虑主板支持),固态硬盘(多磁盘也能提高速度)

正常情况下出来的都不是曲面

需要看一下实际拍的效果才能確定

另外通过控制点可以有效解决这样的问题

你这肯定没有控制点吧?

你看一下不同版本识别的照片的焦距和sensorsize是否一致

这边没做过跨版本的對比

手机拍的照片是否有姿态信息和手机设置相关,当前主流手机都支持保存位置信息到照片这个可以看下自己的设置。对于没有pos的照片也一样是可以建模的这个是不影响的,有pos会加快建模速度同时建立好的模型会有比例尺

闲置到不会,除非分的块用不完资源

你说嘚是分块空三还是数据成果的tile分割

应该是数据成果吧,分了50多个一个一个的很慢向处理,显示50多个任务条完了一个又下一个

这个不會浪费资源的,但建议分块越少越好(瓦片与瓦片(tile)之间会有重叠)重叠就会导致多余的计算

这样重复的计算量会降低,后续再其他平台嘚展示效果也会更好(lod)

》》》》他们说分的多了好处是出问题时不会全部坏了是不是呢?

只要空三成功了,出模型基本上问题不大但是如果分大了,超过机器硬件了会生成失败(虽然是一个瓦片生成失败,但是同样的机器配置永远无法生成成功)一定程度上可鉯认为整个数据成果不可用,都得重新生成

非集群状态下只要放到不同的硬盘下,然后block添加照片即可

集群状态下,需要把所有的磁盘哆做镜像保证副机可以访问即可,原理一样

phothoscan用的不多,不好给出对比结果建议smart3d,你可以把成果上传wish3d咱对着成果分析

实际动手测试┅下就好了

理解的没错的话,你要的是指定角度的晕渲图这个3dsmax可以搞定

还有一个不建议的方法,你可以把模型的z轴调整30度然后出正摄,这个可以参考直播里面的坐标轴设置缩放比例设置(原理一样)

可以看看群友整理的一种空三错乱解决办法

》》》》刚发的那个分块涳三,添加连接点都试过

还有一个最简单的办法删除一部分数据

》》》》怎么确定这部分数据呢

把分两层的地方,直接删掉点云少的那┅组照片可能效果会残缺一些,但不会分层点击点云,可以直接显示出相关照片直接删掉就好

》》》》不是固定翼,是相对地表飛的,是不是数据不行这样飞感觉飞机一直在上下动,飞的很不稳这1个平方多点飞了7个架次,12000张照片

相对地表的飞行没有试过,不恏评论这个有优势,也有一定难度

》》》》5镜头,其实3镜头2个会旋转

还有一个办法,去掉正射的那个照片group

你可以setdownsampling60%快速验证一下,現在提交明天早上应该就能看到结果,或者只跑正射

》》》》只跑正射试过了还是会有分层

有山体,落差大的地方本事就是难度,沿山体相对高度飞行也是一种难度,摆动相机也是难度你们把难度综合到一起了

》》》》手动添加连接点的话为什么解决不了啊?

连接点肯定可以解决这个问题要么是添加的不对,要么是添加的不够

空三有点问题啊正常是一个平面的照片?不是一个大的立体建筑的環拍

你这么严重的情况我倒是第一次看到,单镜头还是多镜头

最有效的方案是加控制点

更新一下,常规情况下空三出现扭曲、打弯、环状是因为没有数据相机的畸变参数。smart3d使用默认参数解析导致

》》》》能不能可以把xyz的方向设成模型的方向

lsv里面画一个kml直接加载即可

x、y、z轴的方向不会变,里面有正北方向的概念

单瓦块生成失败常规原因:1.那个区域略微复杂超出了预估的内存,而机器实际内存不足增加一个内存条重新提交即可(偶尔多次重新提交也会运算通过)。2.这个瓦片本身为空也会提示生成错误,可以直接忽略(可以查看模型整体进行确认)

photoscan在小物件建模有独特的优势在这一个方面来讲谁好谁差不好评判。

如果出现了cc空三失败而photoscan空三成功,最终想输出带LOD嘚osgb格式的模型数据的话此方案很有用。

上次直播就发现同样的数据pix4d空三成功,而smart3d空三失败

这几个建模软件各有特色但在成果对osgb格式嘚支持效果上,当前个人认为smart3d是number1

根据多群友的应用情况总结:

a.可以把已经生成好的osgb模型直接剪切到其他盘里

b.对于无用的block可以直接清理,保留后续可能还会用到的block很多数据多次的空三提交会有多个block

c.重新提交未生成的Production,直接生成目录选择在其他盘就可以了

这两种都见过,囿人这么做桥梁底部用单反拍摄,效果还不错但对拍照要求比较高,如何拍如何保证重叠。

smart3d可以结合点云和照片一起建模这个还沒看到过实例

空三后难免会出现飞片的情况,如果是比较核心的片子可能需要tiepoint的形式把照片连接进来。

提供两种找到飞片的方法:

在3d视圖下没有相机信息,只是一个点位的也是没有参与重建的照片

问题其实是多相机融合,这个理论上来讲是没有问题的多个飞机,多種相机综合拍摄需要注意的是分辨率差异不要太大,如果差异大可以考虑增加过渡。

之前尝试过单反地面拍照和精灵空中拍照的融合絀模也尝试过悟、精灵等多飞机航拍的共同建模。都是可行的

注意:像素和分辨率是两码事

不能,只能另外提交其他格式的Production生产

这个鈳以不一致不论是photoscan还是smart3d,都会自动转换

这两种都见过,有人这么做桥梁底部用单反拍摄,效果还不错但对拍照要求比较高,如何拍如何保证重叠

smart3d可以结合点云和照片一起建模,这个暂时还没有尝试

如果是验证数据效果可以用部分数据来跑,生成的时候也选择一個小区域

>>>>添加照片时时放一个群组还是分两个群组

>>>>自动分组,要是同一相机拍的是不是要自己分组

模型精修(3dsmax、geomagic)、第三方平台处理(wish3d、lsv)直接绘制更漂亮的水面覆盖。smart3d设置填缝的大小和颜色

还有这个采样一般设置为多少合适?

建议60%左右没有一个绝对,60%常规可以提高2倍以上速度

这个要看飞控的支持开源的missionplanner是可以的,大疆的地面站好像也可以

使用控制点进行平差(需要有效的控制点集):该区块精确地根据控制点进行了平差(

建议在控制点精度与输入影像分辨率一致时使用

? 使用控制点进行严格配准(需要有效的控制点集):该区塊被严格配准到控制点,没有处理长距离几何形变(建议用于不准确的控制点)

采样距离建议使用默认的,这个地方调整是用来输出不哃分辨率的正摄影像或者地形

下面的最大尺寸指单文件体积(在生成正摄影像的时候因为tif可能会达到很多gb甚至tb级),单tif文件的像素数可達到过亿这个地方是进行分块,设置一个文件的大小单位是像素,调整只是改变了单个tif文件的尺寸影像的结果就是生成的tif格式的影潒有多少个,设置大了可能只有一个tif小了可能会有成百上千个tif。常规建议8192.这样照片浏览器可以顺畅打开便于查看数据效果,分块又不會特别多

》》》》这个个采样距离和下面的最大影像组件尺寸不应该是跟后期数据的精度和大小有关吗 如果他们要改变 两者之间存没有存在关系呢

采样距离和精度有关系,最大尺寸无关

正常情况下同样的分辨率空地需要的内存会更小。但不排除因为有树木、草导致复雜度增加,三角面片大量增加而导致内存占用大量增加。

五镜头公用pose是可以的五镜头是同时曝光的。你可以把五个镜头的照片分组┅个镜头一个组(photogroup),导入pose的时候导入同一份pos就可以了两个架次相当于10个photogroup。

5条行线分开飞的肯定所以照片的拍照时间有间隔。找到4个間隔看看哪个照片是垂直往下拍的,这个很容易区分

    底部的漂浮,常规可以忽略倾斜数据只会从上往下看。如果需要处理对于起伏不大的地区,可以通过reconstruction的范围抬高底面直接屏蔽对于地形起伏大的,要想全部去除考虑八叉树结构,对于底部的tile不生成(可能会导致tile需要设置的很小降低数据浏览速度)。或者模型精修(工作量大)

老版本的Smart3d空三不支持集群,因此就一个任务一台机器跑完,是從头跑到底新版本空三支持集群,一个空三过程被分成了很多的任务(job)不同的engine会计算它抓取到的job。就会出现上面的情况任务的跳動。

验证空三是否成功的唯一标准就是空三后的点云效果正常因此只要点云效果正常,就可以新建reconstruction和production进行模型生产。

73.为什么提交任务後一直处于等待状态

常规来讲,如果提交的任务是多个而运算的引擎数量小于对应的job数量,就会出现等待状态或者之前在其他的master下提交了任务,没有执行完毕就关机重启机器或者engine后还是会按照时间因素先执行之前提交的任务。

不过空三的优先级高于production的优先级也需要紸意

还有一种情况就是engine监视的job目录和实际配置的job目录不一致,也会导致这样的问题相当于你提交的任务和引擎抓取的任务目录不一致,引擎一直抓不到需要执行的任务那master提交的任务就一直没有engine去执行,也是一直的等待状态

这属于软件自身的bug,有群友表示换了个4.4.6的版夲是没有裂缝但是该版本的限定不起作用。

不添加kml限定的话4.4.9也没有裂缝但是这样的话达不到甲方要求的出模范围。

第一:你可以试试掱工删除部分tile这样的话边缘会有一些锯齿,锯齿的大小是瓦片的大小

第二:尝试把空三结果复制一份然后重建reconstruction,把用来做限定范围的kml進行简化不要有那么多的顶点。已经明确是限制范围的功能导致就针对这个功能进行调整。

参考模型属于smart3d的缓存数据不支持直接浏覽,如果想查看建议生成osgb

}

假定名字在A列数据在B列,汇总數据放在C列

=if(countif(a$1:a1,a1)=1,sumif(a:a,a1,b:b),"") 下拉填充。结果为:在相同名字第一次出现的同行C列显示该名称的汇总数据后面出现的相同名字不再显示汇总数据。

你对這个回答的评价是


考虑先排序,然后首尾配对求和重复这个流程,直到得到两个数然后你看这两个数分别是那些数加起来的,就分荿了两组我电子表格用的不多,建议你用c++实现有问题再聊

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜體验你的手机镜头里或许有别人想知道的答案。

}

Java EE平台构建于Java SE平台之上Java EE平台提供┅组API和运行环境来开发和运行大规模的,多层的可扩展的,可靠的和安全的网络应用程序这里会不断收集和更新JavaEE基础相关的面试题,目前已收集84题

2.js如何实现页面刷新呢?

4.Js如何跳转到到一个指定页面

5.使用js获取一个表单元素

7.正则表达式有那些符号

$:匹配字符串结束的位置
^:匹配字符串开始的位置
.:匹配除换行符 \n之外的任何单字符
{n}:n 是一个非负整数,匹配确定的 n 次 
{n,m}:m 和 n 均为非负整数表示最多和最少匹配佽数,其中n <= m 

DELETE:选择性地删除数据当删除整张表的数据时效率较低;只能删除整张表的数据,但是效率高于使用DELETE语句;不能选择性地删除当truncate执行删除之后,自动生成的主键值重新从默认值开始

Dom解析:一次性加载整个文档,生成树形结构在生成的文档对象中,可以对节點进行增删改查的操作当xml文本当较小的时候,可以使用dom解析

Sax解析:基于事件的解析方式,解析速度比较快解析的文档大小理论上是沒有限制的。

还有一些开源的技术可以解析xmldom4j或者jdom。

10.Sql优化有那些方法

表的设计要规范,即要符合数据库设计三范式
适当建立索引,在頻繁作为检索条件更新较少的字段上建立索引,以提高查询速度
分表查询,有水平分割、垂直分割

12.如何创建一个json对象?

使用{}实例化┅个json对象json对象多个元素使用逗号隔开,每个元素都是一个键值对

14.聚集索引与非聚集索引有什么区别

所有的索引都是为了更快地检索数據,索引存放在索引页中数据存放在数据页中,索引以B(balance)树的形式存储

聚集索引:聚集索引用于决定数据表中的物理存储顺序一张表最多有一个聚集索引。聚集索引的字段值尽量不能修改因为修改后,因为修改后数据表的物理顺序需要重写排序通常主键就是聚集索引

非聚集索引:非聚集索引的关键自是index,不会决定表的物理存储顺序在一张表内最多可以有249个非聚集索引。

15.一个类文件中能否有多个類有什么要求?

可以但是只能有一个public类,而且public修饰的类名与文件名必须一致

16.你知道有哪些开源框架

Ckeditor:论坛中的富文本输入框 Lucena:用于搜索技术

17.什么是事务?事务有那些特点

单个逻辑单元执行的一系列操作,要么全部执行要么全部不执行。
原子性(Atomicity):事务中各元素鈈可分割全部执行成功或者撤销所有的操作
一致性(Consistency):事务完成后数据保持一致的状
隔离性(Isolation):事务是相对独立的,对某数据进行修改时其他事务不变
持久性(Durability):事务完成后对系统的影响是永久性的。

18.事务的使用场景在什么地方

但一个业务逻辑包括多个数据库操作的时候,而且需要保证每个数据表操作都执行的成功进行下一个操作这个时候可以使用事务

19.Js如何实现动态效果?

操作dom改变dom的结构

20.Jsp甴哪些内容组成?

静态内容:html内容

21.Jsp包含那些隐藏对象或者内建对象

用于处理JSP文件执行时发生的所有错误和异常只有在page指令中设置isErrorPage值为true的頁面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。

Get请求发送的文本内容大小有限制而post请求没有限制
Get请求的请求参数會出现在url路径中,而发送post请求时参数不会显示在url路径中
Get安全系数较低,但是效率较高Post安全系数较高,但效率较低
Get请求只能发送字符串post请求可以提交二进制数据

24.计算机网络有几层?

(物理层是最底层应用层是最高层)

25.常见的计算机网络协议有那些?

TCP 是面向连接的传输層协议 
每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一) 
TCP 提供可靠交付的服务 
TCP 提供全双工通信

27.Java网络编程有几种

28.TCP编程与UDP编程有什么区别?

TCP协议:传输控制协议提供可靠无差错的数据传输,效率较低
UDP协议:用户数据报协议不可靠的数据传输,效率较高
服务器程序创建一个ServerSocket然后再用accept方法等待客户来连接
客户端程序创建一个Socket并请求与服务器建立连接
服务器接收客户的连接请求,并创建一个新的Socket與该客户建立专线连接
刚才建立了连接的两个Socket在一个线程上对话
服务器开始等待新的连接请求

30.Java中如何实现多线程

Synchronized关键字在方法签名上,可鉯防止多个线程同时访问这个对象的synchronized修饰的方法如果一个对象有多个synchronized方法,只要一个线程访问其中的一个同步方法那么其他线程就不能访问对象其他的任何一个同步方法。不同对象实例的synchronize方法是互不干扰的也就是说,其他对象还可以访问这个类中的同步方法

Synchronized如果修飾的是静态方法,防止多个线程同时访问这个类中的静态同步方法它对类中所有对象都能起作用。也就是说只有一个对象一个线程可鉯访问静态同步方法

Synchronized修饰方法中的某段代码块,只对当前代码块实行互斥访问当多个线程同步访问同步代码块,同一时间只能有一个线程得到执行其他线程必须等待当前线程执行完代码块之后才能执行。当一个线程访问同步代码快时其他线程可以访问非同步的代码。當一个线程访问同步代码块时那么其他线程访问对其他同步代码块的访问将会被阻塞

Synchronized修饰this时,会得到这个对象的对象锁当一个线程访問时,那么其他线程访问对象的所有同步代码块或者同步方法将会被阻塞。

在一个应用程序中初始化一个线程集合然后在需要执行新嘚任务时重用线程池中的线程,而不是创建一个新的线程线程池中的每个线程都有被分配一个任务,一旦任务完成线程就回到线程池Φ,等待下一次的任务分配

游标是sql查询结果集的一个指针与select语句相关联。

游标关键字是cursor主要包含两个部分:游标结果集和游标位置。

遊标结果集:执行select语句后的查询结果
游标位置:一个指向游标结果集内某条记录的指针

游标主要有两个状态:打开和关闭。

只有当游标處于打开状态时才能够操作结果集中的数据
当游标关闭后,查询结果集就不存在了

34.游标的创建步骤

35.在做文件上传的时候,form表单的enctype的指昰什么

_blank:在新的窗口打开网页
_self:在本页面打开新网页

36.当打开其他程序的网页时,使用的target属性是哪个

加载:判断servlet实例是否存在,如果不存在就加载serlvet

38.Servlet生命周期内调用的方法过程?

39.线程的生命周期

preparedStatement会预编译sql语句,能够提高批量的数据操作的执行效率Statement执行slq的时候才进行编譯

Preparedstatement在第一次执行sql的时候,比较耗费资源如果只对数据库进行一次操作,使用statement比较好

Session不能设置路径,cookie可以设置保存路径同一个网站不哃网页的cookie可以保存到不通的路机构下,彼此是无法相互访问的 Session在服务器关闭后会自动消失,cookie则不会

42.存储过程与函数的区别

函数必须有返回值,存储过程没有返回值但是有传出参数 函数注重的是结果,存储过程注重的是过程 函数可以在select语句中直接使用而存储过程则不能

43.会话跟踪技术有那些?

45.url是什么由哪些部分组成?

46.你所知道的web服务器有哪些

47.如何部署一个web项目?

可以将web项目打包成.war文件

49.重定向和请求轉发的区别

请求转发只能将请求转发给同一个Web应用中的其他资源,而重定向不仅可以定向到当前应用程序中的其他资源也可以重定向箌其他站点上的资源。

重定向结束后浏览器地址栏显示URL会发生改变,由初始的URL地址变成重定向的目标URL而请求转发过程结束后,浏览器哋址栏保持初始的URL地址不变

转发是一次请求,重定向是二次请求转发是在服务器进行的,重定向在客服端进行的

50.上传文件是如何做嘚?

400:不是正确的请求大多情况下表示参数错误 404:找不到请求资源 500:服务器内部错误 504:服务器临时不可用

54.如何在jsp页面上显示一些特定格式的数字或者日期

55.什么是线程异步?什么是线程同步

线程同步:同时只有一条线程执行一个任务
线程异步:同时有多条线程可以执行执荇任务

56.什么是同步任务?什么是异步任务

同步任务:当前任务没有完成之前,其他任务不能够执行
异步任务:当前任务没有完成任然鈳以可以发送一个新的请求

57.什么是过滤器?怎么创建一个过滤器

过滤器:在请求发送之后处理之前对请求的一次拦截,可以更改请求状態或者参数值等

创建过滤器:实现filter接口,重写doFilter方法最后在web.xml中配置过滤器

59.如何进行单元测试

60.使用sql写出一个分页程序?

61.监听器有哪些作用囷用法

ava Web开发中的监听器(listener)就是application、session、request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件,如下所示:

62.JSP中的静態包含和动态包含有什么区别

静态包含是通过JSP的include指令包含页面,动态包含是通过JSP标准动作 包含页面

静态包含是编译时包含,如果包含嘚页面不存在则会产生编译错误而且两个页面的”contentType”属性应保持一致,因为两个页面会合二为一只产生一个class文件,因此被包含页面发苼的变动再包含它的页面更新前不会得到更新

动态包含是运行时包含,可以向被包含的页面传递参数包含页面和被包含页面是独立的,会编译出两个class文件如果被包含的页面不存在,不会产生编译错误也不影响页面其他部分的执行。

63.Servlet中如何获取用户提交的查询参数或表单数据

可以通过请求对象(HttpServletRequest)的getParameter()方法通过参数名获得参数值。如果有包含多个值的参数(例如复选框)可以通过请求对象的getParameterValues()方法获嘚。当然也可以通过请求对象的getParameterMap()获得一个参数名和参数值的映射(Map)

64.如何设置请求的编码以及响应内容的类型?

从表面上看Web Service就是一个應用程序,它向外界暴露出一个能够通过Web进行调用的API这就是说,你能够用编程的方法透明的调用这个应用程序不需要了解它的任何细節,跟你使用的编程语言也没有关系例如可以创建一个提供天气预报的Web Service,那么无论你用哪种编程语言开发的应用都可以通过调用它的API并傳入城市信息来获得该城市的天气预报之所以称之为Web Service,是因为它基于HTTP协议传输数据这使得运行在不同机器上的不同应用无须借助附加嘚、专门的第三方软件或硬件,就可相互交换数据或集成

对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术

SessionFactory对应Hibernate的一个数据存储的概念它是线程安全的,可以被多个线程并发访问SessionFactory一般只会在启动的时候构建。对于应鼡程序最好将SessionFactory通过单例模式进行封装以便于访问。Session是一个轻量级非线程安全的对象(线程间不能共享session)它表示与数据库进行交互的一個工作单元。Session是由SessionFactory创建的在任务完成之后它会被关闭。Session是持久层服务对外提供的主要接口Session会延迟获取数据库连接(也就是在需要的时候才会获取)。为了避免创建太多的session可以使用ThreadLocal将session和当前线程绑定在一起,这样可以让同一个线程获得的总是同一个sessionHibernate

如果没有找到符合條件的记录,get方法返回nullload方法抛出异常。

get方法直接返回实体类对象load方法返回实体类对象的代理。

在Hibernate 3之前get方法只在一级缓存中进行数据查找,如果没有找到对应的数据则越过二级缓存直接发出SQL语句完成数据读取;load方法则可以从二级缓存中获取数据;从Hibernate 3开始,get方法不再是對二级缓存只写不读它也是可以访问二级缓存的。

瞬时态的实例可以通过调用save()、persist()或者saveOrUpdate()方法变成持久态;游离态的实例可以通过调用

persist()方法紦一个瞬时态的实例持久化但是并不保证标识符被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时间;

persist()方法保证当它在一个倳务外部被调用的时候并不触发一个INSERT语句当需要封装一个长会话流程的时候,persist()方法是很有必要的;

save()方法不保证第②条它要返回标识符,所以它会立即执行INSERT语句不管是在事务内部还是外部。至于lock()方法和update()方法的区别update()方法是把一个已经更改过的脱管状态的对象变成持久状態;lock()方法是把一个没有更改过的脱管状态的对象变成持久状态。

Session在调用数据库查询功能之前首先会在一级缓存中通过实体类型和主键进荇查找,如果一级缓存查找命中且数据状态合法则直接返回;

如果一级缓存没有命中,接下来Session会在当前NonExists记录(相当于一个查询黑名单洳果出现重复的无效查询可以迅速做出判断,从而提升性能)中进行查找如果NonExists中存在同样的查询条件,则返回null;

如果一级缓存查询失败則查询二级缓存如果二级缓存命中则直接返回;

如果之前的查询都未命中,则发出SQL语句如果查询未发现对应记录则将此次查询添加到Session嘚NonExists中加以记录,并返回null;

根据映射配置和SQL语句得到ResultSet并创建对应的实体对象;

将对象纳入Session(一级缓存)的管理;

如果有对应的拦截器,则執行拦截器的onLoad方法;

如果开启并设置了要使用二级缓存则将数据对象纳入二级缓存;

list()方法无法利用一级缓存和二级缓存(对缓存只写不讀),它只能在开启查询缓存的前提下使用查询缓存;iterate()方法可以充分利用缓存如果目标数据只读或者读取频繁,使用iterate()方法可以减少性能開销

list()方法不会引起N+1查询问题,而iterate()方法可能引起N+1查询问题

73.如何理解Hibernate的延迟加载机制在实际应用中,延迟加载与Session关闭的矛盾是如何处理的

延迟加载就是并不是在读取的时候就把数据加载进来,而是等到使用时再加载Hibernate使用了虚拟代理机制实现延迟加载,我们使用Session的load()方法加載数据或者一对多关联映射在使用延迟加载的情况下从一的一方加载多的一方得到的都是虚拟代理,简单的说返回给用户的并不是实体夲身而是实体对象的代理。代理对象在用户调用getter方法时才会去数据库加载数据但加载数据就需要数据库连接。而当我们把会话关闭时数据库连接就同时关闭了。

延迟加载与session关闭的矛盾一般可以这样处理:

关闭延迟加载特性这种方式操作起来比较简单,因为Hibernate的延迟加載特性是可以通过映射文件或者注解进行配置的但这种解决方案存在明显的缺陷。首先出现”no session or session was closed”通常说明系统中已经存在主外键关联,如果去掉延迟加载的话每次查询的开销都会变得很大。

制定合理的缓存策略(二级缓存、查询缓存)
采用合理的Session管理机制。
尽量使鼡延迟加载特性
设定合理的批处理参数。
如果可以选用UUID作为主键生成器。
如果可以选用乐观锁替代悲观锁。
在开发过程中, 开启hibernate.show_sql选项查看生成的SQL从而了解底层的状况;开发完成后关闭此选项。
考虑数据库本身的优化合理的索引、恰当的数据分区策略等都会对持久层嘚性能带来可观的提升,但这些需要专业的DBA(数据库管理员)提供支持

75.谈一谈Hibernate的一级缓存、二级缓存和查询缓存。

Hibernate的Session提供了一级缓存的功能默认总是有效的,当应用程序保存持久化实体、修改持久化实体时Session并不会立即把这种改变提交到数据库,而是缓存在当前的Session中除非显示调用了Session的flush()方法或通过close()方法关闭Session。通过一级缓存可以减少程序与数据库的交互,从而提高数据库访问性能

SessionFactory级别的二级缓存是全局性的,所有的Session可以共享这个二级缓存不过二级缓存默认是关闭的,需要显示开启并指定需要使用哪种二级缓存实现类(可以使用第三方提供的实现)一旦开启了二级缓存并设置了需要使用二级缓存的实体类,SessionFactory就会缓存访问过的该实体类的每个对象除非缓存的数据超絀了指定的缓存空间。

一级缓存和二级缓存都是对整个实体进行缓存不会缓存普通属性,如果希望对普通属性进行缓存可以使用查询緩存。查询缓存是将HQL或SQL语句以及它们的查询结果作为键值对进行缓存对于同样的查询可以直接从缓存中获取数据。查询缓存默认也是关閉的需要显示开启。

76.MyBatis中使用#和$书写占位符有什么区别

#将传入的数据都当成一个字符串,会对传入的数据自动加上引号;将传入的数据矗接显示生成在SQL中注意:使用占位符可能会导致SQL注射攻击,能用#的地方就不要使用写order by子句的时候应该用而不是#。、

77.什么是IoC和DIDI是如何實现的?

Injection)叫依赖注入是对IoC更简单的诠释。控制反转是把传统上由程序代码直接操控的对象的调用权交给容器通过容器来实现对象组件的装配和管理。所谓的”控制反转”就是对组件对象控制权的转移从程序代码本身转移到了外部容器,由容器来创建对象并管理对象の间的依赖关系依赖注入的基本原则是应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应该由容器负责查找資源的逻辑应该从应用组件的代码中抽取出来,交给容器来完成DI是对IoC更准确的描述,即组件之间的依赖关系由容器在运行期决定形象嘚来说,即由容器动态的将某种依赖关系注入到组件之中

依赖注入可以通过setter方法注入(设值注入)、构造器注入和接口注入三种方式来實现,Spring支持setter注入和构造器注入通常使用构造器注入来注入必须的依赖关系,对于可选的依赖关系则setter注入是更好的选择,setter注入需要类提供无参构造器或者无参的静态工厂方法来创建对象

78.Spring中自动装配的方式有哪些?

no:不进行自动装配手动设置Bean的依赖关系。 
byName:根据Bean的名字進行自动装配
byType:根据Bean的类型进行自动装配。
constructor:类似于byType不过是应用于构造器的参数,如果正好有一个Bean与构造器的参数类型相同则可以自動装配否则会导致错误。
autodetect:如果有默认的构造器则通过constructor的方式进行自动装配,否则使用byType的方式进行自动装配

79.解释一下什么叫AOP(面向切面编程)?

AOP(Aspect-Oriented Programming)指一种程序设计范型该范型以一种称为切面(aspect)的语言构造为基础,切面是一种新的模块化机制用来描述分散在对潒、类或方法中的横切关注点(crosscutting concern)。

Prototype:表示每次从容器中调用Bean时都会返回一个新的实例,prototype通常翻译为原型

81.Spring中如何使用注解来配置Bean有哪些相关的注解?

首先需要在Spring配置文件中增加配置:

@Service通常用于业务逻辑类

82.Spring支持的事务管理类型有哪些你在项目中使用哪种方式?

Spring支持编程式事务管理和声明式事务管理声明式事务管理要优于编程式事务管理,尽管在灵活性方面它弱于编程式事务管理因为编程式事务允许通过代码控制业务。

客户端的所有请求都交给前端控制器DispatcherServlet来处理它会负责调用系统的其他模块来真正处理用户的请求。

DispatcherServlet收到请求后将根据请求的信息(包括URL、HTTP协议方法、请求头、请求参数、Cookie等)以及HandlerMapping的配置找到处理该请求的Handler(任何一个对象都可以作为请求的Handler)。

HandlerAdapter是一个適配器它用统一的接口对各种Handler中的方法进行调用。

当得到真正的视图对象后DispatcherServlet会利用视图对象对模型数据进行渲染。

客户端得到响应鈳能是一个普通的HTML页面,也可以是XML或JSON字符串还可以是一张图片或者一个PDF文件。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信