Evilinf

临渊羡鱼,不如退而织网


  • Startseite

  • Archiv

深入理解Java虚拟机:JVM高级特性与最佳实践

Veröffentlicht am 2018-04-07

软件库

走进Java(1)

OpenJDK


自动内存管理机制(2-5)

虚拟机中内存是如何划分的,以及哪部分区域、什么样的代码和操作可能导致内存溢出异常,并讲解了各个区域出现内存溢出异常的常见原因。
分析了垃圾收集的算法和JDK1.7中提供的几款垃圾收集器的特性及运作原理。通过代码实例验证了Java虚拟机自动内存分配及回收的主要规则。
介绍了随JDK发布的6个命令行工具和两个可视化的故障处理的使用方法。


虚拟机执行子系统(6-9)

讲解了Class文件结构中的各个组成部分,以及每个部分的定义、数据结构和使用方法,以实战的方式演示了Class文件的数据是如何存储和访问的。
介绍了类加载过程的“加载”、“验证”、“准备”、“解析”和“初始化”5个阶段中虚拟机分别执行了哪些动作,还介绍了类加载器的工作原理及其对虚拟机的意义。
分析了虚拟机在执行代码时如何找到正确的方法,如何执行方法内的字节码,以及执行代码时涉及到的内存结构。


程序编译与代码优化(10-11)

分析了Java语言中泛型、主动装箱和拆箱、条件编译等多种语法糖的前因后果,并通过实战演示了如何使用插入式注解处理器来实现一个检查程序命名规范的编译器插件。
讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果,此外,还讲解了几种常见的编译优化技术。


高效并发(12-13)

讲解了虚拟机Java内存模型的结构及操作,以及原子性、可见性和有序性在Java内存模型中的体现,介绍了先行发生原则的规则及使用,还了解了线程在Java语言中是如何实现的。
介绍了线程安全涉及的概念和分类、同步实现的方式及虚拟机的底层运作原理,并介绍了虚拟机实现高效并发所采取的一系列锁优化措施。


虚拟机拓展途径推荐

高级语言虚拟机圈子
圈主RednaxelaFX(莫枢)的博客
关于HotSpot虚拟机的最新讨论


Java深入解析-透析Java本质的36个话题

Veröffentlicht am 2018-04-06

基本概念

关键字

goto与const是否为关键字?true、false与null是什么?
goto与const是关键字,还是保留字。true、false与null是字面常量,不是关键字。
在C/C++等语言中,使用goto可以实现程序的跳转,从某些方面来说其提供了一定的方便性,例如,在多重嵌套的循环中,可以直接从内层循环中跳出外层循环。然而,这种跳转却没有任何限制,可以随意地进行,从而打破了正常的程序流程。如果程序中多处使用goto,不仅降低程序的可读性,也会对程序的维护与更新造成影响。因此。为了避免这种情况,java语言取消了goto的使用,取而代之的是使用循环标签。但是,为了避免程序员自行使用goto带来同样的混乱性(例如将方法或变量的名称声明为goto),Java语言仍将goto定义为一个关键字,故也称为“保留字”。const同理,C/C++里面用于声明一个常量,java中用static来实现。
关键字:












abstractassertbooleanbreakbyte
casecatchcharclassconst
continuedefaultdodoubleelse
enumextendsfinalfinallyfloat
forgotoifimplementsimport
instanceofintinterfacelongnative
newpackageprivateprotectedpublic
returnshortstaticstrictfpsuper
switchsynchronizedthisthrowthrows
transienttryvoidvolatilewhile


