全面指南:CAD系统中的所有变量和参数
所谓系统变量就是一些参数,这些参数有些是可以在“选项”或其他对话框中进行设置的,有些这必须通过在命令行输入变量名进行设置,当然对于高手来说,还可以通过二次开发程序来进行控制。
CAD有很多的变量,例如fill或fillmode控制填充的显示,attmode控制块属性的显示,等等,了解一些常用的系统变量,当你的图纸出现一些问题时,你可以对出现问题的原因有些初步的判断,并可以通过修改变量设置快速解决。在CAD(无论是AUTOCAD还是浩辰CAD等其他CAD)的帮助中通常有可以系统变量的介绍,随时到帮助查询也非常方便。我在网上看到一个CAD系统变量大全,放到这里,希望对您了解系统变量的作用有点帮助。
CAD的系统变量非常多,我们不可能记住所有变量的作用,我会用红色将一些大家可能会用到的变量标示出来,如果这个变量在对话框中无法设置,建议大家关注或记住,其他变量大家如果有需要时可以再查帮助或打开这篇博文里来查一查。
cad系统变量大全(变量名称 --说明)
A 系统变量
acadlspasdoc 0 仅将acad.l 加载到 autocad 任务打开的第一个图形中; 1 将 acad.lsp 加载到每一个打开的图形中
acadprefix 存储由 acad 环境变量指定的目录路径(如果有的话),如果需要则附加路径分隔符
acadver 存储 autocad 的版本号。这个变量与 dxf 文件标题变量 $acadver 不同,"$acadver" 包含图形数据库的级别号
acisoutver 控制 acisout 命令创建的 sat 文件的 acis 版本。acisout 支持值 15 到 18、20、21、30、40、50、60 和 70。
aflags 设置 attdef 位码的属性标志:0无选定的属性模式:1.不可见 2.固定4.验证.8.预置
angbase 类型:实数; 保存位置:图形 初始值:0.0000 相对于当前 ucs 将基准角设置为 0 度。
angdir 设置正角度的方向 初始值:0;从相对于当前 ucs 方向的 0 角度测量角度值。0 逆时针 1 顺时针
apbox 打开或关闭 autosnap 靶框。当捕捉对象时,靶框显示在十字光标的中心。0 不显示靶框 1 显示靶框(这个在选项对话框可以设置)
aperture 以像素为单位设置靶框显示尺寸。靶框是绘图命令中使用的选择工具。初始值:10 (这个在选项对话框可以设置)
area area 既是命令又是系统变量。存储由area 计算的最后一个面积值。
attdia 控制 insert 命令是否使用对话框用于属性值的输入:0.给出命令行提示 1.使用对话框
attmode 控制属性的显示:0 关,使所有属性不可见;1.普通,保持每个属性当前的可见性;2.开,使全部属性可见
attreq 确定 insert 命令在插入块时默认属性设置。0.所有属性均采用各自的默认值;1.使用对话框获取属性值
auditctl 控制 audit 命令是否创建核查报告 (adt) 文件:0.禁止写 adt 文件 1.写 adt 文件
aunits 设置角度单位:0.十进制度数 1.度/分/秒 2.百分度 3.弧度 4.勘测单位 (单位对话框里可以设置)
auprec 设置所有只读角度单位(显示在状态行上)和可编辑角度单位(其精度小于或等于当前 auprec 的值)的小数位数。 (单位对话框里可以设置)
autosnap 0.关(自动捕捉);1.开 2.开提示 4.开磁吸 8.开极轴追踪 16 开捕捉追踪 32 开极轴追踪和捕捉追踪提示 (状态栏可以设置,这个主要在二次开发程序中使用)
B 系统变量
backz 以绘图单位存储当前视口后向剪裁平面到目标平面的偏移值。viewmode 系统变量中的后向剪裁位打开时才有效。
bindtype 控制绑定或在位编辑外部参照时外部参照名称的处理方式:0.传统的绑定方式 1.类似“插入”方式
blipmode 控制点标记是否可见。blipmode 既是命令又是系统变量。使用 setvar 命令访问此变量:0.关闭 1.打开
BLOCKEDITLOCK 禁止打开块编辑器和编辑动态块定义。0.指定可以打开块编辑器 1.指定不可以打开块编辑器
BLOCKEDITOR 反映块编辑器是否已打开。0.指示块编辑器未打开 1.指示块编辑器已打开
C 系统变量
cdate 设置日历的日期和时间,不被保存。
cecolor 设置新对象的颜色。有效值包括 bylayer、byblock 以及从 1 到 255 的整数。
celtscale 设置当前对象的线型比例因子。
celtype 设置新对象的线型。初始值:“bylayer”
celweight 设置新对象的线宽:1.线宽为“bylayer”;2.线宽为“byblock”;3.线宽为“default”。
chamfera 设置第一个倒角距离。初始值: 0.0000
chamferb 设置第二个倒角距离。初始值: 0.0000
chamferc 设置倒角长度。初始值: 0.0000
chamferd 设置倒角角度。初始值: 0.0000
chammode 设置 autocad 创建倒角的输入方法:0.需要两个倒角距离 1.需要一个倒角距离和一个角度
circlerad 设置默认的圆半径:0.表示无默认半径。初始值:0.0000
clayer 设置当前图层。初始值:0
cmdactive 存储位码值,此位码值指示激活的是普通命令、透明命令、脚本还是对话框。
cmddia 输入方式的切换:0.命令行输入 1.对话框输入
cmdecho 控制在 autolisp 的 command 函数运行时 autocad 是否回显提示和输入:0.关闭回显 1.打开回显
cmdnames 显示当前活动命令和透明命令的名称。例如 line'zoom 指示zoom 命令在line 命令执行期间被透明使用。
cmljust 指定多线对正方式:0.上 1.中间 2.下。初始值:0
cmlscale 初始值:1.0000(英制)或 20.0000(公制)控制多线的全局宽度。
cmlstyle 设置 autocad 绘制多线的样式。初始值:"standard"
compass 控制当前视口中三维指南针的开关状态:0.关闭三维指南针 1.打开三维指南针
coords 0.用定点设备指定点时更新坐标显示 1.不断地更新绝对坐标的显示 2.不断地更新绝对坐标的显示
cplotstyle 控制新对象的当前打印样式。
cprofile 显示当前配置的名称。
ctab 返回图形中当前(模型或布局)选项卡的名称。通过本系统变量,用户可以确定当前的活动选项卡。
cursorsize 按屏幕大小的百分比确定十字光标的大小。初始值:5 (选项对话框可以设置)
cvport 设置当前视口的标识码。
D 系统变量
date 存储当前日期和时间。
dbmod 用位码指示图形的修改状态:1.对象数据库被修改 4.数据库变量被修改 8.窗口被修改 16.视图被修改
dctcust 显示当前自定义拼写词典的路径和文件名。
dctmain 显示当前的主拼写词典的文件名。
deflplstyle 指定图层 0 的默认打印样式。
defplstyle 为新对象指定默认打印样式。
delobj 控制创建其他对象的对象将从图形数据库中删除还是保留在图形数据库中:0.保留对象 1. 删除对象
demandload 当图形包含由第三方应用程序创建的自定义对象时,指定 autocad 是否以及何时按需加载此应用程序。
diastat 存储最近一次使用的对话框的退出方式:0.取消 1.确定
dimadec 1.使用 dimdec 设置的小数位数绘制角度标注;0-8 使用 dimadec 设置的小数位数绘制角度标注。(前面带dim的变量都是标注相关的变量,在标注样式对话框在属性框里都可以设置这些参数)
dimalt 控制标注中换算单位的显示:关.禁用换算单位开.启用换算单位
dimaltd 控制换算单位中小数位的位数。
dimaltf 控制换算单位乘数。
dimaltrnd 舍入换算标注单位。
dimalttd 设置标注换算单位公差值小数位的位数。
dimalttz 控制是否对公差值作消零处理。
dimaltu 为所有标注样式族(角度标注除外)换算单位设置单位格式。
dimaltz 控制是否对换算单位标注值作消零处理。dimaltz 值为 0 - 3 时只影响英尺-英寸标注。
dimapost 为所有标注类型(角度标注除外)的换算标注测量值指定文字前缀或后缀(或两者都指定)。
dimaso 控制标注对象的关联性。
dimassoc 控制标注对象的关联性。
dimasz 控制尺寸线、引线箭头的大小。并控制钩线的大小。
dimatfit 当尺寸界线的空间不足以同时放下标注文字和箭头时,本系统变量将确定这两者的排列方式。
dimaunit 设置角度标注的单位格式:0.十进制度数 1.度/分/秒 2.百分度 3.弧度
dimazin 对角度标注作消零处理。
dimblk 设置尺寸线或引线末端显示的箭头块。
dimblk1 当 dimsah 系统变量打开时,设置尺寸线第一个端点的箭头。
dimblk2 当 dimsah 系统变量打开时,设置尺寸线第二个端点的箭头。
dimcen 控制由 dimcenter、 dimdiameter 和 dimradius 命令绘制的圆或圆弧的圆心标记和中心线图形。
dimclrd 为尺寸线、箭头和标注引线指定颜色。同时控制由 leader 命令创建的引线颜色。
dimclre 为尺寸界线指定颜色。
dimclrt 为标注文字指定颜色。
dimdec 设置标注主单位显示的小数位位数。精度基于选定的单位或角度格式。
dimdle 当使用小斜线代替箭头进行标注时,设置尺寸线超出尺寸界线的距离。
dimdli 控制基线标注中尺寸线的间距。
dimdsep 指定一个单字符作为创建十进制标注时使用的小数分隔符。
dimexe 指定尺寸界线超出尺寸线的距离。
dimexo 指定尺寸界线偏移原点的距离。
dimfit 旧式,除用于保留脚本的完整性外没有任何影响。dimfit 被 dimatfit 系统变量和 dimtmove 系统变量代替。
dimfrac 在 dimlunit 系统变量设置为:4(建筑)或 5(分数)时设置分数格式,0.水平 1.斜 2.不堆叠
dimgap 当尺寸线分成段以在两段之间放置标注文字时,设置标注文字周围的距离。
dimjust 控制标注文字的水平位置。
dimldrblk 指定引线箭头的类型。要返回默认值(实心闭合箭头显示),请输入单个句点 (.)。
dimlfac 设置线性标注测量值的比例因子。
dimlim 将极限尺寸生成为默认文字。
dimlunit 为所有标注类型(除角度标注外)设置单位制。
dimlwd 指定尺寸线的线宽。其值是标准线宽。-3.bylayer -2.byblock 整数代表百分之一毫米的倍数
dimlwe 指定尺寸界线的线宽。其值是标准线宽。-3 bylayer -2 byblock 整数代表百分之一毫米的倍数
dimpost 指定标注测量值的文字前缀或后缀(或者两者都指定)。
dimrnd 将所有标注距离舍入到指定值。
dimsah 控制尺寸线箭头块的显示。
dimscale 为标注变量(指定尺寸、距离或偏移量)设置全局比例因子。同时还影响 leader 命令创建的引线对象的比例。
dimsd1 控制是否禁止显示第一条尺寸线。
dimsd2 控制是否禁止显示第二条尺寸线。
dimse1 控制是否禁止显示第一条尺寸界线:关.不禁止显示尺寸界线开.禁止显示尺寸界线
dimse2 控制是否禁止显示第二条尺寸界线:关.不禁止显示尺寸界线开.禁止显示尺寸界线
dimsho 旧式,除用于保留脚本的完整性外没有任何影响。
dimsoxd 控制是否允许尺寸线绘制到尺寸界线之外:关.不消除尺寸线开.消除尺寸线
dimstyle dimstyle 既是命令又是系统变量。作为系统变量,dimstyle 将显示当前标注样式。
dimtad 控制文字相对尺寸线的垂直位置。
dimtdec 为标注主单位的公差值设置显示的小数位位数。
dimtfac 按照 dimtxt 系统变量的设置,相对于标注文字高度给分数值和公差值的文字高度指定比例因子。
dimtih 控制所有标注类型(坐标标注除外)的标注文字在尺寸界线内的位置。
dimtix 在尺寸界线之间绘制文字。
dimtm 在 dimtol 系统变量或 dimlim 系统变量为开的情况下,为标注文字设置最小(下)偏差。
dimtmove 设置标注文字的移动规则。
dimtofl 控制是否将尺寸线绘制在尺寸界线之间(即使文字放置在尺寸界线之外)。
dimtoh 控制标注文字在尺寸界线外的位置:0或关.将文字与尺寸线对齐 1或开.水平绘制文字
dimtol 将公差附在标注文字之后。将 dimtol 设置为“开”,将关闭 dimlim 系统变量。
dimtolj 设置公差值相对名词性标注文字的垂直对正方式:0.下 1.中间 2.上
dimtp 在dimtol 或 dimlim 系统变量设置为开的情况下,为标注文字设置最大(上)偏差。dimtp 接受带符号的值。
dimtsz 指定线性标注、半径标注以及直径标注中替代箭头的小斜线尺寸。
dimtvp 控制尺寸线上方或下方标注文字的垂直位置。当 dimtad 设置为关时,autocad 将使用 dimtvp 的值。
dimtxsty 指定标注的文字样式。
dimtxt 指定标注文字的高度,除非当前文字样式具有固定的高度。
dimtzin 控制是否对公差值作消零处理。
dimunit 旧式,除用于保留脚本的完整性外没有任何影响。dimunit 被 dimlunit 和 dimfrac 系统变量代替。
dimupt 控制用户定位文字的选项。0光标仅控制尺寸线的位置 1或开光标控制文字以及尺寸线的位置
dimzin 控制是否对主单位值作消零处理。
dispsilh 控制“线框”模式下实体对象轮廓曲线的显示。并控制在实体对象被消隐时是否绘制网格。0.关 1.开
distance 存储 dist 命令计算的距离。
donutid 设置圆环的默认内直径。
donutod 设置圆环的默认外直径。此值不能为零。
dragmode 控制拖动对象的显示。
dragp1 设置重生成拖动模式下的输入采样率。
dragp2 设置快速拖动模式下的输入采样率。
dwgcheck 在打开图形时检查图形中的潜在问题。(打开非AutoCAD保存的DWG图纸是否出现提示信息,设置为0,不显示信息。)
dwgcodepage 存储与 syscodepage 系统变量相同的值(出于兼容性的原因)。(各种不同语言必须使用对应的代码页,如果代码页存储错误,可能导致文字显示乱码,这个变量是一个只读变量,就是我们自己无法设置。)
dwgname 存储用户输入的图形名。
dwgprefix 存储图形文件的驱动器/目录前缀。
dwgtitled 指出当前图形是否已命名:0.图形未命名 1.图形已命名
E 系统变量
edgemode 控制 trim 和 extend 命令确定边界的边和剪切边的方式。
elevation 存储当前空间当前视口中相对当前 ucs 的当前标高值。(如果你绘制任何图形都有Z坐标,请用此变量进行设置)
expert 控制是否显示某些特定提示。
explmode 控制 explode 命令是否支持比例不一致 (nus) 的块。
extmax 存储图形范围右上角点的值。
extmin 存储图形范围左下角点的值。
extnames 为存储于定义表中的命名对象名称(例如线型和图层)设置参数。
F 系统变量
facetratio 控制圆柱或圆锥 shapemanager 实体镶嵌面的宽高比。设置为 1 将增加网格密度以改善渲染模型和着色模型的质量。
facetres 调整着色对象和渲染对象的平滑度,对象的隐藏线被删除。有效值为 0.01 到 10.0。
filedia 控制与读写文件命令一起使用的对话框的显示。(如果打开和保存文件时不出对话框,只出命令行,请输入此变量,并将数值设置为1)
filletrad 存储当前的圆角半径。
fill或fillmode 指定图案填充(包括实体填充和渐变填充)、二维实体和宽多段线是否被填充。(如果填充不显示,请输入此命令,将数值设置为1)
fontalt 在找不到指定的字体文件时指定替换字体。
fontmap 指定要用到的字体映射文件。
frontz 按图形单位存储当前视口中前向剪裁平面到目标平面的偏移量。
fullopen 指示当前图形是否被局部打开。
G 系统变量
gfang 指定渐变填充的角度。有效值为 0 到 360 度。
gfclr1 为单色渐变填充或双色渐变填充的第一种颜色指定颜色。有效值为“rgb 000, 000, 000”到“rgb 255, 255, 255”。
gfclr2 为双色渐变填充的第二种颜色指定颜色。有效值为“rgb 000, 000, 000”到“rgb 255, 255, 255”。
gfclrlum 在单色渐变填充中使颜色变淡(与白色混合)或变深(与黑色混合)。有效值为 0.0(最暗)到 1.0(最亮)
gfclrstate 指定是否在渐变填充中使用单色或者双色. 0.双色渐变填充 1.单色渐变填充
gfname 指定一个渐变填充图案。有效值为 1 到 9。
gfshift 指定在渐变填充中的图案是否是居中或是向左变换移位.0.居中 1.向左上方移动
gridmode 指定打开或关闭栅格。0.关闭栅格 1.打开栅格(可在状态栏设置)
gridunit 指定当前视口的栅格间距(x 和 y 方向)。(可在栅格和捕捉设置对话框中设置)
gripblock 控制块中夹点的指定。0.只为块的插入点指定夹点 1.为块中的对象指定夹点
gripcolor 控制未选定夹点的颜色。有效取值范围为 1 到 255。(可在“选项”对话框中进行设置)
griphot 控制选定夹点的颜色。有效取值范围为 1 到 255。
griphover 控制当光标停在夹点上时其夹点的填充颜色。有效取值范围为 1 到 255。
gripobjlimit 抑制当初始选择集包含的对象超过特定的数量时夹点的显示。
grips 控制“拉伸”、“移动”、“旋转”、“缩放”和“镜像夹点”模式中选择集夹点的使用。
gripsize 以像素为单位设置夹点方框的大小。有效的取值范围为 1 到 255。
griptips 控制当光标在支持夹点提示的自定义对象上面悬停时,其夹点提示的显示.
H 系统变量
halogap 指定当一个对象被另一个对象遮挡时,显示一个间隙。
handles 报告应用程序是否可以访问对象句柄。因为句柄不能再被关闭,所以只用于保留脚本的完整性,没有其他影响
hideprecision 控制消隐和着色的精度。
hidetext 指定在执行 hide 命令的过程中是否处理由 text、dtext 或 mtext 命令创建的文字对象。
highlight 控制对象的亮显。它并不影响使用夹点选定的对象。
hpang 指定填充图案的角度。
hpassoc 控制图案填充和渐变填充是否关联.
hpbound 控制 bhatch 和 boundary 命令创建的对象类型。
hpdouble 指定用户定义图案的双向填充图案。双向将指定与原始直线成 90 度角绘制的第二组直线。
hpname 设置默认填充图案,其名称最多可包含 34 个字符,其中不能有空格。
hpscale 指定填充图案的比例因子,其值不能为零。(可在填充对话框中进行设置)
hpspace 为用户定义的简单图案指定填充图案的线间隔,其值不能为零。
hyperlinkbase 指定图形中用于所有相对超链接的路径。如果未指定值,图形路径将用于所有相对超链接。
I 系统变量
imagehlt 控制亮显整个光栅图像还是光栅图像边框。
indexctl 控制是否创建图层和空间索引并保存到图形文件中。
inetlocation 存储 browser 命令和“浏览 web”对话框使用的 internet 网址。
insbase 存储 base 命令设置的插入基点,以当前空间的 ucs 坐标表示。
insname 为 insert 命令设置默认块名。此名称必须符合符号命名惯例。
insunits 为从设计中心拖动并插入到图形中的块或图像的自动缩放指定图形单位值。
insunitsdefsource 设置源内容的单位值。有效范围是从 0 到 20。
insunitsdeftarget 设置目标图形的单位值有效范围是从 0 到 20。
intersectioncolor 指定相交多段线的颜色。
intersectiondispla 指定相交多段线的显示。
isavebak 提高增量保存速度,特别是对于大的图形。isavebak 控制备份文件 (bak) 的创建。
isavepercent 确定图形文件中所能允许的耗损空间的总量。
isolines 指定对象上每个面的轮廓线的数目。有效整数值为 0 到 2047。
lastangle 存储相对当前空间当前 ucs 的 xy 平面输入的上一圆弧端点角度。
lastpoint 存储上一次输入的点,用当前空间的 ucs 坐标值表示;如果通过键盘来输入,则应添加 (@) 符号。
lastprompt 存储回显在命令行的上一个字符串。
layoutregenctl 指定“模型”选项卡和布局选项卡上的显示列表如何更新。
lenslength 存储当前视口透视图中的镜头焦距长度(单位为毫米)。
limcheck 控制在图形界限之外是否可以创建对象。
limmax 存储当前空间的右上方图形界限,用世界坐标系坐标表示。
limmin 存储当前空间的左下方图形界限,用世界坐标系坐标表示。
lispinit 指定打开新图形时是否保留 autolisp 定义的函数和变量,或者这些函数和变量是否只在当前绘图任务中有效
locale 显示用户运行的当前 autocad 版本的国标准化组织 (iso) 语言代码。
localrootprefix 保存完整路径至安装本地可自定义文件的根文件夹。
logfilemode 指定是否将文本窗口的内容写入日志文件。
logfilename 为当前图形指定日志文件的路径和名称。
logfilepath 为同一任务中的所有图形指定日志文件的路径。
loginname 显示加载 autocad 时配置或输入的用户名。登录名最多可以包含 30 个字符。
ltscale 设置全局线型比例因子。线型比例因子不能为零。(可在线型资源管理器中设置)
lunits 设置线性单位。1 科学 2 小数 3 工程 4 建筑 5 分数
luprec 设置所有只读线性单位和可编辑线性单位(其精度小于或等于当前 luprec 的值)的小数位位数。
lwdefault 设置默认线宽的值。默认线宽可以以毫米的百分之一为单位设置为任何有效线宽
lwdisplay 控制是否显示线宽。设置随每个选项卡保存在图形中。0 不显示线宽 1 显示线宽
lwunits 控制线宽单位以英寸还是毫米显示。0 英寸 1 毫米
M 系统变量
maxactvp 设置布局中一次最多可以激活多少视口。maxactvp 不影响打印视口的数目。
maxsort 设置列表命令可以排序的符号名或块名的最大数目。如果项目总数超过了本系统变量的值,将不进行排序。
mbuttonpan 控制鼠标等定点设备第三按钮或滚轮的动作响应。
measureinit 设置初始图形单位(英制或公制)。
measurement 仅设置当前图形的图形单位(英制或公制)。
menuctl 控制屏幕菜单中的页切换。
menuecho 设置菜单回显和提示控制位。
menuname 存储菜单文件名,包括文件名路径。
mirrtext 控制 mirror 命令影响镜像时文字的显示方式。0 保持文字方向 1 镜像显示文字
modemacro 在状态行显示字符串,诸如当前图形文件名、时间/日期戳记或指定的模式。
mtexted 设置应用程序的名称用于编辑多行文字对象。默认设置为“.”,使用CAD默认的编辑器,可以设置成notepad,使用记事本作为编辑器,也可以设置成oldeditor,使用旧版的编辑器,等等。
mtextfixed 控制多行文字编辑器的外观.控制是否采用所见及所得相关效果,详细讲解见博客相关文档。
mtjigstring 设置当mtext命令使用后,在光标位置处显示样例文字的内容。
mydocumentsprefix 保存完整路径至当前登录用户的“我的文档”文件夹。
N 系统变量
nomutt 禁止显示信息,即不进行信息反馈(如果通常情况下并不禁止显示这些信息)。
O 系统变量
obscuredcolor 指定遮掩行的颜色。
obscuredltype 指定遮掩行的线型。
offsetdist 设置默认的偏移距离。
offsetgaptype 当偏移多段线时,控制如何处理线段之间的潜在间隙。
olehide 控制 autocad 中 ole 对象的显示。
olequality 控制嵌入 ole 对象的默认质量级别。
olestartup 控制打印嵌入 ole 对象时是否加载其源应用程序。加载 ole 源应用程序可以提高打印质量。
orthomode 限制光标在正交方向移动。
osmode 使用位码设置“对象捕捉”的运行模式
osnapcoord 控制是否从命令行输入坐标替代对象捕捉。
P 系统变量
paletteopaque 控制窗口透明性。
paperupdate 控制 autocad r14 或更早版本中创建的没有用 autocad 2000 或更高版本格式保存的图形的默认打印设置
pdmode 控制如何显示点对象。(可以在点样式对话框中设置)
pdsize 设置显示的点对象大小。(可以在点样式对话框中设置)
peditaccept 抑制在使用pedit时,显示"选取的对象不是多段线"的提示。
pellipse 控制由 ellipse 命令创建的椭圆类型。可以设置创建适用于轴测图的椭圆或普通椭圆。
perimeter 存储由 area、dblist 或 list 命令计算的最后一个周长值。
pfacevmax 设置每个面顶点的最大数目。
pickadd 控制后续选定对象是替换还是添加到当前选择集。在“选项”对话框和属性框(CTRL+1)都可以设置。
pickauto 控制“选择对象”提示下是否自动显示选择窗口。
pickbox 以像素为单位设置对象选择目标的高度。(在“选项”对话框中可以设置)
pickdrag 控制绘制选择窗口的方式。
pickfirst 控制在发出命令之前(先选择后执行)还是之后选择对象。(在“选项”对话框中可以设置)
pickstyle 控制编组选择和关联填充选择的使用。(在“选项”对话框中可以设置)
platform 指示 autocad 工作的操作系统平台。
plinegen 设置如何围绕二维多段线的顶点生成线型图案。
plinetype 指定 autocad 是否使用优化的二维多段线。
plinewid 存储多段线的默认宽度。
plotrotmode 控制打印方向。
plquiet 控制显示可选对话框以及脚本和批处理打印的非致命错误。
polaraddang 包含用户定义的极轴角。
polarang 设置极轴角增量。值可设置为 90、45、30、22.5、18、15、10 和 5。
polardist 当 snaptype 系统变量设置为 1(极轴捕捉)时,设置捕捉增量。
polarmode 控制极轴和对象捕捉追踪设置。
polysides 为 polygon 命令设置默认边数。取值范围为 3 到 1024。
popups 显示当前配置的显示驱动程序状态。
projectname 为当前图形指定工程名称。
projmode 设置修剪和延伸的当前“投影”模式。
proxygraphics 指定是否将代理对象的图像保存在图形中。
proxynotice 在创建代理时显示通知。0 不显示代理警告 1 显示代理警告
proxyshow 控制图形中代理对象的显示。
proxywebsearch 指定 autocad 是否检查 object enabler。
psltscale 控制图纸空间的线型比例。
pstylemode 指示当前图形处于“颜色相关打印样式”还是“命名打印样式”模式。
pstylepolicy 控制对象的颜色特性是否与其打印样式相关联。
psvpscale 为所有新创建的视口设置视图比例因子。
pucsbase 存储定义正交 ucs 设置(仅用于图纸空间)的原点和方向的 ucs 名称。
Q 系统变量
qtextmode 控制文字如何显示。
R 系统变量
rasterpreview 控制 bmp 预览图像是否随图形一起保存。
refeditname 显示正进行编辑的参照名称。
regenmode 控制图形的自动重生成。
rememberfolders 控制标准的文件选择对话框中的“查找”或“保存”选项的默认路径。
reporterror 控制如果 autocad 异常结束时是否可以寄出一个错误报告到autodesk.
roamablerootprefix 保存完整路径至安装可移动自定义文件的根文件夹。
rtdisplay 控制实时 zoom 或 pan 时光栅图像的显示。存储当前用于自动保存的文件名。
S 系统变量
savefilepath 指定 autocad 任务的所有自动保存文件目录的路径。
savename 在保存当前图形之后存储图形的文件名和目录路径。
savetime 以分钟为单位设置自动保存的时间间隔。(选项对话框中可以设置)
screenboxes 存储绘图区域的屏幕菜单区显示的框数。
screenmode 存储指示 autocad 显示模式的图形/文本状态的位码值。
screensize 以像素为单位存储当前视口的大小(x 和 y 值)。
sdi 控制 autocad 运行于单文档还是多文档界面。偶尔会有人用到。
shadedge 控制着色时边缘的着色。
shadedif 以漫反射光的百分比表示,设置漫反射光与环境光的比率(如果 shadedge 设置为 0 或 1)。
shortcutmenu 控制“默认”、“编辑”和“命令”模式的快捷菜单在绘图区域是否可用。
shpname 设置默认的形名称(必须遵循符号命名惯例)。
sigwarn 控制打开带有数值签名的文件时是否发出警告。
sketchinc 设置 sketch 命令使用的记录增量。
skpoly 确定 sketch 命令生成直线还是多段线。
snapang 为当前视口设置捕捉和栅格的旋转角。旋转角相对当前 ucs 指定。(栅格和捕捉设置对话框中可以设置)
snapbase 相对于当前 ucs 为当前视口设置捕捉和栅格的原点。(栅格和捕捉设置对话框中可以设置)
snapisopair 控制当前视口的等轴测平面。0 左 1 上 2 右
snapmode 打开或关闭“捕捉”模式。(状态栏可以设置)
snapstyl 设置当前视口的捕捉样式。
snaptype 设置当前视口的捕捉类型。
snapunit 设置当前视口的捕捉间距.
solidcheck 打开或关闭当前 autocad 任务中的实体校验。
sortents 控制 opti****** 命令的对象排序操作(从“用户系统配置”选项卡中执行)。
splframe 控制样条曲线和样条拟合多段线的显示。
splinesegs 设置每条样条拟合多段线(此多段线通过 pedit 命令的“样条曲线”选项生成)的线段数目。
splinetype 设置 pedit 命令的“样条曲线”选项生成的曲线类型。
standardsviolation 指定当创建或修改非标准对象时,是否通知用户当前图形中存在标准违规。
startup 控制当使用 new 和 qnew 命令创建新图形时是否显示“创建新图形”对话框。
surftab1 为 rulesurf 和 tabsurf 命令设置生成的列表数目。
surftab2 为 revsurf 和 edgesurf 命令设置在 n 方向上的网格密度。
surftype 控制 pedit 命令的“平滑”选项生成的拟合曲面类型。
surfu 为 pedit 命令的“平滑”选项设置在 m 方向的表面密度。
surfv 为 pedit 命令的“平滑”选项设置在 n 方向的表面密度。
syscodepage 指示由操作系统确定的系统代码页。
T 系统变量
tabmode 控制数字化仪的使用。关于使用和配置数字化仪的详细信息,请参见tablet 命令。
target 存储当前视口中目标点的位置(以 ucs 坐标表示)。
tdcreate 存储创建图形的当地时间和日期。
tdindwg 存储所有的编辑时间,即在保存当前图形之间占用的总时间。
tducreate 存储创建图形的通用时间和日期。
tdupdate 存储最后一次更新/保存图形的当地时间和日期。
tdusrtimer 存储用户消耗的时间计时器。
tduupdate 存储最后一次更新/保存图形的通用时间和日期。
tempprefix 包含用于放置临时文件的目录名(如果有的话),带路径分隔符。
texteval 控制处理使用 text 或 -text 命令输入的字符串的方法。
textfill 控制打印和渲染时 truetype 字体的填充方式。
textqlty 设置打印和渲染时 truetype 字体文字轮廓的镶嵌精度。
textsize 设置以当前文本样式绘制的新文字对象的默认高度(当前文本样式具有固定高度时此设置无效)。
textstyle 设置当前文本样式的名称。
thickness 设置当前的三维厚度。
tilemode 将“模型”选项卡或最后一个布局选项卡置为当前。
tooltips 控制工具栏提示的显示:0 不显示工具栏提示 1 显示工具栏提示
tracewid 设置宽线的默认宽度。
trackpath 控制显示极轴和对象捕捉追踪的对齐路径。
trayic****** 控制是否在状态栏上显示系统托盘.
traynotify 控制是否在状态栏系统托盘上显示服务通知.
traytimeout 控制服务通知显示的时间长短(用秒)。有效值范围为 0 到 10。
treedepth 指定最大深度,即树状结构的空间索引可以分出分支的最大数目。
treemax 通过限制空间索引(八叉树)中的节点数目,从而限制重生成图形时占用的内存。
trimmode 控制 autocad 是否修剪倒角和圆角的选定边。
tspacefac 控制多行文字的行间距(按文字高度的比例因子测量)。有效值为 0.25 到 4.0。
tspacetype 控制多行文字中使用的行间距类型。
tstackalign 控制堆叠文字的垂直对齐方式。
tstacksize 控制堆叠文字分数的高度相对于选定文字的当前高度的百分比。有效值为 25 到 125。
U 系统变量
ucsaxisang 存储使用 ucs 命令的 x、y 或 z 选项绕轴旋转 ucs 时的默认角度值。
ucsbase 存储定义正交 ucs 设置的原点和方向的 ucs 名称。有效值可以是任何命名 ucs。
ucsfollow 用于从一个 ucs 转换到另一个 ucs 时生成平面视图。
ucsicon 使用位码显示当前视口的 ucs 图标。
ucsname 存储当前空间当前视口的当前坐标系名称。如果当前 ucs 尚未命名,则返回一个空字符串。
ucsorg 存储当前空间当前视口的当前坐标系原点。该值总是以世界坐标形式保存。
ucsortho 确定恢复正交视图时是否同时自动恢复相关的正交 ucs 设置。
ucsview 确定当前 ucs 是否随命名视图一起保存。
ucsvp 确定视口的 ucs 保持不变还是作相应改变以反映当前视口的 ucs 状态。
ucsxdir 存储当前空间当前视口中当前 ucs 的 x 方向。
ucsydir 存储当前空间当前视口中当前 ucs 的 y 方向。
undoctl 存储指示 undo 命令“自动”和“控制”选项状态的位码值。
undomarks 存储“标记”选项放置在undo 控制流中的标记数目。
unitmode 控制单位的显示格式。
V 系统变量
viewctr 存储当前视口中视图的中心点。该值用 ucs 坐标表示。
viewdir 存储当前视口的观察方向。用 ucs 坐标表示。它将相机点描述为到目标点的三维偏移量。
viewmode 使用位码值存储控制当前视口的“查看”模式。
viewres 圆或弧的显示圆滑度,控制圆或弧显示成多边形的段数。(可在“选项”对话框中设置)
viewsize 按图形单位存储当前视口的高度。
viewtwist 存储当前视口的视图扭转角。
visretain 控制依赖外部参照的图层的可见性、颜色、线型、线宽和打印样式(如果 pstylepolicy 设置为 0)。
vsmax 存储当前视口虚屏的右上角。该值用 ucs 坐标表示。
vsmin 存储当前视口虚屏的左下角。该值用 ucs 坐标表示。
W 系统变量
whiparc 控制圆和圆弧是否平滑显示。
wmfbkgnd 控制 autocad 对象在其他应用程序中的背景显示是否透明。
wmfforegnd 控制 autocad 对象在其他应用程序中的前景色指定。
worlducs 指示 ucs 是否与 wcs 相同。0. ucs 与 wcs 不同 1. ucs 与 wcs 相同
worldview 确定响应 3dorbit、dview 和 vpoint 命令的输入是相对于 wcs(默认)还是相对于当前 ucs。
writestat 指示图形文件是只读的还是可写的。开发人员需要通过 autolisp 确定文件的读写状态。
X 系统变量
xclipframe 控制外部参照剪裁边界的可见性。0 剪裁边界不可见 1 剪裁边界可见
xedit 控制当前图形被其他图形参照时是否可以在位编辑。0 不能在位编辑参照 1 可以在位编辑参照(选项对话框中可以设置。)
xfadectl 控制正被在位编辑的参照的褪色度百分比。有效值从 0 到 90
xloadctl 打开/关闭外部参照的按需加载,并控制是打开参照图形文件还是打开参照图形文件的副本。
xloadpath 创建一个路径用于存储按需加载的外部参照文件临时副本。
xrefctl 控制 autocad 是否写入外部参照日志 (xlg) 文件。0 不写入记录文件 1 写入记录文件
xrefnotify 控制更新或缺少外部参照时的通知。
Z 系统变量
zoomfactor 接受一个整数,有效值为 0 到 100。数字越大,鼠标滑轮每次前后移动引起改变的增量就越多。
上面是AUTOCAD的系统变量,在浩辰CAD等其他软件中支持大部分变量,至少标红的这些肯定都支持,其他变量可能会有一点出入。
转自:http://blog.sina.com.cn/s/blog_768f3f570101f17z.html
推荐阅读
-
全面指南:CAD系统中的所有变量和参数
-
` 自动填充为 `cp test.txt`
- 文件和目录名补全:输入文件名首字母后按 Tab,如 `vi ed
` 显示可用的编辑器列表 - 查看命令帮助: - 使用 `man` 命令配合具体命令名获取详尽帮助,如 `man ls` 或者 `man grep --help`"> 在 Linux 中操作指令指南 - 基本构造与种类 - 指令组成: 1. **主指令 + 选项 + 参数**: 如 `ls -l /home`,`main-action option object` - 内置指令:系统预装的 shell 功能,如 `cd`, `pwd` - 外部指令:独立可执行文件,直接用文件名当作命令,如 `rm`, `mv` - **选项与参数**: - 选项:定制命令行为, `-l` 或 `--long-help` - 短选项:简写形式,例如 `-v` 和 `-V` 可能合并使用 - 长选项:详细描述的选项,如 `--version` 或 `--human-readable` - 参数:命令作用的目标,如 `ls` 对 `/home` 目录的操作 - **指令应用**: - 不同指令需要不同的参数 - 选项可带或不带参数,比如 `grep -i "keyword"` (忽略大小写搜索) - 参数间通常用空格分隔,如 `cp file1 file2 file3` - **中断与完成提示**: - 终止当前指令:按下 Ctrl+C - **自动完成**: - 输入部分命令关键词后,按 Tab 键补全命令,如 `cp ta
` 自动填充为 `cp test.txt` - 文件和目录名补全:输入文件名首字母后按 Tab,如 `vi ed ` 显示可用的编辑器列表 - 查看命令帮助: - 使用 `man` 命令配合具体命令名获取详尽帮助,如 `man ls` 或者 `man grep --help` -
如何轻松使用JMeter进行HTTP接口测试 - 一步步教你设置线程组、 cookie、默认值与Sampler,加上响应断言和监听器,打造基础测试案例。针对复杂情况,将子系统和流程测试分类组织,确保数据一致性。同时,别忘了感谢阅读,给新手提供实战学习资源与全套测试指南,助你轻松踏上自动化测试之路! - 在"测试计划"点击右键,添加"线程组"并设定初始"线程数"和"循环次数" - 配置"HTTP Cookie管理器"与"Http请求默认值",输入目标系统信息,如域名、端口、协议等,让所有相关Sampler共享这些默认设置 - 在线程组内增加"HTTP Request"的Sampler,并填入接口详情,比如路径、请求方法及参数 - 添加"响应断言"检查接口返回结果,通过正则表达式验证预期结果 - 安装监听器,实时查看测试执行状况 - 如需处理流程性接口,请依次添加多个相关Sampler,关联前后请求间的上下文数据 特别提示:为了帮助大家避免学习中的曲折,我们准备了详尽的视频和文档资料库,无论你是软件测试的新手还是老司机,都能从中找到所需的全方位支持。只需点击下方链接加入我们的学习交流社群,就能立刻获取这份珍贵的学习宝藏!再次感谢您的耐心阅读,愿它成为您前行路上的一大助力!
-
SSM三大框架基础面试题-一、Spring篇 什么是Spring框架? Spring是一种轻量级框架,提高开发人员的开发效率以及系统的可维护性。 我们一般说的Spring框架就是Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具、消息和测试模块。比如Core Container中的Core组件是Spring所有组件的核心,Beans组件和Context组件是实现IOC和DI的基础,AOP组件用来实现面向切面编程。 Spring的6个特征: 核心技术:依赖注入(DI),AOP,事件(Events),资源,i18n,验证,数据绑定,类型转换,SpEL。 测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。 数据访问:事务,DAO支持,JDBC,ORM,编组XML。 Web支持:Spring MVC和Spring WebFlux Web框架。 集成:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。 语言:Kotlin,Groovy,动态语言。 列举一些重要的Spring模块? Spring Core:核心,可以说Spring其他所有的功能都依赖于该类库。主要提供IOC和DI功能。 Spring Aspects:该模块为与AspectJ的集成提供支持。 Spring AOP:提供面向切面的编程实现。 Spring JDBC:Java数据库连接。 Spring JMS:Java消息服务。 Spring ORM:用于支持Hibernate等ORM工具。 Spring Web:为创建Web应用程序提供支持。 Spring Test:提供了对JUnit和TestNG测试的支持。 谈谈自己对于Spring IOC和AOP的理解 IOC(Inversion Of Controll,控制反转)是一种设计思想: 在程序中手动创建对象的控制权,交由给Spring框架来管理。IOC在其他语言中也有应用,并非Spring特有。IOC容器实际上就是一个Map(key, value),Map中存放的是各种对象。 将对象之间的相互依赖关系交给IOC容器来管理,并由IOC容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。在实际项目中一个Service类可能由几百甚至上千个类作为它的底层,假如我们需要实例化这个Service,可能要每次都搞清楚这个Service所有底层类的构造函数,这可能会把人逼疯。如果利用IOC的话,你只需要配置好,然后在需要的地方引用就行了,大大增加了项目的可维护性且降低了开发难度。 Spring中的bean的作用域有哪些? 1.singleton:该bean实例为单例 2.prototype:每次请求都会创建一个新的bean实例(多例)。 3.request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。 4.session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。 5.global-session:全局session作用域,仅仅在基于Portlet的Web应用中才有意义,Spring5中已经没有了。Portlet是能够生成语义代码(例如HTML)片段的小型Java Web插件。它们基于Portlet容器,可以像Servlet一样处理HTTP请求。但是与Servlet不同,每个Portlet都有不同的会话。 Spring中的单例bean的线程安全问题了解吗? 概念用于理解:大部分时候我们并没有在系统中使用多线程,所以很少有人会关注这个问题。单例bean存在线程问题,主要是因为当多个线程操作同一个对象的时候,对这个对象的非静态成员变量的写操作会存在线程安全问题。 有两种常见的解决方案(用于回答的点): 1.在bean对象中尽量避免定义可变的成员变量(不太现实)。 2.在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal(线程本地化对象)中(推荐的一种方式)。 ThreadLocal解决多线程变量共享问题(参考博客):https://segmentfault.com/a/1190000009236777 Spring中Bean的生命周期: 1.Bean容器找到配置文件中Spring Bean的定义。 2.Bean容器利用Java Reflection API创建一个Bean的实例。 3.如果涉及到一些属性值,利用set方法设置一些属性值。 4.如果Bean实现了BeanNameAware接口,调用setBeanName方法,传入Bean的名字。 5.如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader方法,传入ClassLoader对象的实例。 6.如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory方法,传入ClassLoader对象的实例。 7.与上面的类似,如果实现了其他*Aware接口,就调用相应的方法。 8.如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执postProcessBeforeInitialization方法。 9.如果Bean实现了InitializingBean接口,执行afeterPropertiesSet方法。 10.如果Bean在配置文件中的定义包含init-method属性,执行指定的方法。 11.如果有和加载这个Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization方法。 12.当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy方法。 13.当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。 Spring框架中用到了哪些设计模式? 1.工厂设计模式:Spring使用工厂模式通过BeanFactory和ApplicationContext创建bean对象。 2.代理设计模式:Spring AOP功能的实现。 3.单例设计模式:Spring中的bean默认都是单例的。 4.模板方法模式:Spring中的jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到了模板模式。 5.包装器设计模式:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。 6.观察者模式:Spring事件驱动模型就是观察者模式很经典的一个应用。 7.适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式、Spring MVC中也是用到了适配器模式适配Controller。 还有很多。。。。。。。 @Component和@Bean的区别是什么 1.作用对象不同。@Component注解作用于类,而@Bean注解作用于方法。 2.@Component注解通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用@ComponentScan注解定义要扫描的路径)。@Bean注解通常是在标有该注解的方法中定义产生这个bean,告诉Spring这是某个类的实例,当我需要用它的时候还给我。 3.@Bean注解比@Component注解的自定义性更强,而且很多地方只能通过@Bean注解来注册bean。比如当引用第三方库的类需要装配到Spring容器的时候,就只能通过@Bean注解来实现。 @Configuration public class AppConfig { @Bean public TransferService transferService { return new TransferServiceImpl; } } <beans> <bean id="transferService" class="com.kk.TransferServiceImpl"/> </beans> @Bean public OneService getService(status) { case (status) { when 1: return new serviceImpl1; when 2: return new serviceImpl2; when 3: return new serviceImpl3; } } 将一个类声明为Spring的bean的注解有哪些? 声明bean的注解: @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller 在展现层使用,控制器的声明 注入bean的注解: @Autowired:由Spring提供 @Inject:由JSR-330提供 @Resource:由JSR-250提供 *扩:JSR 是 java 规范标准 Spring事务管理的方式有几种? 1.编程式事务:在代码中硬编码(不推荐使用)。 2.声明式事务:在配置文件中配置(推荐使用),分为基于XML的声明式事务和基于注解的声明式事务。 Spring事务中的隔离级别有哪几种? 在TransactionDefinition接口中定义了五个表示隔离级别的常量:ISOLATION_DEFAULT:使用后端数据库默认的隔离级别,Mysql默认采用的REPEATABLE_READ隔离级别;Oracle默认采用的READ_COMMITTED隔离级别。ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。 Spring事务中有哪几种事务传播行为? 在TransactionDefinition接口中定义了八个表示事务传播行为的常量。 支持当前事务的情况:PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:强制性)。 不支持当前事务的情况:PROPAGATION_REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。PROPAGATION_NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。PROPAGATION_NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常。 其他情况:PROPAGATION_NESTED: 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于PROPAGATION_REQUIRED。 二、SpringMVC篇 什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。 Spring MVC的工作原理了解嘛? image.png Springmvc的优点: (1)可以支持各种视图技术,而不仅仅局限于JSP; (2)与Spring框架集成(如IoC容器、AOP等); (3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。 (4) 支持各种请求资源的映射策略。 Spring MVC的主要组件? (1)前端控制器 DispatcherServlet(不需要程序员开发) 作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。 (2)处理器映射器HandlerMapping(不需要程序员开发) 作用:根据请求的URL来查找Handler (3)处理器适配器HandlerAdapter 注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。 (4)处理器Handler(需要程序员开发) (5)视图解析器 ViewResolver(不需要程序员开发) 作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view) (6)视图View(需要程序员开发jsp) View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等) springMVC和struts2的区别有哪些? (1)springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。 (2)springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。 (3)Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。 SpringMVC怎么样设定重定向和转发的? (1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4" (2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com" SpringMvc怎么和AJAX相互调用的? 通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 : (1)加入Jackson.jar (2)在配置文件中配置json的映射 (3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。 如何解决POST请求中文乱码问题,GET的又如何处理呢? (1)解决post请求乱码问题: 在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8; <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> (2)get请求中文参数出现乱码解决方法有两个: ①修改tomcat配置文件添加编码与工程编码一致,如下: <ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> ②另外一种方法对参数进行重新编码: String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8") ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。 Spring MVC的异常处理 ? 统一异常处理: Spring MVC处理异常有3种方式: (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver; (2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器; (3)使用@ExceptionHandler注解实现异常处理; 统一异常处理的博客:https://blog.csdn.net/ctwy291314/article/details/81983103 SpringMVC的控制器是不是单例模式,如果是,有什么问题,怎么解决? 是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写成员变量。(此题目类似于上面Spring 中 第5题 有两种解决方案) SpringMVC常用的注解有哪些? @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。 @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。 @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。 SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代? 一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置? 可以在@RequestMapping注解里面加上method=RequestMethod.GET。 怎样在方法里面得到Request,或者Session? 直接在方法的形参中声明request,SpringMVC就自动把request对象传入。 如果想在拦截的方法里面得到从前台传入的参数,怎么得到? 直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象? 直接在方法中声明这个对象,SpringMVC就自动会把属性赋值到这个对象里面。 SpringMVC中函数的返回值是什么? 返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的。 SpringMVC用什么对象从后台向前台传递数据的? 通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前台就可以拿到数据。 怎么样把ModelMap里面的数据放入Session里面? 可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。 SpringMvc里面拦截器是怎么写的: 有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可: <!-- 配置SpringMvc的拦截器 --> <mvc:interceptors> <!-- 配置一个拦截器的Bean就可以了 默认是对所有请求都拦截 --> <bean id="myInterceptor" class="com.zwp.action.MyHandlerInterceptor"></bean> <!-- 只针对部分请求拦截 --> <mvc:interceptor> <mvc:mapping path="/modelMap.do" /> <bean class="com.zwp.action.MyHandlerInterceptorAdapter" /> </mvc:interceptor> </mvc:interceptors> 注解原理: 注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池 三、Mybatis篇 什么是MyBatis? MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 讲下MyBatis的缓存 MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有, 二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口, 可在它的映射文件中配置<cache/> Mybatis是如何进行分页的?分页插件的原理是什么? 1)Mybatis使用RowBounds对象进行分页,也可以直接编写sql实现分页,也可以使用Mybatis的分页插件。 2)分页插件的原理:实现Mybatis提供的接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql。 举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10 简述Mybatis的插件运行原理,以及如何编写一个插件? 1)Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、 Executor这4种接口的插件,Mybatis通过动态代理, 为需要拦截的接口生成代理对象以实现接口方法拦截功能, 每当执行这4种接口对象的方法时,就会进入拦截方法, 具体就是InvocationHandler的invoke方法,当然, 只会拦截那些你指定需要拦截的方法。 2)实现Mybatis的Interceptor接口并复写intercept方法, 然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可, 记住,别忘了在配置文件中配置你编写的插件。 Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不? 1)Mybatis动态sql可以让我们在Xml映射文件内, 以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能。 2)Mybatis提供了9种动态sql标签:trim|where|set|foreach|if|choose|when|otherwise|bind。 3)其执行原理为,使用OGNL从sql参数对象中计算表达式的值, 根据表达式的值动态拼接sql,以此来完成动态sql的功能。 #{}和${}的区别是什么? 1)#{}是预编译处理,${}是字符串替换。 2)Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值(有效的防止SQL注入); 3)Mybatis在处理${}时,就是把${}替换成变量的值。 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里? Hibernate属于全自动ORM映射工具, 使用Hibernate查询关联对象或者关联集合对象时, 可以根据对象关系模型直接获取,所以它是全自动的。 而Mybatis在查询关联对象或关联集合对象时, 需要手动编写sql来完成,所以,称之为半自动ORM映射工具。 Mybatis是否支持延迟加载?如果支持,它的实现原理是什么? 1)Mybatis仅支持association关联对象和collection关联集合对象的延迟加载, association指的就是一对一,collection指的就是一对多查询。 在Mybatis配置文件中, 可以配置是否启用延迟加载lazyLoadingEnabled=true|false。 2)它的原理是,使用CGLIB创建目标对象的代理对象, 当调用目标方法时,进入拦截器方法, 比如调用a.getB.getName, 拦截器invoke方法发现a.getB是null值, 那么就会单独发送事先保存好的查询关联B对象的sql, 把B查询上来,然后调用a.setB(b), 于是a的对象b属性就有值了, 接着完成a.getB.getName方法的调用。 这就是延迟加载的基本原理。 MyBatis与Hibernate有哪些不同? 1)Mybatis和hibernate不同,它不完全是一个ORM框架, 因为MyBatis需要程序员自己编写Sql语句, 不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句, 并将java对象和sql语句映射生成最终执行的sql, 最后将sql执行的结果再映射生成java对象。 2)Mybatis学习门槛低,简单易学,程序员直接编写原生态sql, 可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发, 例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁, 一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性, 如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。 3)Hibernate对象/关系映射能力强,数据库无关性好, 对于关系模型要求高的软件(例如需求固定的定制化软件) 如果用hibernate开发可以节省很多代码,提高效率。 但是Hibernate的缺点是学习门槛高,要精通门槛更高, 而且怎么设计O/R映射,在性能和对象模型之间如何权衡, 以及怎样用好Hibernate需要具有很强的经验和能力才行。 总之,按照用户的需求在有限的资源环境下只要能做出维护性、 扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。 MyBatis的好处是什么? 1)MyBatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写, 给程序的维护带来了很大便利。 2)MyBatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象, 大大简化了Java数据库编程的重复工作。 3)因为MyBatis需要程序员自己去编写sql语句, 程序员可以结合数据库自身的特点灵活控制sql语句, 因此能够实现比Hibernate等全自动orm框架更高的查询效率,能够完成复杂查询。 简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系? Mybatis将所有Xml配置信息都封装到All-In-One重量级对象Configuration内部。 在Xml映射文件中,<parameterMap>标签会被解析为ParameterMap对象, 其每个子元素会被解析为ParameterMapping对象。 <resultMap>标签会被解析为ResultMap对象, 其每个子元素会被解析为ResultMapping对象。 每一个<select>、<insert>、<update>、<delete> 标签均会被解析为MappedStatement对象, 标签内的sql会被解析为BoundSql对象。 什么是MyBatis的接口绑定,有什么好处? 接口映射就是在MyBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定, 我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置. 接口绑定有几种实现方式,分别是怎么实现的? 接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加 上@Select@Update等注解里面包含Sql语句来绑定, 另外一种就是通过xml里面写SQL来绑定,在这种情况下, 要指定xml映射文件里面的namespace必须为接口的全路径名. 什么情况下用注解绑定,什么情况下用xml绑定? 当Sql语句比较简单时候,用注解绑定;当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多 MyBatis实现一对一有几种方式?具体怎么操作的? 有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在resultMap里面配置association节点配置一对一的类就可以完成; 嵌套查询是先查一个表,根据这个表里面的结果的外键id, 去再另外一个表里面查询数据,也是通过association配置, 但另外一个表的查询通过select属性配置。 Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别? 能,Mybatis不仅可以执行一对一、一对多的关联查询, 还可以执行多对一,多对多的关联查询,多对一查询, 其实就是一对一查询,只需要把selectOne修改为selectList即可; 多对多查询,其实就是一对多查询,只需要把selectOne修改为selectList即可。 关联对象查询,有两种实现方式,一种是单独发送一个sql去查询关联对象, 赋给主对象,然后返回主对象。另一种是使用嵌套查询,嵌套查询的含义为使用join查询, 一部分列是A对象的属性值,另外一部分列是关联对象B的属性值, 好处是只发一个sql查询,就可以把主对象和其关联对象查出来。 MyBatis里面的动态Sql是怎么设定的?用什么语法? MyBatis里面的动态Sql一般是通过if节点来实现,通过OGNL语法来实现, 但是如果要写的完整,必须配合where,trim节点,where节点是判断包含节点有 内容就插入where,否则不插入,trim节点是用来判断如果动态语句是以and 或or 开始,那么会自动把这个and或者or取掉。 Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式? 第一种是使用<resultMap>标签,逐一定义列名和对象属性名之间的映射关系。 第二种是使用sql列的别名功能,将列别名书写为对象属性名, 比如T_NAME AS NAME,对象属性名一般是name,小写, 但是列名不区分大小写,Mybatis会忽略列名大小写,
-
ssh工作流程及原理-SSH(Secure Shell Protocol,安全的壳程序协议),它可以通过数据包加密技术将等待传输的数据包加密后再传输到网络上。ssh协议本身提供两个服务器功能:一个是类似telnet的远程连接使用shell的服务器;另一个就是类似ftp服务的sftp-server,提供更安全的ftp服务。 连接加密技术简介 目前常见的网络数据包加密技术通常是通过“非对称密钥系统”来处理的。主要通过两把不一样的公钥与私钥来进行加密与解密的过程。 公钥(public key):提供给远程主机进行数据加密的行为,所有人都可获得你的公钥来将数据加密。 私钥(private key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。私钥只有自己拥有。 SSH工作过程:在整个通讯过程中,为实现SSH的安全连接,服务端与客户端要经历如下五个阶段: 版本号协商阶段 SSH目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本 密钥和算法协商阶段 SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的算法 认证阶段 SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证 会话请求阶段 认证通过后,客户端向服务器端发送会话请求 交互会话阶段 会话请求通过后,服务器端和客户端进行信息的交互 一、版本协商阶段 服务器端打开端口22,等待客户端连接; 客户端向服务器端发起TCP初始连接请求,TCP连接建立后,服务器向客户端发送第一个报文,包括版本标志字符串,格式为“SSH-<主协议版本号>.<次协议版本号>.<软件版本号>”,协议版本号由主版本号和次版本号组成,软件版本号主要是为调试使用。 客户端收到报文后,解析该数据包,如果服务器的协议版本号比自己的低,且客户端能支持服务器端的低版本,就使用服务器端的低版本协议号,否则使用自己的协议版本号。 客户端回应服务器一个报文,包含了客户端决定使用的协议版本号。服务器比较客户端发来的版本号,决定是否能同客户端一起工作。如果协商成功,则进入密钥和算法协商阶段,否则服务器断开TCP连接。 说明:上述报文都是采用明文方式传输。 二、密钥和算法协商阶段 服务器端和客户端分别发送算法协商报文给对端,报文中包含自己支持的公钥算法列表、加密算法列表、MAC(Message Authentication Code,消息验证码)算法列表、压缩算法列表等等。 服务器端和客户端根据对端和本端支持的算法列表得出最终使用的算法。 服务器端和客户端利用DH交换(Diffie-Hellman Exchange)算法、主机密钥对等参数,生成会话密钥和会话ID。 由此,服务器端和客户端就取得了相同的会话密钥和会话ID。对于后续传输的数据,两端都会使用会话密钥进行加密和解密,保证了数据传送的安全。在认证阶段,两端会使用会话用于认证过程。 会话密钥的生成: 客户端需要使用适当的客户端程序来请求连接服务器,服务器将服务器的公钥发送给客户端。(服务器的公钥产生过程:服务器每次启动sshd服务时,该服务会主动去找/etc/ssh/ssh_host*文件,若系统刚装完,由于没有这些公钥文件,因此sshd会主动去计算出这些需要的公钥文件,同时也会计算出服务器自己所需要的私钥文件。) 服务器生成会话ID,并将会话ID发给客户端。 若客户端第一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户主目录内的~/.ssh/known_hosts。若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否有差异。客户端生成会话密钥,并用服务器的公钥加密后,发送给服务器。 ****服务器用自己的私钥将收到的数据解密,获得会话密钥。 服务器和客户端都知道了会话密钥,以后的传输都将被会话密钥加密。 三、认证阶段 SSH提供两种认证方法: 基于口令的认证(password认证):客户端向服务器发出password认证请求,将用户名和密码加密后发送给服务器,服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败消息。 基于密钥的认证(publickey认证):客户端产生一对公共密钥,将公钥保存到将要登录的服务器上的那个账号的家目录的.ssh/authorized_keys文件中。认证阶段:客户端首先将公钥传给服务器端。服务器端收到公钥后会与本地该账号家目录下的authorized_keys中的公钥进行对比,如果不相同,则认证失败;否则服务端生成一段随机字符串,并先后用客户端公钥和会话密钥对其加密,发送给客户端。客户端收到后将解密后的随机字符串用会话密钥发送给服务器。如果发回的字符串与服务器端之前生成的一样,则认证通过,否则,认证失败。 注:服务器端对客户端进行认证,如果认证失败,则向客户端发送认证失败消息,其中包含可以再次认证的方法列表。客户端从认证方法列表中选取一种认证方法再次进行认证,该过程反复进行。直到认证成功或者认证次数达到上限,服务器关闭连接为止。实例
-
包婷婷 (201550484)作业一 统计软件简介与数据操作-SPSS(Statistical Product and Service Solutions),"统计产品与服务解决方案"软件。最初软件全称为"(SolutionsStatistical Package for the Social Sciences),但是随着SPSS产品服务领域的扩大和服务深度的增加,SPSS公司已于2000年正式将英文全称更改为"统计产品与服务解决方案",标志着SPSS的战略方向正在做出重大调整。为IBM公司推出的一系列用于统计学分析运算、数据挖掘、预测分析和决策支持任务的软件产品及相关服务的总称SPSS,有Windows和Mac OS X等版本。 1984年SPSS总部首先推出了世界上第一个统计分析软件微机版本SPSS/PC+,开创了SPSS微机系列产品的开发方向,极大地扩充了它的应用范围,并使其能很快地应用于自然科学、技术科学、社会科学的各个领域。世界上许多有影响的报刊杂志纷纷就SPSS的自动统计绘图、数据的深入分析、使用方便、功能齐全等方面给予了高度的评价。 R统计软件介绍 R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能。 与其说R是一种统计软件,还不如说R是一种数学计算的环境,因为R并不是仅仅提供若干统计程序、使用者只需指定数据库和若干参数便可进行一个统计分析。R的思想是:它可以提供一些集成的统计工具,但更大量的是它提供各种数学计算、统计计算的函数,从而使使用者能灵活机动的进行数据分析,甚至创造出符合需要的新的统计计算方法。 该语言的语法表面上类似 C,但在语义上是函数设计语言(functional programming language)的变种并且和Lisp 以及 APL有很强的兼容性。特别的是,它允许在"语言上计算"(computing on the language)。这使得它可以把表达式作为函数的输入参数,而这种做法对统计模拟和绘图非常有用。 R是一个免费的*软件,它有UNIX、LINUX、MacOS和WINDOWS版本,都是可以免费下载和使用的。在R主页那儿可以下载到R的安装程序、各种外挂程序和文档。在R的安装程序中只包含了8个基础模块,其他外在模块可以通过CRAN获得。 二、R语言 R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个*、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。 R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX,Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R还有以下特点: 1.R是*软件。这意味着它是完全免费,开放源代码的。可以在它的网站及其镜像中下载任何有关的安装程序、源代码、程序包及其源代码、文档资料。标准的安装文件身自身就带有许多模块和内嵌统计函数,安装好后可以直接实现许多常用的统计功能。[2] 2.R是一种可编程的语言。作为一个开放的统计编程环境,语法通俗易懂,很容易学会和掌握语言的语法。而且学会之后,我们可以编制自己的函数来扩展现有的语言。这也就是为什么它的更新速度比一般统计软件,如,SPSS,SAS等快得多。大多数最新的统计方法和技术都可以在R中直接得到。[2] 3. 所有R的函数和数据集是保存在程序包里面的。只有当一个包被载入时,它的内容才可以被访问。一些常用、基本的程序包已经被收入了标准安装文件中,随着新的统计分析方法的出现,标准安装文件中所包含的程序包也随着版本的更新而不断变化。在另外版安装文件中,已经包含的程序包有:base一R的基础模块、mle一极大似然估计模块、ts一时间序列分析模块、mva一多元统计分析模块、survival一生存分析模块等等.[2] 4.R具有很强的互动性。除了图形输出是在另外的窗口处,它的输入输出窗口都是在同一个窗口进行的,输入语法中如果出现错误会马上在窗口口中得到提示,对以前输入过的命令有记忆功能,可以随时再现、编辑修改以满足用户的需要。输出的图形可以直接保存为JPG,BMP,PNG等图片格式,还可以直接保存为PDF文件。另外,和其他编程语言和数据库之间有很好的接口。[2] 5.如果加入R的帮助邮件列表一,每天都可能会收到几十份关于R的邮件资讯。可以和全球一流的统计计算方面的专家讨论各种问题,可以说是全世界最大、最前沿的统计学家思维的聚集地.[2] R是基于S语言的一个GNU项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行。 R的语法是来自Scheme。R的使用与S-PLUS有很多类似之处,这两种语言有一定的兼容性。S-PLUS的使用手册,只要稍加修改就可作为R的使用手册。所以有人说:R,是S-PLUS的一个“克隆”。 但是请不要忘了:R是免费的(R is free)。R语言源代码托管在github,具体地址可以看参考资料。[3] 。 R语言的下载可以通过CRAN的镜像来查找。 R语言有域名为.cn的下载地址,有六个,其中两个由Datagurn,由 中国科学技术大学提供的。R语言Windows版,其中由两个下载地点是Datagurn和 USTC提供的。 三、stata Stata 是一套提供其使用者数据分析、数据管理以及绘制专业图表的完整及整合性统计软件。它提供许许多多功能,包含线性混合模型、均衡重复反复及多项式普罗比模式。用Stata绘制的统计图形相当精美。 新版本的STATA采用最具亲和力的窗口接口,使用者自行建立程序时,软件能提供具有直接命令式的语法。Stata提供完整的使用手册,包含统计样本建立、解释、模型与语法、文献等超过一万余页的出版品。 除此之外,Stata软件可以透过网络实时更新每天的最新功能,更可以得知世界各地的使用者对于STATA公司提出的问题与解决之道。使用者也可以透过Stata. Journal获得许许多多的相关讯息以及书籍介绍等。另外一个获取庞大资源的管道就是Statalist,它是一个独立的listserver,每月交替提供使用者超过1000个讯息以及50个程序。 四、PYTHON
-
正负偏差变量 即 d2+、d2- 分别表示决策值中超出和未达到目标值的部分。而 di+、di- 均大于 0 刚性约束和目标约束(柔性目标约束有偏差) 在多目标规划中,>=/<= 在刚性约束中保持不变。当需要将约束条件转换为柔性约束条件时,需要将 >=/<= 更改为 =(因为已经有 d2+、d2- 用来表示正负偏差),并附加上 (+dii-di+) 注意这里是 +di、-di+!之所以是 +di,-di+,是因为需要将目标还原为最接近的原始刚性约束条件 优先级因素和权重因素 对多个目标进行优先排序和优先排序 目标规划的目标函数 是所有偏差变量的加权和。值得注意的是,这个加权和都取最小值。而 di+ 和 dii- 并不一定要出现在每个不同的需求层次中。具体分析需要具体问题具体分析 下面是一个例子: 题目中说设备 B 既要求充分利用,又要求尽可能不加班,那么列出的时间计量表达式即为:min z = P3 (d3- + d3 +) 使用 + 而不是 -d3 + 的原因是:正负偏差不可能同时存在,必须有 di+di=0 (因为判定值不可能同时大于目标值和小于目标值),而前面是 min,所以只要取 + 并让 di+ 和 dii- 都为正值即可。因此,得出以下规则: 最后,给出示例和相应的解法: 问题:某企业生产 A 和 B 两种产品,需要使用 A、B、C 三种设备。下表显示了与工时和设备使用限制有关的产品利润率。问该企业应如何组织生产以实现下列目标? (1) 力争利润目标不低于 1 500 美元; (2) 考虑到市场需求,A、B 两种产品的生产比例应尽量保持在 1:2; (3)设备 A 是贵重设备,严禁超时使用; (4)设备 C 可以适当加班,但要控制;设备 B 要求充分利用,但尽量不加班。 从重要性来看,设备 B 的重要性是设备 C 的三倍。 建立相应的目标规划模型并求解。 解:设企业生产 A、B 两种产品的件数分别为 x1、x2,并建立相应的目标计划模型: 以下为顺序求解法,利用 LINGO 求解: 1 级目标: 模型。 设置。 variable/1..2/:x;! s_con_num/1...4/:g,dplus,dminus;!所需软约束数量(g=dplus=dminus 数量)及相关参数; s_con(s_con_num);! s_con(s_con_num,variable):c;!软约束系数; 结束集 数据。 g=1500 0 16 15. c=200 300 2 -1 4 0 0 5; 结束数据 min=dminus(1);!第一个目标函数;!对应于 min=z 的第一小部分;! 2*x(1)+2*x(2)<12;!硬约束 @for(s_con_num(i):@sum(variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i)); !使用设置完成的数据构建软约束表达式; ! !软约束表达式 @for(variable:@gin(x)); !将变量约束为整数; ! 结束 此时,第一级目标的最优值为 0,第一级偏差为 0: 第二级目标: !求 dminus(1)=0,然后求解第二级目标。 模型。 设置。 变量/1..2/:x;!设置:变量/1..2/:x; ! s_con_num/1...4/:g,dplus,dminus;!软约束数量及相关参数; s_con(s_con_num(s_con_num));! s_con(s_con_num,variable):c;! 软约束系数; s_con(s_con_num,variable):c;! 结束集 数据。 g=1500 0 16 15; c=200 300 2 -1 4 0 0 5; 结束数据 min=dminus(2)+dplus(2);!第二个目标函数 2*x(1)+2*x(2)<12;!硬约束 @for(s_con_num(i):@sum(variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i)); ! 软约束表达式;! dminus(1)=0; !第一个目标结果 @for(variable:@gin(x)); ! 结束 此时,第二个目标的最优值为 0,偏差为 0: 第三目标 !求 dminus(2)=0,然后求解第三个目标。 模型。 设置。 变量/1..2/:x;!设置:变量/1..2/:x; ! s_con_num/1...4/:g,dplus,dminus;!软约束数量及相关参数; s_con(s_con_num(s_con_num));! s_con(s_con_num,variable):c;! 软约束系数; s_con(s_con_num,variable):c;! 结束集 数据。 g=1500 0 16 15; c=200 300 2 -1 4 0 0 5; 结束数据 min=3*dminus(3)+3*dplus(3)+dminus(4);!第三个目标函数。 2*x(1)+2*x(2)<12;!硬约束 @for(s_con_num(i):@sum(variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i)); ! 软约束表达式;! dminus(1)=0; !第一个目标约束条件; ! dminus(2)+dplus(2)=0; !第二个目标约束条件 @for(variable:@gin(x));! 结束 最终结果为 x1=2,x2=4,dplus(1)=100,最优利润为
-
紧急模式问题处理 - 图 1 紧急模式 根本原因分析 应急模式提供了尽可能小的环境,即使无法进入应急模式,也可以在其中修复系统。在应急模式下,系统只安装根文件系统供读取,不尝试安装任何其他本地文件系统,不激活网络接口,只启动一些基本服务。 进入应急模式的原因通常是 /etc/fstab 文件中存在错误,导致文件系统挂载失败。 文件系统中存在错误,导致。 约束和限制 本节适用于 Linux 操作系统紧急模式。程序涉及修复文件系统。修复文件系统有丢失数据的风险,因此请先备份数据,然后再执行修复操作。 处理方法 输入根密码,然后进入修复模式。 在应急模式下,根分区以只读模式挂载。要修改根目录中的文件,需要执行以下命令以读写模式重新挂载根分区。# mount -o rw,remount / 请执行以下命令首先检查 fstab 文件是否有误,然后尝试挂载所有未挂载的文件系统。# mount -a 如果挂载点不存在,请创建一个挂载点。 如果不存在此类设备,请注释或删除挂载行。 如果指定了不正确的挂载选项,请将挂载参数更改为正确的参数。 如果没有发生错误,但出现 UNEXPECTED INCONSISTENCY;RUN fsck MANUALLY 消息(通常是由文件系统错误引起的),请跳至第 7 步。 执行以下命令打开 /etc/fstab 以修改相应的错误。# vi /etc/fstab /etc/fstab 文件包含以下字段,以空格分隔:[文件系统] [dir] [type] [options] [dump] [fsck] 表 1 /etc/fstab 参数 说明 参数 说明 [文件系统] 要挂载的分区或存储设备。 文件系统]列建议以 UUID 的形式写入。执行 blkid 命令可查询设备文件系统 UUID。 参考格式如下: # <device> <dir> <type> <options> <dump> <fsck>; UUID=b411dc99-f0a0-4c87-9e05-184977be8539 /home ext4 defaults 0 2 使用 UUID 的好处是,它们与磁盘顺序无关。如果你在 BIOS 中更改了存储设备的顺序,或重新插入了存储设备,或者因为某些 BIOS 可能会随机更改存储设备的顺序,那么使用 UUID 会更有效率。 [文件系统] 文件系统]的挂载位置。 类型 挂载设备或分区的文件系统类型,支持多种不同的文件系统:ext2、ext3、ext4、reiserfs、xfs、jfs、smbfs、iso9660、vfat、ntfs、swap 和 auto。 设置为自动类型后,挂载命令会猜测所使用的文件系统类型,这对 CDROM 和 DVD 等移动设备非常有用。 选项 挂载时要使用的参数,有些参数是特定文件系统特有的。例如,默认值参数使用文件系统的默认挂载参数,ext4 的默认参数为:rw、suid、dev、exec、auto、nouser、async。 有关更多参数,请执行以下命令查看 man 手册:# man mount
-
41 个下载免费 3D 模型的最佳网站-使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 17. Clara.io Clara.io 是一个创建 3D 内容的全球平台,也是一个培养新 3D 艺术家的社区。Clara.io 提供+100,000个免费的3D模型,包括OBJ,Blend,STL,FBX,DAE,Babylon.JS,Three.JS格式,用于 Clara.io,Unity 3D,Blender,Sketchup,Cinema 4D,3DS Max和Maya。 使用说明:免费,标准和专业帐户仅供个人使用,如果您需要将 clara.io 用于商业用途,请与销售团队联系。 18. 3DExport 3DExport是一个市场,您可以在其中购买和销售用于CG项目的3D模型,3D打印模型和纹理。它提供15 +不同的3D格式供下载,如3DS MAX(.max),Cinema4D(.c4d),Maya(.mb,.ma),Lightwave(.lwo),Softimage(.xsi),Wavefront OBJ(.obj),Autodesk FBX(.fbx)等。它还提供15种不同的语言! 使用说明:免费下载仅供个人和非商业用途。 19. 3D Warehouse 3D Warehouse是一个开放的库,允许用户共享和下载SketchUp 3D模型,用于建筑,设计,施工和娱乐!任何人都可以免费制作,修改和重新上传内容到3D仓库,您可以找到任何您能想到的东西,如家具,电子产品,室内产品等。 使用说明:3D Warehouse中的所有模型都是免费的,因此任何人都可以下载文件以用于SketchUp甚至其他软件,如AutoCAD,Revit和ArchiCAD。 20. CadNav.com CadNav是CGI平面设计师和CAD / CAM / CAE工程师的在线3D模型库,我们提供超过50000 +免费3D模型和CAD模型下载。在CadNav网站上,您可以下载高质量的多边形网格3D模型,3D CAD实体对象,纹理,Vray材料,3D作品,CAD图纸等。 使用说明:免费下载仅供个人和非商业用途。 21. All3dfree.net 就像网站名称一样,它提供免费的3D模型,还包括Vray材料,CAD块,2d和3d纹理集合,无需注册即可免费下载。它是不断更新的,因此您可以查找或请求3DS,MAX,C4D,skp,OBJ,FBX,MTL等格式的模型。 使用说明:所有资源均不允许用于商业用途,否则您将承担责任。 22. Hum3D 自2005年以来,Hum3D帮助来自3多个国家的80D艺术家节省3D建模时间,并制作逼真的3D模型,用于电影,视频游戏,AR应用程序和可视化。所有模型均由首席3D艺术家进行验证,他们检查其是否符合专业要求和最新的3D建模标准。 使用说明:免费下载仅供个人和非商业用途。 23. Artist-3D.com 艺术家-3D 库存的免费 3D 模型下载按通用类别排序。它为人体解剖学、汽车、家具、火箭、卫星等模型提供 AutoDesk 3DS Max 格式。您还可以在浏览他们的网站时找到教程和类似类型的建模。 使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 24. Free the models 就像本网站的标题一样,它为3d应用程序和3d游戏引擎提供免费的内容模型。您可以为您的任何项目找到许多有趣且有用的模型!它提供3ds,wavefront,bryce,poser,lightwave,md2和unity3d格式的模型。还有一个很棒的纹理集合,可以在您最喜欢的建模和渲染程序中使用。 使用说明:您从这里下载的所有内容都可以免费使用,除非它不能包含在另一个免费的网络或CD收藏中,也不能单独出售。否则,您可以在商业游戏,3D应用程序或渲染作品中使用它。您不必提供信用,但如果您这样做,那就太好了。 25. Resources.blogscopia 本网站由一家名为Scopia的公司创建。他们制作3D图像和视频,您可以找到许多为CGI工作的信息架构设计的模型,所有这些都可以在现实生活中使用。您可以免费下载它们,但是,如果您想一次下载它们,您可以支付 3 到 9 欧元。 使用说明:您可以免费下载模型部分的所有文件。每个压缩文件都包含您也可以在此处找到的许可证。基本上,您可以对文件执行任何操作。唯一的限制是不归属于Scopia的重新分发。 26.ambientCG 1000+公共领域PBR材料适合所有人!环境CG是使用许多不同的方法和资产类型创建的,例如照片纹理(PBR),贴花(PBR),图集(PBR),照片纹理(普通),物质存档(SBSAR),雕刻画笔,3D模型和地形。您可以在所有项目中*使用它们! 使用说明:在 ambientCG 上提供下载的所有 PBR 材料、画笔、照片和 3D 模型均根据知识共享 CC0 1.0 通用许可提供。您可以复制、修改、分发和执行作品,即使是出于商业目的,也无需征得许可。信用将不胜感激。 不要满足于平庸的大理石纹理 - 立即使用我们的免费PBR大理石纹理升级您的3D设计。 27.Pixar One Twenty Eight 这是一个提供官方动画行业经典纹理的网站:皮克斯,创建于 1993 年,该纹理库包括 128 个重复纹理,现在免费提供。 它包含您来到的纹理,包括砖块和动物毛皮。肯定会有一些你可以使用的东西。 使用说明:皮克斯动画工作室的《Pixar One Twenty Eight》根据知识共享署名4.0国际许可协议进行许可。即使出于商业目的,您也可以重新混合、调整和构建您的作品,只要您以相同的条款对新创作进行信用和许可。 访问数以千计的免费纹理并提升您的设计游戏 - 立即开始下载! 28. 3DXO 即使有近 620 个免费贴纸可供下载,3DXO 也不是最大的资源,但它的内容非常有用,不需要注册。无论是简单的墙壁或地板,还是一些奇怪的小东西,您都需要的纹理都可以在此网站上看到。 使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 29. 3DModelsCC0 3DModelsCC0 与其他产品的不同之处在于它包含超过 250+ 个高质量 3D 模型,并且本网站上的所有内容都是免费的,完全是公共领域!使用我们的模型时无需信用或归属! 使用说明:为每个人提供完全免费的公共领域内容。 30.Sketch up texture club Sketchup Texture Club是一个非营利性的教育和信息门户网站,由3D社区的图像促进协会管理,特别强调面向学生和建筑和室内设计专业人士的可视化和渲染技术,以及所有正在学习3D可视化的人。 使用说明:您无需支付版税或使用费。纹理可以免费下载和使用。不允许将纹理作为竞争产品出售或重新分发,即使图像被修改也是如此。 31. FlippedNormals FlippedNormal 是一个提供计算机图形和 3D 资产的市场,您可以找到许多用于雕刻、建模、纹理、概念艺术、3D 模型、游戏资产或课程的高级资产! 使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 32. NASA 3D NASA 3D网站是一个在线门户,提供与太空和各种NASA任务相关的大量三维模型和模拟。该网站是用户友好的,并提供有关每个型号的详细信息。该网站允许用户探索和下载几种不同格式的模型,包括 OBJ、STL 和 FBX,只需单击下载按钮即可。 使用说明: 要下载模型,只需单击模型页面上的下载按钮并选择所需的格式。 33. 3DAGOGO (Astroprint) 3DAGOGO 是一个提供广泛 3D 模型的网站,包括角色、车辆和建筑物。3DAGOGO 的独特功能之一是它专注于适合 3D 打印的模型,使其成为希望创建物理原型或模型的设计师的绝佳资源。要使用 3DAGOGO,设计师只需在网站上搜索他们正在寻找的模型类型,然后下载 STL 格式的文件。 使用说明: 要使用 3DAGOGO,只需搜索所需的 3D 模型类型并下载 STL 格式的文件。根据需要自定义模型,并确保在将其用于商业目的之前检查使用权限。 34. FreeCAD FreeCAD是一款了不起的3D建模软件,可让您在计算机上创建令人难以置信的3D设计。该软件可免费下载和使用,它提供了广泛的工具和功能,可用于创建用于各种目的的3D模型。 该网站易于浏览,您可以找到开始使用FreeCAD的所有必要信息。此外,该网站还提供一系列教程和指南,可帮助您了解 3D 建模的来龙去脉。 使用说明: 要下载模型,请访问网站并从库中选择所需的模型。该网站还提供了一系列使用该软件的教程和指南。 35. Pinshape Pinshape是一个提供一系列3D打印模型的网站。网站上提供的型号质量很高,因此您可以确保您的最终印刷产品看起来很棒。该网站提供了广泛的模型,包括从家居用品到小雕像和珠宝的所有物品。 但这还不是Pinshape所能提供的全部!该网站还允许用户上传和共享自己的3D模型。这意味着您不仅可以下载出色的模型,还可以通过分享自己的设计为社区做出贡献。此外,Pinshape 提供了一系列自定义选项,因此您可以调整和调整模型以满足您的特定需求。 使用说明: 要下载模型,请在网站上创建一个帐户,搜索所需的模型,然后单击下载按钮。该网站还为每种型号提供了一系列定制选项。 36.Yeggi Yeggi 提供了大量免费的 3D 模型,您可以下载各种格式的模型,例如 STL、OBJ 和 FBX。该网站易于使用,您可以按关键字、类别或特定网站搜索模型。 Yeggi 对于任何寻找 3D 模型的人来说都是一个很好的资源。它提供了大量的模型集合,从日常物品到复杂的机械,以及介于两者之间的一切。该网站的收藏量在不断增长,每天都有新的型号增加。 使用说明: 要下载模型,请在网站上搜索所需的模型,然后单击下载按钮。该网站还提供指向托管模型的原始网站的链接。 37. Open3DModel 来自开放3D模型的图像 Open3DModel具有各种类别的模型,包括建筑,车辆和角色。无论您需要建筑物,汽车还是人的3D模型,都可以在此网站上找到。 该网站易于浏览,您可以按类别或关键字搜索模型。每个模型都附带预览图像和详细信息,例如文件格式、大小和多边形数量。此信息可以帮助您选择适合您需求的模型。 使用说明: 要下载模型,请访问网站,从库中选择所需的模型,然后单击下载按钮。 使用最好的 3D 资产管理工具简化您的 3D 制作流程。立即试用它们,将您的 3D 项目提升到一个新的水平! 38. 3DExport 对于那些为其 3D 设计项目寻找 3D 模型、纹理和其他资源的人来说,该平台是一个很好的资源。该网站有大量模型可供选择,包括 3D 打印对象、游戏资产等。用户可以按类别、文件格式或价格范围浏览,以找到适合其项目的完美资源。此外,3DExport 还提供一系列教程和其他 3D 资源,以帮助用户提高技能并创建更令人印象深刻的设计。 使用说明: 要使用 3DExport,只需创建一个帐户并浏览可用型号。您可以按类别、格式和价格进行搜索,以找到所需的型号。找到喜欢的模型后,只需下载它并开始在您的项目中使用它。 39.Blend Swap Blend Swap是一个社区驱动的市场,提供与Blender软件兼容的各种免费3D模型。该平台允许用户共享和下载模型、纹理和其他资产,以便在他们的项目中使用。 使用说明: 创建免费帐户后,您可以浏览社区上传的大量3D模型。当您找到要使用的一个时,只需下载它并将其导入您选择的 3D 软件即可。 40. 3DShook 3DShook 是一个高级 3D 模型市场,提供一系列用于建筑、游戏等各个行业的高质量模型。该平台提供基于订阅的模型,具有不同的定价计划,允许用户访问一系列模型。 使用说明: 注册免费帐户后,只需浏览3D模型库,选择您喜欢的模型,然后以您需要的格式下载它们。 41. Smithsonian X 3D 史密森尼 X 3D 对于正在寻找历史文物和文物的高质量 3D 模型的设计师来说,这是一个独特的资源。该平台提供了大量3D模型,这些模型是根据史密森尼博物馆和研究中心中的真实物体扫描创建的。 使用说明:
-
windows下进程间通信的(13种方法)-摘 要 本文讨论了进程间通信与应用程序间通信的含义及相应的实现技术,并对这些技术的原理、特性等进行了深入的分析和比较。 ---- 关键词 信号 管道 消息队列 共享存储段 信号灯 远程过程调用 Socket套接字 MQSeries 1 引言 ---- 进程间通信的主要目的是实现同一计算机系统内部的相互协作的进程之间的数据共享与信息交换,由于这些进程处于同一软件和硬件环境下,利用操作系统提供的的编程接口,用户可以方便地在程序中实现这种通信;应用程序间通信的主要目的是实现不同计算机系统中的相互协作的应用程序之间的数据共享与信息交换,由于应用程序分别运行在不同计算机系统中,它们之间要通过网络之间的协议才能实现数据共享与信息交换。进程间通信和应用程序间通信及相应的实现技术有许多相同之处,也各有自己的特色。即使是同一类型的通信也有多种的实现方法,以适应不同情况的需要。 ---- 为了充分认识和掌握这两种通信及相应的实现技术,本文将就以下几个方面对这两种通信进行深入的讨论:问题的由来、解决问题的策略和方法、每种方法的工作原理和实现、每种实现方法的特点和适用的范围等。 2 进程间的通信及其实现技术 ---- 用户提交给计算机的任务最终都是通过一个个的进程来完成的。在一组并发进程中的任何两个进程之间,如果都不存在公共变量,则称该组进程为不相交的。在不相交的进程组中,每个进程都独立于其它进程,它的运行环境与顺序程序一样,而且它的运行环境也不为别的进程所改变。运行的结果是确定的,不会发生与时间相关的错误。 ---- 但是,在实际中,并发进程的各个进程之间并不是完全互相独立的,它们之间往往存在着相互制约的关系。进程之间的相互制约关系表现为两种方式: ---- (1) 间接相互制约:共享CPU ---- (2) 直接相互制约:竞争和协作 ---- 竞争——进程对共享资源的竞争。为保证进程互斥地访问共享资源,各进程必须互斥地进入各自的临界段。 ---- 协作——进程之间交换数据。为完成一个共同任务而同时运行的一组进程称为同组进程,它们之间必须交换数据,以达到协作完成任务的目的,交换数据可以通知对方可以做某事或者委托对方做某事。 ---- 共享CPU问题由操作系统的进程调度来实现,进程间的竞争和协作由进程间的通信来完成。进程间的通信一般由操作系统提供编程接口,由程序员在程序中实现。UNIX在这个方面可以说最具特色,它提供了一整套进程间的数据共享与信息交换的处理方法——进程通信机制(IPC)。因此,我们就以UNIX为例来分析进程间通信的各种实现技术。 ---- 在UNIX中,文件(File)、信号(Signal)、无名管道(Unnamed Pipes)、有名管道(FIFOs)是传统IPC功能;新的IPC功能包括消息队列(Message queues)、共享存储段(Shared memory segment)和信号灯(Semapores)。 ---- (1) 信号 ---- 信号机制是UNIX为进程中断处理而设置的。它只是一组预定义的值,因此不能用于信息交换,仅用于进程中断控制。例如在发生浮点错、非法内存访问、执行无效指令、某些按键(如ctrl-c、del等)等都会产生一个信号,操作系统就会调用有关的系统调用或用户定义的处理过程来处理。 ---- 信号处理的系统调用是signal,调用形式是: ---- signal(signalno,action) ---- 其中,signalno是规定信号编号的值,action指明当特定的信号发生时所执行的动作。 ---- (2) 无名管道和有名管道 ---- 无名管道实际上是内存中的一个临时存储区,它由系统安全控制,并且独立于创建它的进程的内存区。管道对数据采用先进先出方式管理,并严格按顺序操作,例如不能对管道进行搜索,管道中的信息只能读一次。 ---- 无名管道只能用于两个相互协作的进程之间的通信,并且访问无名管道的进程必须有共同的祖先。 ---- 系统提供了许多标准管道库函数,如: pipe——打开一个可以读写的管道; close——关闭相应的管道; read——从管道中读取字符; write——向管道中写入字符; ---- 有名管道的操作和无名管道类似,不同的地方在于使用有名管道的进程不需要具有共同的祖先,其它进程,只要知道该管道的名字,就可以访问它。管道非常适合进程之间快速交换信息。 ---- (3) 消息队列(MQ) ---- 消息队列是内存中独立于生成它的进程的一段存储区,一旦创建消息队列,任何进程,只要具有正确的的访问权限,都可以访问消息队列,消息队列非常适合于在进程间交换短信息。 ---- 消息队列的每条消息由类型编号来分类,这样接收进程可以选择读取特定的消息类型——这一点与管道不同。消息队列在创建后将一直存在,直到使用msgctl系统调用或iqcrm -q命令删除它为止。 ---- 系统提供了许多有关创建、使用和管理消息队列的系统调用,如: ---- int msgget(key,flag)——创建一个具有flag权限的MQ及其相应的结构,并返回一个唯一的正整数msqid(MQ的标识符); ---- int msgsnd(msqid,msgp,msgsz,msgtyp,flag)——向队列中发送信息; ---- int msgrcv(msqid,cmd,buf)——从队列中接收信息; ---- int msgctl(msqid,cmd,buf)——对MQ的控制操作; ---- (4) 共享存储段(SM) ---- 共享存储段是主存的一部分,它由一个或多个独立的进程共享。各进程的数据段与共享存储段相关联,对每个进程来说,共享存储段有不同的虚拟地址。系统提供的有关SM的系统调用有: ---- int shmget(key,size,flag)——创建大小为size的SM段,其相应的数据结构名为key,并返回共享内存区的标识符shmid; ---- char shmat(shmid,address,flag)——将当前进程数据段的地址赋给shmget所返回的名为shmid的SM段; ---- int shmdr(address)——从进程地址空间删除SM段; ---- int shmctl (shmid,cmd,buf)——对SM的控制操作; ---- SM的大小只受主存限制,SM段的访问及进程间的信息交换可以通过同步读写来完成。同步通常由信号灯来实现。SM非常适合进程之间大量数据的共享。 ---- (5) 信号灯 ---- 在UNIX中,信号灯是一组进程共享的数据结构,当几个进程竞争同一资源时(文件、共享内存或消息队列等),它们的操作便由信号灯来同步,以防止互相干扰。 ---- 信号灯保证了某一时刻只有一个进程访问某一临界资源,所有请求该资源的其它进程都将被挂起,一旦该资源得到释放,系统才允许其它进程访问该资源。信号灯通常配对使用,以便实现资源的加锁和解锁。 ---- 进程间通信的实现技术的特点是:操作系统提供实现机制和编程接口,由用户在程序中实现,保证进程间可以进行快速的信息交换和大量数据的共享。但是,上述方式主要适合在同一台计算机系统内部的进程之间的通信。 3 应用程序间的通信及其实现技术 ---- 同进程之间的相互制约一样,不同的应用程序之间也存在竞争和协作的关系。UNIX操作系统也提供一些可用于应用程序之间实现数据共享与信息交换的编程接口,程序员可以通过自己编程来实现。如远程过程调用和基于TCP/IP协议的套接字(Socket)编程。但是,相对普通程序员来说,它们涉及的技术比较深,编程也比较复杂,实现起来困难较大。 ---- 于是,一种新的技术应运而生——通过将有关通信的细节完全掩盖在某个独立软件内部,即底层的通讯工作和相应的维护管理工作由该软件内部来实现,用户只需要将通信任务提交给该软件去完成,而不必理会它的具体工作过程——这就是所谓的中间件技术。 ---- 我们在这里分别讨论这三种常用的应用程序间通信的实现技术——远程过程调用、会话编程技术和MQSeries消息队列技术。其中远程过程调用和会话编程属于比较低级的方式,程序员参与的程度较深,而MQSeries消息队列则属于比较高级的方式,即中间件方式,程序员参与的程度较浅。 ---- 4.1 远程过程调用(RPC)