网站首页 > 技术文章 正文
一、 传统项目
1. 什么是 BOS?
ERP 系统是企业资源计划(Enterprise Resource Planning )的简称。
BOSS(Business & Operation Support )指的是业务运营支撑系统。
BOS 是 ERP 的集成与应用平台。 BOS 遵循面向服务的架构体系,是一个面向业务的可视化开发平台;是一个
ERP 和第三方应用集成的技术平台。它有效的解决了 ERP 应用的最主要矛盾---用户需求个性化和传统 ERP 软件标准化之间的矛盾。
BOS 与 ERP 是什么关系?
ERP 是企业管理信息化的全面解决方案, ERP 是基于 BOS 构建的。 ERP 满足企业全面业务的标准应用;BOS 确保了企业 ERP 应用中的个性化需求完美实现。基于 BOS 的 ERP,可以为不同行业不同发展阶段的企业构建灵活的、可扩展的、全面集成的整体解决方案。
2. Activity 工作流
2.1 什么是工作流?
(举个栗子)现在大多数公司的请假流程是这样的:员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑。采用工作流技术的公司的请假流 程是这样的:员工使用账户登录系统——点击请假——上级登录系统点击允许。就这样,一个请假流程就结束了。有 人会问,那上级不用向公司提交请假记录?公司不用将记录录入电脑?答案是,用的。但是这一切的工作都会在上级点击允许后自动运行!这就是工作流技术。
Georgakopoulos 给出的工作流定义是: 工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完。
2.2 工作流技术的优点
从上面的例子,很容易看出,工作流系统实现了工作流程的自动化,提高了企业运营效率、改善企业资源利用、提高企业运作的灵活性和适应性、提高量化考核业务处理的效率、减少浪费(时间就是金钱)。而手工处理工作流程,一方面无法对整个流程状况进行有效跟踪、了解,另一方面难免会出现人为的失误和时间上的延时导致效率低下,特别是无法进行量化统计,不利于查询、报表及绩效评估。
2.3 工作流生命周期
除了我们自行启动(start)或者结束(finish)一个 Activity,我们并不能直接控制一个 Activity 的生命状态,我们只能通过实现 Activity 生命状态的表现——即回调方法来达到管理 Activity 生命周期的变化。
什么叫脏数据,什么叫脏读(Dirty Read)
脏数据在临时更新(脏读)中产生。事务 A 更新了某个数据项 X,但是由于某种原因,事务 A 出现了问题,于是要把 A 回滚。但是在回滚之前,另一个事务 B 读取了数据项 X 的值(A 更新后),A 回滚了事务,数据项恢复了原值。事务 B 读取的就是数据项 X 的就是一个“临时”的值,就是脏数据。
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
Jsp 有什么特点?
JSP(Java Server Pages)是由 Sun Microsystems 公司倡导、许多公司参与一起建立的一种动态网页技术标准。
JSP 技术是用 JAVA 语言作为脚本语言的,JSP 网页为整个服务器端的 JAVA 库单元提供了一个接口来服务于 HTTP 的应用程序。
在传统的网页 HTML 文件(*.htm,*.html)中加入 Java 程序片段(Scriptlet)和 JSP 标记(tag),就构成了 JSP 网页
(*.jsp)。Web 服务器在遇到访问 JSP 网页的请求时,首先执行其中的程序片段,然后将执行结果以 HTML 格式返回给客户。程序片段可以操作数据库、重新定向网页以及发送 email 等等,这就是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无 Plugin,无ActiveX,无 Java Applet,甚至无 Frame。
JSP 的优点:
1)对于用户界面的更新,其实就是由 Web Server 进行的,所以给人的感觉更新很快。
2)所有的应用都是基于服务器的,所以它们可以时刻保持最新版本。
3)客户端的接口不是很繁琐,对于各种应用易于部署、维护和修改。
JavaScript 有哪些优缺点?
(1).javascript 的优点:
javascript 减少网络传输。
在 javascript 这样的用户端脚本语言出现之前,传统的数据提交和验证工作均由用户端浏览器通过网络传输到服务器开发上进行。如果数据量很大,这对于网络和服务器开发的资源来说实在是一种无形的浪费。而使用 javascript 就可以在客户端进行数据验证。
javascript 方便操纵 html 对象。
javascript 可以方便地操纵各种页面中的对象,用户可以使用 javascript 来控制页面中各个元素的外观、状态甚至运行方式,javascript 可以根据用户的需要“定制”浏览器,从而使网页更加友好。
javascript 支持分布式应用运算。
javascript 可以使多种任务仅在用户端就可以完成,而不需要网络和服务器开发的参与,从而支持分布式应用 的运算和处理。
(2)javascript 的局限性:
各浏览器厂商对 javascript 支持程度不同。
目前在互联网 上有很多浏览器,如 firefox、internet explorer、opera 等,但每种浏览器支持 javascript 的程度是不一样的,不同的浏览器在浏览一个带有 javascript 脚本的主页时,由于对 javascript 的支持稍有不同,其效果会有一定的差距,有时甚至会显示不出来。
“web 安全性”对 javascript 一些功能牺牲。
当把 javascript 的一个设计目标设定为“web 安全性”时,就需要牺牲 javascript 的一些功能。因此,纯粹的
javascript 将不能打开、读写和保存用户计算机上的文件。其有权访问的唯一信息就是该 javascript 所嵌入开发 的那个 web 主页中的信息,简言之,javascript 将只存在于它自己的小小世界—web 主页里。
什么叫对象持久化(OBJect PERSIstence),为什么要进行对象持久化?
持久化的对象,是已经存储到数据库或保存到本地硬盘中的对象,我们称之为持久化对象。为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存 object states,但是 Java 给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
简单说就是对象序列化是将对象状态转换为可保持或传输的格式的过程。什么情况下需要序列化 :
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过 RMI 传输对象的时候;
对象要实现序列化,是非常简单的,只需要实现 Serializable 接口就可以了。
public class Test implements Serializable
为什么要使用接口和抽象类?
Java 接口和 Java 抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现。OOP 面向对象的编程, 如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须是面向接口的编程,面向抽象的编程,正确地使用接口、抽象类这些太有用的抽象类型做为你结构层次上的顶层。
1、Java 接口和 Java 抽象类最大的一个区别,就在于 Java 抽象类可以提供某些方法的部分实现,而 Java 接口不可以,这大概就是 Java 抽象类唯一的优点吧,但这个优点非常有用。 如果向一个抽象类里加入一个新的具体方法时, 那么它所有的子类都一下子都得到了这个新方法,而 Java 接口做不到这一点,如果向一个 Java 接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行.
2、一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于 Java 语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。 在这一点上,Java 接口的优势就出来了,任何一个实现了一个 Java 接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个
Java 接口,从而这个类就有了多种类型。
3、从第 2 点不难看出,Java 接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为, 而且具有其他的次要行为。
4、结合 1、2 点中抽象类和 Java 接口的各自优势,具精典的设计模式就出来了:声明类型的工作仍然由 Java 接口承担,但是同时给出一个 Java 抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个
Java 接口,也可以选择继承这个抽象类,也就是说在层次结构中,Java 接口在最上面,然后紧跟着抽象类,哈,这下两个的最大优点都能发挥到极至了。这个模式就是“缺省适配模式”。 在 Java 语言 API 中用了这种模式,而且全都遵循一定的命名规范:Abstract +接口名。
Java 接口和 Java 抽象类的存在就是为了用于具体类的实现和继承的,如果你准备写一个具体类去继承另一个具体类的话,那你的设计就有很大问题了。Java 抽象类就是为了继承而存在的,它的抽象方法就是为了强制子类必须去实现的。
使用 Java 接口和抽象 Java 类进行变量的类型声明、参数是类型声明、方法的返还类型说明,以及数据类型的转换等。而不要用具体 Java 类进行变量的类型声明、参数是类型声明、方法的返还类型说明,以及数据类型的转换等。我想,如果你编的代码里面连一个接口和抽象类都没有的话,也许我可以说你根本没有用到任何设计模式,任何一个设计模式都是和抽象分不开的,而抽象与 Java 接口和抽象 Java 类又是分不开的。
接口的作用,一言以蔽之,就是标志类的类别。把不同类型的类归于不同的接口,可以更好的管理他们。把一组看如不相关的类归为一个接口去调用.可以用一个接口型的变量来引用一个对象,这是接口我认为最大的作用.
继承(inheritance)的优缺点是什么?
优点:
新的实现很容易,因为大部分是继承而来的 。很容易修改和扩展已有的实现缺点:
打破了封装,因为基类向子类暴露了实现细节 ,白盒重用,因为基类的内部细节通常对子类是可见的 ,当父类的实现改变时可能要相应的对子类做出改变 ,不能在运行时改变由父类继承来的实现。由此可见,组合比继承具有更大的灵活性和更稳定的结构,一般情况下应该优先考虑组合。只有当下列条件满足时才考虑使用继承: 子类是一种特殊的类型,而不只是父类的一个角色 ,子类的实例不需要变成另一个类的对象子类扩展,而不是覆盖或者使父类的功能失效。
写出 5 个常见的运行时异常(RuntimeException)。
1) ClassCastException(类转换异常)
2) IndexOutOfBoundsException(数组越界)
3) NullPointerException(空指针)
4) ArrayStoreException(数据存储异常,操作数组时类型不一致)
5) IO 操作的 BufferOverflowException 异常
方法重载(overload)需要满足什么条件,方法覆盖/方法重写(override)需要满足什么条件?(二选一)
答案:重载需要满足的条件:在同一类中定义的方法, 方法名必须相同 ,返回类型必须相同,参数一定不同。发 生 覆 盖 的 条 件 : “三同一不低”,子类和父类的方法名称,参数列表,返回类型必须完全相同,而且子类方法的访问修饰符的权限
不能比父类低。
子类方法不能抛出比父类方法更多的异常。即子类方法所抛出的异常必须和父类方法所抛出的异常一致,或者是其子类,或者什么也不抛出;
被覆盖的方法不能是 final 类型的。因为 final 修饰的方法是无法覆盖的。
被覆盖的方法不能为 private。否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
被覆盖的方法不能为 static。所以如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误。反之亦然。即使父类和子类中的方法都是静态的,并且满足覆盖条 件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。
重写规则:重写方法不能比被重写方法限制有更严格的访问级别。(但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是 public 访问权限。)比如:Object 类有个 toString()方法,开始重写这个方法的时候我们总容易忘记 public 修饰符,编译器当然不会放过任何教训我们的机会。出错的原因就是:没有加任何访问修饰符的方法具有包访问权限,包访问权限比 public 当然要严格了,所以编译器会报错的。参数列表必须与被重写方法的相同。重写有个孪生的弟弟叫重载,也就是后面要出场的。如果子类方法的参数与父类对应的方法不同,那么就是你认错人了,那是重载,不是重写。返回类型必须与被重写方法的返回类型相同。
父类方法 A:void eat(){} 子类方法 B:int eat(){} 两者虽然参数相同,可是返回类型不同,所以不是重写。
父类方法 A:int eat(){} 子类方法 B:long eat(){} 返回类型虽然兼容父类,但是不同就是不同,所以不是重写
写出 5 个你在 JAVA 开发中常用的包含(全名),并简述其作用。
常用的五个:
1) java.lang.*
提供利用 Java 编程语言进行程序设计的基础类。最重要的类是 Object(它是类层次结构的根)和 Class(它的实例表示正在运行的应用程序中的类)。
2) java.util.*
包含集合框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组、日期 Date 类、堆栈 Stack 类、向量 Vector 类等)。集合类、时间处理模式、日期时间工具等各类常用工具包
3) java.io.*
Java 的核心库 java.io 提供了全面的 IO 接口。包括:文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。
4) java.net.*
并非所有系统都支持 IPv6 协议,而当 Java 网络连接堆栈尝试检测它并在可用时透明地使用它时,还可以利用系统属性禁用它。在 IPv6 不可用或被显式禁用的情况下,Inet6Address 对大多数网络连接操作都不再是有效参数。虽然可以保证在查找主机名时 java.net.InetAddress.getByName 之类的方法不返回 Inet6Address,但仍然可能通过传递字面值来创建此类对象。在此情况下,大多数方法在使用 Inet6Address 调用时都将抛出异常。
5) java.sql.*
提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。此 API 包括一个框架,凭借此框架可以动态地安装不同驱动程序来访问不同数据源。
Java 环境变量 Unix/Linux 下如何配置?
答案:修改/etc/profile 文件当本机仅仅作为开发使用时推荐使用这种方法,因为此种配置时所有用户的 shell 都有权使用这些环境变量,可能会给系统带来安全性问题。用文本编辑器打开/etc/profile,在 profile 文件末尾加入: JAVA_HOME=/usr/share/jdk1.5.0_05
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME
export PATH
export CLASSPATH 重新登录即可
猜你喜欢
- 2024-10-04 Netty:数据传输载体- ByteBuf 详解
- 2024-10-04 JDK源码阅读:ByteBuffer(jdk源码阅读顺序以及优先级)
- 2024-10-04 好文推荐:从JVM模型谈十种内存溢出及解决方法
- 2024-10-04 「系列教程」手写RPC框架(2) BIO模型替换成NIO模型学习
- 2024-10-04 详解Java NIO中的Buffer、Channel 和 Selector
- 2024-10-04 Java常见的面试题(java面试常见问题与答案)
- 2024-10-04 「系列教程」手写RPC框架(2) NIO模型学习
- 2024-10-04 什么是缓冲区溢出攻击?(缓冲区溢出攻击代名词)
- 2024-10-04 java教程、JAVA学习 |JAVA面试题大全(高级)
- 2024-10-04 Java并发编程之NIO简明教程(java并发编程实战 看不懂)
- 10-02基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- 10-02Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- 10-02AWD-LSTM语言模型是如何实现的_lstm语言模型
- 10-02NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 10-02使用ONNX和Torchscript加快推理速度的测试
- 10-02tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- 10-02Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- 10-02Gateway_gateways
- 最近发表
-
- 基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- AWD-LSTM语言模型是如何实现的_lstm语言模型
- NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 使用ONNX和Torchscript加快推理速度的测试
- tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- Gateway_gateways
- Coze开源本地部署教程_开源canopen
- 扣子开源本地部署教程 丨Coze智能体小白喂饭级指南
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)