package chapter1;
public class GotoTest{
public static void main(String[] args){
int[][] array={
{1,20,38},
{28,90},
{60,46,71,100}
};
//int goto=0; 错误,不能使用goto作为标识符。
int number=0;
outer:
for(int i=0;i

标识符

在Java语言中,标识符是区分大小写的,仅当两个标识符的Unicode字符序列完全相同时,这两个标识符才是相同的。
标识符的首字符所对应的代码点必须使得Character类的isJavaIdentifierStart方法返回值为true,后续字符(如果存在后续字符的话)
所对应的代码点必须使得Character类的isJavaIdentifierPart方法返回值为true。并且不能与关键字、布尔字面常量(true、false)和
引用字面常量(null)相同。
应该避免在标识符中使用”$”,尽管”$”可以在标识符中使用,但可能会与编译器的命名相冲突。
当标识符的所有字符都是除了null之外的ASCII字符时,其最大长度可以达到65535(2的16次方-1),如果超过了这个长度,编译器将产生错误信息。


package chapter1;
public class ValidIdentifier{
public static void main(String args[]){
int startNumber=0;
int partNumber=0;
for(int i=0x0000;i<=0x10ffff;i++){
if(Character.isJavaIdentifierStart(i)){
startNumber++;
}
if(Character.isJavaIdentifierPart(i)){
partNumber++;
}
}
System.out.println(“Unicode字符集个数:”+(0x10ffff+1)); //1114112
System.out.println(“可作为标识符首字符的字符个数:”+startNumber); //100801
System.out.println(“可作为标识符一部分的字符个数:”+partNumber); //102903
System.out.println(“二者之差:”+(partNumber-startNumber)); //2102
}
}

package chapter1;
public class User$VIP{
public static void main(String[] args){
User user=new User();
User.VIP vip=user.new VIP();
vip.print();
}
}
class User{
class VIP{
void print(){
System.out.println(“成员类”);
}
}
}

增补字符 转义序列符 八进制转义 Unicode转义

注意转义序列符、八进制转义、Unicode转义的使用。Unicode转义的处理时期要早于转义序列符与八进制转义。
Unicode转义处理时期是在编译器将程序解析成各种符号前就进行的。如果\u后没有接4个十六进制数字,将会产生编译错误,就算是在注释中也不例外。
增补字符(U+10000 ~ U+10FFFF)使用两个代码单元(一个代理对)来表示。因此,所有增补字符都不能使用char类型的常量来表示。
以前U+0000 ~ U+FFFF之间的字符集被称为基本多语言面
增补字符代理对的值区间为U+D800 ~ U+DFFF,该区间没有分配字符。利用这个特征,程序就可以来区分一个char类型的字符到底是单个字符还是一个增补字符的代理字符。


public class Escape{
//char c1=’\u0027’; //Unicode转义 转义之后的结果是‘‘’
//char c2=’\u005c’; //转义之后的结果是’\’
//string s=”\u0022”; //转义之后的结果是“””
//char c3=’\400’; //八进制转义,合理的范围应该是0-255(‘/u0000’-‘/u00ff’),’\400’对应的十进制是256
//char c4=’\28’; //八进制,自然只允许出现0-7这几个数
//char c5=’\u000a’; //报错,相当于在行’后键入一个换行符
//char c6=’\u000d’; //报错,相当于在行’后键入一个回车符,注意:八进制转义或转义字符并不会出现这个问题
}

public class SupplementaryCharacter2{
public static void main(String[] args){
int codePoint=0x28e16; //将代码点转换成字符数组,取得代理对编码值
char[] c=Character.toChars(codePoint);
String s=String.valueOf(c);
System.out.println(“增补字符为:”+s); //开发环境不同,字符显示不同
System.out.println(“String长度:”+s.length()); //2
System.out.println(“String代码点数:”+s.codePointCount(0,s.length())); //1
System.out.println(“高代理字符编码值:U+”+Integer.toHexString(c[0])); //d863
System.out.println(“低代理字符编码值:U+”+Integer.toHexString(c[1])”); //de16
//调用Character方法取得代理对编码值
String high=Integer.toHexString(Character.highSurrogate(codePoint));
String low=Integer.toHexString(Character.lowSurrogate(codePoint));
System.out.println(“高代理字符编码值:U+”+high); //d863
System.out.println(“低代理字符编码值:U+”+low); //de16
//通过代理对取得代码点
int codePoint2=Character.toCodePoint(c[0],c[1]);
System.out.println(“代码点:”+Integer.toHexString(codePoint2)); //28e16
}
}

类型转换


运算符与表达式


String类


方法、构造器与变量


类与接口


Software CookBook

Veröffentlicht am 2018-03-24

Stack Overflow 2018年调查结果

前面这个链接总结比较全面,但属于比较普遍通用的东西,下面强调下某些技术……

建议:使用的软件能使用英文版就使用英文版,文档能接受英文就看英文的

编程、脚本以及标记语言


Stack Overflow排行前几个建议都会用:JavaScript、HTML、CSS、SQL、Java、Bash/Shell……


  • TypeScript

  • xml


框架、库和工具



  • Node.js 让服务器与用户保持较为理想的长轮询

  • Angular

  • React 用于构建用户界面的 JAVASCRIPT 库

  • Spring Java设计层面框架

  • Cordova 提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风等

  • TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库

  • Bootstrap 受欢迎的HTML、CSS和JS框架

  • Gulp.js 前端自动化构建工具

  • MyBatis 持续化数据库管理工具

  • envato市场 前端主题、图片等,用于快速生成前端代码


数据库


数据库在公司项目中,一个项目会用到多种数据库,每种数据库的作用不一样,它们各司其职,协同合作

  • MySQL 关系型数据库

  • MongoDB 非关系型数据库

  • Neo4j 图形数据库


平台



  • Linux 虚拟机Vagrant

  • Windows虚拟机VMware


技术相关关系



版本控制



  • Git

  • SourceTree

笔试

Veröffentlicht am 2017-09-11


百度2017年秋招笔试题总结

逻辑推断题(数字、图形、方位等)

其中有一个题是这样的:假如西北现在表示东,东北方向表示南,那请问南应该表示什么方向?西北
八向图

数学运算题

笔试题里面会涉及到很多数学:概率,指数,取对数……
事件A,B或C发生的概率是98%,A发生的概率是41%,B发生的概率是59%,A、B同时发生的概率是15%,A、C同时发生的概率是25%,B、C同时发生的概率是20%,A、B、C同时发生的概率是14%,问:C发生的概率是多少?

看不懂的题

如果用8种方式改变“computer”的字母顺序,那么变序后的词中,“p”与“e”相邻的词有几个?选项有:720,5040,10080,40320

与软件课程相关的题

数据库:模糊查询(除了SQL语句外,还考三范式)
“%”,”%”,”%“,”__”前四个中哪两个查询结果一样?2和3
计算机网络:OSI(Open System Interconnection)七层模型、3次握手4次挥手
实时路由器的配置发生在OSI的哪一层?

网络层

路由器是在osi的网络层工作的,网络层的功能就是给数据选择路径的,说白了就是路由。
其他:同步、线程
synchronized(对象),什么类型的变量会报错

对象是类,int 是基本数据类型不是对象,可以把int a改成Integer a


线程最终输出结果:

 public class Salt implements Runnable
{
string Spice= ‘YES’;
public void run()
{
this.Spice=’NO’;
}
public static void main(string[] args)throw InterruptedException
{
Salt t=new Salt();
Thread spice_t=new Thread(t);
spice_t.start();
spice_t.sleep(1000);
for(int i=0;i<10;i++) {="" system.out.print(spice_t.spice);="" }="" <="" pre="">

报错

3道编程题

平时可以先把各种排序算法背下,会用上;另外就考基础运算处理,第一题调了半天,核心错误就是1/2=0,1.0/2=0.5


大连思科2018校招软件开发工程师

笔试题(一共四道题 闭包、session、编程、英语翻译)

闭包介绍解释
session

面试题 问了java中的MVC模型以及框架,还有string是一个不变的变量,以及java中的collection,还有一些SQL语句的基本东西

比如:string a; string b; string a=a+b;一共3个存储地址
session

思科的面试有英文部分,英文问与答


大连IBM2018校招 技术顾问

没有笔试,直接面试(几面就不确定了):一般闲聊,就问了一个技术上的问题,类和接口的区别

类和接口的区别

IBM的面试有英文部分,英文问与答,英文自我介绍


所有的面试都会问一个问题“你想去哪个城市”

不要犹豫和彷徨,就是面试公司所在城市


招商银行2017年笔试题

Hash表

1.设有一个含有13个元素的Hash表(O~12),Hash函数是:H(key)=key % 13,其中%是求余数运算.用线性探查法解决冲突,则对于序列(2、8、31、20、19、18、53、27),18应放在第几号格中( ) .

A) 5 B) 9 C) 4 D) 0
2.一个字段大概为6-18长度,问设置为什麽数据类型较为节约空间varchar(10)

几种排序的时间复杂度等










排序法最差时间分析平均时间复杂度稳定度空间复杂度
冒泡排序O(n2)O(n2)稳定O(1)
快速排序O(n2)O(nlog2n)不稳定O(log2n)~O(n)
选择(分区)排序O(n2)O(n2)稳定O(1)
二叉树排序O(n2)O(nlog2n)稳定O(n)
插入排序O(n2)O(n2)稳定O(1)
堆排序O(nlog2n)O(nlog2n)不稳定O(1)
希尔排序OO(n1.5)不稳定O(1)

析构函数

析构函数名也应与类名相同,只是在函数名前面加一个位取反符~,例如~stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数(即使自定义了析构函数,编译器也总是会为我们合成一个析构函数,并且如果自定义了析构函数,编译器在执行时会先调用自定义的析构函数再调用合成的析构函数),它也不进行任何操作。所以许多简单的类中没有用显式的析构函数。

虚函数

在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual 函数返回类型 函数名(参数表){函数体};实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数
基类 对象=new 派生类() 如果将基类方法修饰成virtual,则派生类的方法也对应是virtual,同时也就实现了使用派生类的方法

IP地址+子网掩码->子网号

例:IP地址:10.6.24.0 子网掩码:255.255.240.0 按位与 10.6.XX.0
最终输出结果:


public static void main(string[] args)
{
List li=new ArrayList<>();
li.add(6);
li.add(9);
List list=li;
List ls=list;
System.out.println(ls.get(1));
}

Servelt过滤器

定义:过滤器就是可以对浏览器向jsp,servlet,html等这些web资源发出请求和服务器回应给浏览器的内容,他可以进行过滤。
用途:授权管理;统计web应用的访问量,和访问的命中率,报告;实现web应用的日志处理功能;实现数据压缩功能;对传输的数据进行加密;实现XML文件的XSLT转换;

TCP连接中,客户端会发生发送连接请求/创建套接字/关闭套接字

服务端要监听,所以需要绑定端口。这样客户端才能根据IP地址和端口号访问服务器,客户端的端口是随机分配的。是从还没有使用的端口中分配的。当服务器端收到一个客户端的连接,socket里面有个叫End啥的,就存着那个连接过来的客户端的IP地址和端口了。

数据类型字节长度

byte 1个字节 short 2个字节 char 2个字节 int 4个字节 float 4个字节 double 8个字节 long 8个字节

以俩个字段为条件的分组

select lb,grade,count(*) from fend group by (lb,grade);

进程状态转换,那些是不行的?

A.就绪状态→执行状态 B.执行状态→就绪状态  C.执行状态→阻塞状态 

D.就绪状态→阻塞状态

固定分配存储管理

bitmap实现“属性标签化”

Veröffentlicht am 2017-08-08


标签

原文地址:

http://mp.weixin.qq.com/s/tLL9IB5Tj8486lf11EAskQ


原本统计求交集的SQL语句为:SELECT COUNT(distinct name) as 用户数 from 用户表 where 属性1=’值’ and 属性2=’值’……


标签较少的话还可以,但是用户或标签变多查询的性能会大大降低


bitmap思想操作


  • 建立用户名和用户ID的映射

  • 让每一个标签存储包含此标签的所有的用户ID,每个标签都是一个独立的bitmap

  • 这样,实现用户的去重和查询统计,就变得一目了然

优点


  • Hashset和Hashmap,每个用户的ID需要存储为int类型,而用户在bitmap中只占一个bit,内存节省

  • 在做交集和并集运算时,性能较快

缺点


  • 不支持非运算

RoaringBitmap


EWAHCompressedBitmap



IBM大型机系统管理

Veröffentlicht am 2017-07-12

SDSF、ISPF中使用的命令

L MENBER 定位MENBER
FIND COND 在MSG中找COND F5查找下一个COND
S MEMBER1 ; COPY MENBER2 拷贝MENBER2生成MENBER1
C NAME1 NAME2 ALL 将字符NAME1全部换成NAME2
MAXCC最大返回码


主机系统相关概念

DD实现语句覆盖,作业步EXEC,执行顺序自顶向下
主机中不存在路径的概念,名字唯一(存在段、编目和索引)
主编目上包括3个必须的:system data sets(系统数据集的入口),alias(别名),user catalog pointer
BOOTSTRAP 清除缓存,配置文件,恢复的指定,可IPL(初始化程序加载)
主机系统启动过程:1)硬件上电,灯泡闪烁。2)将系统启动所需要的子程序子任务参数进行配置,3)配置完成之后启动相关子程序参数
主机上地址空间的三种类型:STC TSU(active) JOB
HLQ高级限定词(alias) USERID
卷上的目录结构分两种:BCS基本目录结构,VVDS(VSAM目录结构) SMS存储管理子系统
主机系统中job执行的6个步骤:INPUT CONVERSION EXECUTION OUTPUT HARDCOPY PURGE(spool space、job )
resource:(1)profile离散、通用(2)通用资源TSOPROC等四个类


查找顺序

编目数据集的查找顺序:
主编目-》别名-》用户编目-》VTOC(volume table of contents)-》数据集
主编目-》别名-》系统数据集
没编目数据集的查找顺序:
volume(卷名)-》VTOC(卷目录列表)-》数据集


IBM主机虚拟机Hercules启动步骤

(1)启动虚拟机Hercules
(2)打开pcomm 端口23
(3)command / power on Hercules 加载卷 上电
(4)启动IPL command / IPL/Load Hercules 数据交换 闪 pcomm发生变化
(5)查看活跃任务 D A,L pcomm
(6)回复高量信息 例如:02,term pcomm
(7)S TSO(启动) pcomm
(8)file/运行同一个 pcomm
(9) L TSO (登录)
(10) 账户:IBMUSER 密码DJTUIBM 根据实际情况而定


IBM主机虚拟机Hercules关闭步骤

(1) LOGOFF 在当前的TSO命令提示符界面 pcomm
(2) S SHUTDOWN 正常下电 console页面 (PCOMM)
(3) -DB9G STOP DB2 下掉DB9G组件 console页面 (PCOMM)
(4) C CSQ6MSTER 下掉CSQ6MSTER组件 console页面 (PCOMM)
(5) $P JES2 下掉JES2组件 console页面 (PCOMM)
(6) Z EOD 关闭系统启动 console页面 (PCOMM)
(7) EXIT 关闭虚拟机,保存之前的操作 Hercules虚拟机


IPL相关信息(在ISPF页面依次输入命令:M 5(SDSF) LOG /D IPLINFO /D PARMLIB /D PUBLIC)

ORDER:MVS JES2
执行“/D IPLINFO”的结果
IEE254I 09.17.59 IPLINFO DISPLAY 990
SYSTEM IPLED AT 08.34.40 ON 04/27/2017
RELEASE z/OS 01.09.00 LICENSE = z/OS
USED LOAD9C IN SYS1.IPLPARM ON 0A82 (load RELATIVE INFO )
ARCHLVL = 2 MTLSHARE = N
IEASYM LIST = 00
IEASYS LIST = 9C (OP) (LOAD)
IODF DEVICE 0A82 (IODF)
IPL DEVICE 0A80 VOLUME Z9RES1 (SYSRES)

从上面的信息可知:
IPL系统驻留卷:0A80 sysres 类似于C盘的Windows文件夹:与系统相关的恢复日志等相关的配置
IODF: 0A82 29sys1
LOAD :99
系统查找LOAD参数的查找顺序
系统首先在IODF盘卷上查找SYSn.IPLPARM(n:0~9)
然后系统在IODF盘卷上搜索SYS1.PARMLIB
最后系统在SYSRES卷上搜索SYS1.PARMLIB


将一个卷格式化重命名

VTOC 在SDSF上输入/D U,,,A80 查看以A80开始的卷的位置
(1)将要格式化的卷进行下线,两种方法 最开始的地方R 00,A97 将A97下线或者V A97,OFFLINE
(2)执行以下代码,将物理名为0A97上的卷的卷名USER02改为USER03
//IBMUSERA JOB 2017,’Z,W,Q’,CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID
//INITDASD EXEC PGM=ICKDSF,COND=(4000,LT)
//SYSPRINT DD SYSOUT=
//SYSIN DD

INIT UNITADDRESS(0A97) VERIFY(USER02) PURGE -
INDEX(99,0,15) VTOC(100,0,15) NOVALIDATE -
VOLID(USER03) OWNER(IBMUSER)
/*
(3)提交上面的JCL,在console界面上根据提示回复02,U
(4)再将0A97上线,“V A97,ONLINE”
(5)最后在SDSF上查看该卷USER03 /D U,,,A80


系统安装(SMP/E

命令:先“Receive”SMP/E数据集(这过程中也可以“Reject”),再将该数据集“Apply”到Targeted Libraries(也可以从Distribution Libraries“Restore”到Targeted Libraries),或“Accept”到Distribution Libraries。


拷贝分区数据集STU100.cics.jcl的命令

(1) 在要拷贝的数据集前Ctrl“CO”,再用“S”选中对应的成员,Ctrl,Ctrl入“ CICS.JCL”,也可以根据自己要求进行修改数据集参数
(2) 在ISPF主界面Ctrl“3.3” C ‘STU100.CICS.JCL(*)’ CICS.JCL


打印卷SARES1上SYS1.VVDS.VSARES1的前10个VVDS(需修改的参数是DSN和VOL,指定对应的卷上对应的数据集)

查看系统含有VVDS的数据集,在3.4中输入IBMUSER..VVDS或者.VVDS
一个卷只有一个VVDS数据集,且命名为SYS1.VVDS.V开始
//IBMUSERA JOB 1,’Z,W,Q’,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID,CLASS=A
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=A
//VVDS DD DSN=SYS1.VVDS.VSARES1,DISP=SHR,
// UNIT=3390,VOL=SER=SARES1,AMP=AMORG
//SYSIN DD
PRINT INFILE(VVDS) -
CHARACTER COUNT(10)
/

//
以&开始的数据名为临时数据集,只在本过程使用,之后释放 &SYSUID变量


IDCAMS(IntegrateD Catalog Access Method Services)功能:

1.定义主编目和用户编目;
2.定义VSAM数据集
3.定义VSAM数据集记录
4.定义VSAM数据集执行备份操作
5.显示编目中的记录
6.删除数据集


打印卷USER02上的VTOC信息

//IBMUSERA JOB 1,’L,T’,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID,CLASS=A
//STEP1 EXEC PGM=IEHLIST
//SYSPRINT DD SYSOUT=
//DD1 DD UNIT=3390,VOL=SER=USER02,DISP=SHR
//SYSIN DD

LISTVTOC VOL=3390=USER02
/*
//
IEHLIST程序用于系统信息列表,其中包括分区数据集目录列表、 VTOC 列表以及编目列表等。


查看系统所有alias信息 或 可以在ISPF面板上6 LISTCAT ALIAS ALL

//IBMUSERB JOB 1,’Z,W,Q’,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID,CLASS=A,REGION=6M
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=
//SYSIN DD

LISTCAT ALIAS ALL
/*
//
查看系统所有USERCATALOG信息 或 可以在ISPF面板上6 LISTCAT USERCATALOG ALL


查看清空SPOOL池

SDSF /$D SPOOL LOG 清除spool (1)$PJ1-999999 (2)$PO JOBQ,DAY>0(常用,把相关日志一并清除)
/C U=IBMUSER (cancel user“IBMUSER”)


HLQ=USERID=ALIAS CATALOG VTOC
SMS (STORAGE MANAGE SYSTEM) (user don’t need to specify the volume)
config the SMS parameter
(1)ISMF GUI
(2)utility basic model:DFSMSdfp
selective model: DFSMSdss、DFSMSrmm、DFSMShsm
Attribute:DC(Data Class attribute)/SC(Storage Class attribute)/MC(Management Class attribute)/SG(Storage Group attribute) and ASC(Automatic Class Selection)


strong:IPL RACF(safe management) database
RACF basic struture:groups (superior group/subgroup) /users/resources
group type:USER/FUNCTIONAL/HOLDING/DATA CONTROL/ADMINISTRATIVE
operation command:SEARCH/LISTGROUP/ADDGROUP/ALTGROUP/DELGROUP/CONNECT/REMOVE
the right of user connect the group: USE CREATE CONNECT JOIN


look the information of group“TEST”

//IBMUSERC JOB 1,’Z,W,Q’,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID,CLASS=A,REGION=6M
//STEP1 EXEC PGM=IKJEFT01,DYNAMNBR=20,REGION=4096K
//SYSPRINT DD DUMMY
//SYSTSPRT DD SYSOUT=
//SYSTSIN DD

LISTGRP TEST
/*
//


定义用户编目USERCAT.Z19.IBMUSER

//IBMUSERA JOB 2017,’Z,W,Q’,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID,CLASS=A,REGION=6M
//RACF01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=
//SYSIN DD

DEFINE UCAT( +
NAME(USERCAT.Z19.IBMUSER) +
VOL(USER01) +
CYL(1,1) +
)
/*


查看用户编目USERCAT.Z19.IBMUSER的接口

//IBMUSERA JOB 2017,’Z,W,Q’,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID,CLASS=A,REGION=6M
//RACF02 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=
//SYSIN DD

LISTCAT USERCATALOG ENTRIES(USERCAT.Z19.IBMUSER) ALL
/*


在组TEST下定义子组SAGRP

//IBMUSERA JOB 2017,’Z,W,Q’,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID,CLASS=A,REGION=6M
//RACF03 EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSPRINT DD SYSOUT=
//SYSTSPRT DD SYSOUT=

//SYSUADS DD DSN=SYS1.UADS,DISP=SHR
//SYSLBC DD DSN=SYS1.BRODCAST,DISP=SHR
//SYSTSIN DD
AG SAGRP SUPGROUP(TEST) OWNER(IBMUSER)
/


定义别名,与用户编目关联

//IBMUSERA JOB 2017,’Z,W,Q’,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID,CLASS=A,REGION=6M
//RACF04 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=
//SYSIN DD

DEF ALIAS(NAME(SA001) RELATE(USERCAT.Z19.IBMUSER))
DEF ALIAS(NAME(SA002) RELATE(USERCAT.Z19.IBMUSER))
DEF ALIAS(NAME(SA003) RELATE(USERCAT.Z19.IBMUSER))
DEF ALIAS(NAME(SA004) RELATE(USERCAT.Z19.IBMUSER))
DEF ALIAS(NAME(SA005) RELATE(USERCAT.Z19.IBMUSER))
/*


添加一个进程库(TSOPROC需要实体文件支持)

在系统数据集ADCD.Z19.PROCLIB中 S SAPROC;COPY DBSPROC9
ACCTNUM类不需要实体文件支持
新建两个通用资源,一个是TSOPROC类的名叫TSOPROC的资源,另一个是ACCTNUM类的名叫12345678的资源
//IBMUSERA JOB 2017,’Z,W,Q’,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID,CLASS=A,REGION=6M
//RACF05 EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSPRINT DD DUMMY
//SYSTSPRT DD SYSOUT=
//SYSTSIN DD

RDEF TSOPROC SAPROC UACC(NONE)
RDEF ACCTNUM 12345678 UACC(NONE)
/*
查看:M.3 2 9 CLASS=TSOPROC或者ACCTNUM


授权PERMIT

//IBMUSERA JOB 2017,’Z,W,Q’,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID,CLASS=A,REGION=6M
//RACF06 EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSPRINT DD DUMMY
//SYSTSPRT DD SYSOUT=
//SYSTSIN DD

PE SAPROC CL(TSOPROC) ID(SAGRP) ACC(UPDATE)
PE 12345678 CL(ACCTNUM) ID(SAGRP) ACC(UPDATE)
PE JCL CL(TSOAUTH) ID(SAGRP) ACC(ALTER)
PE OPER CL(TSOAUTH) ID(SAGRP) ACC(READ)
/*


刷新RACF列表,使授权生效

//IBMUSERA JOB 2017,’Z,W,Q’,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID,CLASS=A,REGION=6M
//RACF07 EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSPRINT DD DUMMY
//SYSTSPRT DD SYSOUT=
//SYSTSIN DD

SETR RACLIST(TSOPROC) REFRESH
SETR RACLIST(ACCTNUM) REFRESH
SETR RACLIST(TSOAUTH) REFRESH
SETR GENERIC() REFRESH
/


添加用户到新建的组SAGRP

//IBMUSERA JOB 2017,’Z,W,Q’,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID,CLASS=A,REGION=6M
//RACF08 EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSPRINT DD DUMMY
//SYSTSPRT DD SYSOUT=
//SYSLBC DD DSN=SYS1.BRODCAST,DISP=SHR
//SYSTSIN DD

AU SA001 OWNER(SAGRP) DFLTGRP(SAGRP) -
PASS(1) TSO(PROC(SAPROC) ACCTNUM(12345678) SIZE(4096))
AU SA002 OWNER(SAGRP) DFLTGRP(SAGRP) -
PASS(1) TSO(PROC(SAPROC) ACCTNUM(12345678) SIZE(4096))
AU SA003 OWNER(SAGRP) DFLTGRP(SAGRP) -
PASS(1) TSO(PROC(SAPROC) ACCTNUM(12345678) SIZE(4096))
AU SA004 OWNER(SAGRP) DFLTGRP(SAGRP) -
PASS(1) TSO(PROC(SAPROC) ACCTNUM(12345678) SIZE(4096))
AU SA005 OWNER(SAGRP) DFLTGRP(SAGRP) -
PASS(1) TSO(PROC(SAPROC) ACCTNUM(12345678) SIZE(4096))
/*


各用户之间的数据集的访问权限

//IBMUSERA JOB 2017,’Z,W,Q’,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID,CLASS=A,REGION=6M
//RACF09 EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=
//SYSTSIN DD

ADDSD ‘SA001.‘ OWNER(SA001) UACC(NONE)
ADDSD ‘SA002.
‘ OWNER(SA002) UACC(NONE)
ADDSD ‘SA003.‘ OWNER(SA003) UACC(NONE)
ADDSD ‘SA004.
‘ OWNER(SA004) UACC(NONE)
ADDSD ‘SA005.‘ OWNER(SA005) UACC(NONE)
/


cics讲解

Veröffentlicht am 2017-06-30

源码放于:https://github.com/evilinf/certificate
最近做完一个课设,这门语言很老,开发系统很low,所以学习的人少,知道的人也少,这门语言不难,我把我觉得我系统中觉得好的部分呈现出来

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. LAB8.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
COPY STU090A. //拷贝MAPSET的接口的数据定义,以向map传输数据
COPY STU090D.
COPY DFHAID.
01 TSTAMP PIC S9(15) COMP-3. //系统时间初始放置的数据名
01 RCODE PIC S9(4) COMP. //操作之后的返回码
01 RETURNS PIC 9(12). //加总和
01 SDATE. //起始日期数据组合项
02 SYEA PIC 9(4).
02 FILLER PIC X.
02 SMON PIC 9(2).
02 FILLER PIC X.
02 SDAY PIC 9(2).
01 EDATE. //终止日期数据组合项
02 EYEA PIC 9(4).
02 FILLER PIC X.
02 EMON PIC 9(2).
02 FILLER PIC X.
02 EDAY PIC 9(2).
01 CERREC. //VSAM文件记录接收组合项
02 CERNUM PIC 9(4). //凭证编号
02 FDATE. //凭证填制日期
03 FMON PIC 9(2).
03 FILLER PIC X.
03 FDAY PIC 9(2).
03 FILLER PIC X.
03 FYEA PIC 9(4).
02 SUBDE PIC X(20). //借方科目
02 NUMDE PIC 9(8). //借方金额
02 SUBCR PIC X(20). //贷方科目
02 NUMCR PIC 9(8). //贷方金额
02 FILLOR PIC X(8). //填制人
02 ADUITOR PIC X(8). //审核人
LINKAGE SECTION.
01 DFHCOMMAREA. //公共域传值,用于接收上个页面传过来的值
02 CNAME PIC X(8). //登录者
02 CRIGHT PIC X. //登录者权限
PROCEDURE DIVISION.
EVALUATE TRUE //功能键判断
WHEN EIBAID = DFHPF12
MOVE LOW-VALUE TO SUMDATAO //将SUMDATA的接口赋初值,以防止出现不想要的字符
PERFORM SEND-SUMDATA //执行对应的段
WHEN EIBAID = DFHENTER
PERFORM PROCESS-COMPUTE
WHEN EIBAID = DFHPF1
EXEC CICS RETURN END-EXEC //退出系统
WHEN EIBAID = DFHPF3
PERFORM RETURN-FUN
END-EVALUATE.
SEND-SUMDATA. //发送当前的map 为了防止程序死,所以每种情况下一定会有个cics的return语句
MOVE LOW-VALUE TO SUMDATAO.
EXEC CICS SEND MAP(‘SUMDATA’) MAPSET(‘STU090D’) ERASE //发送map时记得加erase参数,目的是发送map前先清屏
END-EXEC.
EXEC CICS RETURN TRANSID(‘0908’) COMMAREA(DFHCOMMAREA)
END-EXEC.
PROCESS-COMPUTE.
EXEC CICS RECEIVE MAP(‘SUMDATA’) MAPSET(‘STU090D’) END-EXEC. //接收map
MOVE SDATEI TO SDATE. //将页面输入的起始时间传给起始数据名
MOVE EDATEI TO EDATE.
MOVE 0 TO RETURNS. //赋初值 returns = 0
EXEC CICS STARTBR FILE(‘PINGZ090’) RIDFLD(CERNUM) //遍历VSAM文件开始,文件名PINGZ090,键值:CERNUM
RESP(RCODE) END-EXEC
IF RCODE EQUAL DFHRESP(NORMAL) //如果防止初始文件成功,开始遍历
PERFORM UNTIL RCODE EQUAL DFHRESP(ENDFILE) //用循环遍历
EXEC CICS READNEXT FILE(‘PINGZ090’) INTO(CERREC)
RIDFLD(CERNUM) RESP(RCODE) END-EXEC
IF FYEA = SYEA AND FYEA = EYEA AND FMON = SMON AND //对当前日期是否在起始日期之间的判定
FMON = EMON AND FDAY >= SDAY AND FDAY <= EDAY
ADD NUMDE TO RETURNS //如果在这之间,就将借方金额给returns
END-IF
IF FYEA = SYEA AND FYEA = EYEA AND FMON > SMON AND
FMON = EMON AND FDAY <= EDAY
ADD NUMDE TO RETURNS
END-IF
IF FYEA = SYEA AND FYEA = EYEA AND FMON = SMON AND
FMON < EMON AND FDAY >= SDAY
ADD NUMDE TO RETURNS
END-IF
IF FYEA = SYEA AND FYEA = EYEA AND FMON > SMON AND
FMON < EMON
ADD NUMDE TO RETURNS
END-IF
IF FYEA > SYEA AND FYEA = EYEA AND FMON <= EMON
ADD NUMDE TO RETURNS
END-IF
IF FYEA = SYEA AND FYEA < EYEA AND FMON >= SMON
ADD NUMDE TO RETURNS
END-IF
IF FYEA > SYEA AND FYEA < EYEA
ADD NUMDE TO RETURNS
END-IF
END-PERFORM
EXEC CICS ENDBR FILE(‘PINGZ090’) END-EXEC //结束对文件的浏览
MOVE RETURNS TO RETURNSO //将最后的加总值用于显示
END-IF
EXEC CICS SEND MAP(‘SUMDATA’) MAPSET(‘STU090D’) END-EXEC.
EXEC CICS RETURN TRANSID(‘0908’) COMMAREA(DFHCOMMAREA)
END-EXEC.
RETURN-FUN. //返回功能选择界面
MOVE LOW-VALUE TO SELECTFO.
EXEC CICS SEND MAP(‘SELECTF’) MAPSET(‘STU090A’)
ERASE END-EXEC.
EXEC CICS RETURN TRANSID(‘0902’) COMMAREA(DFHCOMMAREA)
END-EXEC.

论文要点

Veröffentlicht am 2017-05-11

写作来源

最近两个月来,一直在忙一个比赛。比起这个比赛来,之前的比赛都没投入太多,但是,确实也学到了很多,做人上、说话上、为人上……发现自己真的差得远呢!虽然整个人很是沉闷,但觉得有必要将自己努力习得的东西进行记录,以防自己以后将它忘记。

论文写作要点

一个论文最重要的就是一个基本框架,不同形式的论文的会涉及到不同的框架,每种类型的论文都有它特定的框架,所谓的框架就是各级标题之间的关系。
各级标题之间要用文字将它们之前的关系串联起来,可以将每个标题理解为一个点,而论文应该是以某个问题为主的一条线,所以在各标题的地方使用一些连接语句将这个点连成一条线。在同级标题之间可以由上一个标题引出下一个,而上下级标题则是在大标题处将整个大标题里涵盖的小标题列举出来,上级标题不要和下级标题重复。(具体例子参考书上的构架逻辑便知)
论文中涉及的图、表、公式字体应该和正文一样、居中、按内容调整,其中的图和表应该在前后各空一行,表头在标的前面(居中),图的标题应该在图的下面(居中),图、表都需要序号,在文中表达时,避免使用“如上图所示”,应该是“如图1-1所示”,图和表最好不要跨页。
从网上粘贴而来的文字要取消超链接以及不规范的格式,目前笔者知道比较靠谱的办法,就是将文字放在记事本一下,再粘贴到论文中。记事本是最好取消文本格式的,它把所有文字都还原为最初形态,这是之前一个老师告知的。记事本虽然很不方便,但却可以写各种类型的文件以及转换格式,这也是它为什么如此不好用还依然存在的道理吧。(个人看法而已)
还有就是一些细节上的问题:字少不要成行,字少不要成句,句短不要成段,三两行不要成段,段尾一行不要在下一页。
参考论文可上知网

总结

Veröffentlicht am 2017-05-04

写在前言

这些知识点都是用于理论学习。

相对指标

(1)表述上分母在前,分子在后;
(2)简称省略分母;
(3)在没有特殊说明时,一般为年指标;
(4)分子分母计算口径要保持一致(范围、时间、动静态)

表格分析(例如资产负债表)

表格分析一般分三类:静态、动态、比较分析。
静态分析:该数据客观上表示的意思;
动态分析:和以前年度(或者一个时间轴上同期相比),观察它的增减变化;
比较分析:行业比较。
分析变动的原因一般采用循环替代法,用这方法之前,要确定几个因素。

论文相关的知识

论文参考,可上中国知网(账号:kc2003密码:cnkikw);
参考数据可去 锐思数据、国泰安数据库和万德数据库

融资

Veröffentlicht am 2017-05-02


国企、央企因为有着银行授信,所以它的贷款成本低;而民营企业没有担保公司是接触不到银行的。从而导致资本成本高,这是的民营企业的毛利润若达不到100%就会出现各种问题,因为他们大部分的盈利主要给了三个方面:税务局、银行、员工。所以解决这个问题最好的办法就是国企和民企结合,因为国企类的没有什么创新业务,这样结合之后对国企也有利,当然民营企业也就能解决资金问题。当想跟国有企业合作并没有那么容易,因为国有企业追求资金安全,他们并没有那么看重盈利(安全保证的前提下在追求盈利)。

轻资产问题

轻资产对融资不太有利,一、资产是银行给你贷款的保证;二、资产按正常程序处理需要3、4年的时间,里面还有着很高的机会成本在里面。如果一个企业的融资不存在多大的问题,类似于国企、央企,就可以考虑企业轻资产运行,从而更高效地运用资产,从而提高资产的盈利能力、营运能力、偿债能力、发展能力。

扩展链接(查资料时发现相对较好的文章)

https://www.zhihu.com/question/38903314/answer/78951196 (民营企业融资问题)
https://zhidao.baidu.com/question/459426150024177645.html
https://www.zhihu.com/question/20574867 (资产管理公司)

民企贷款难的原因

银行通过贷款盈利,而不太愿意贷给民企,这其中是有一定原因的:民营企业没有资产类的抵押的话,当坏账发生时,银行对民企的控制强度会大大减弱的。民企的信用等级一般也偏低,之前听过一句话“你看中的是利息,而别人看中的是你的本金”,也许银行近几年的坏账让他们太懂得这句话的含义了吧。

12
evilinf

evilinf

20 Artikel
2 Tags
Links
  • Tian Hao
  • Flynnon
© 2018 evilinf
Erstellt mit Hexo
Theme - NexT.Muse