状态变量

[转帖]Java面试通关要点汇总集

青春壹個敷衍的年華 提交于 2020-01-22 16:33:50
Java面试通关要点汇总集 https://www.zybuluo.com/Yano/note/1102942 基本功 面向对象的特征 final, finally, finalize 的区别 int 和 Integer 有什么区别 重载和重写的区别 抽象类和接口有什么区别 说说反射的用途及实现 说说自定义注解的场景及实现 HTTP 请求的 GET 与 POST 方式的区别 session 与 cookie 区别 session 分布式处理 JDBC 流程 MVC 设计思想 equals 与 == 的区别 面向对象的特征 抽象:数据抽象、逻辑抽象 封装:把过程和数据包围起来 继承:鼓励类的重用 多态:允许将子类类型赋值给父类类型的引用,将类型泛化 final, finally, finalize 的区别 final: - 变量:不可修改 - 对象:引用不可修改 - 方法:不可被重写 - 类:不可被继承 finally:异常处理的关键字,无论是否抛出异常,finally 块都会被执行 finalize:finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。 protected void finalize () throws Throwable { } 大致描述一下finalize流程:当对象变成(GC

Spring Bean单例与线程安全

那年仲夏 提交于 2020-01-21 20:28:03
一、Spring单例模式及线程安全   Spring框架中的Bean,或者说组件,获取实例的时候都是默认单例模式,这是在多线程开发的时候需要尤其注意的地方。   单例模式的意思是只有一个实例,例如在Spring容器中某一个类只有一个实例,而且自行实例化后并项整个系统提供这个实例,这个类称为单例类。   当多个用户同时请求一个服务时,容器会给每一个请求分配一个线程,这时多个线程会并发执行该请求对应的业务逻辑(成员方法),此时就要注意了,如果该处理逻辑中有对单例状态的修改(体现为该单例的成员属性),则必须考虑线程同步问题。 同步机制的比较:   ThreadLocal和线程同步机制相比有什么优势呢?他们都是为了解决多线程中相同变量的访问冲突问题。   在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。这时该变量是多个线程共享的,使用同步机制要求程序慎密地分析什么时候对变量进行读写,什么时候需要锁定某个对象,什么时候释放对象锁等繁杂的问题,程序设计和编写难度相对较大。   而ThreadLocal则从另一个角度来解决多线程的并发访问。ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时

simulink之S函数

此生再无相见时 提交于 2020-01-21 01:02:51
s函数是system Function的简称,用它来写自己的simulink模块。(够简单吧,^_^,详细的概念介绍大伙看帮助吧)可以用matlab、C、C++、Fortran、Ada等语言来写,这儿我只介绍怎样用matlab语言来写吧(主要是它比较简单) 先讲讲为什么要用s函数,我觉得用s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API等的 先介绍一下simulink的仿真过程(以便理解s函数),simulink的仿真有两个阶段:一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行,直至结束。 在matlab的workspace里打edit sfuntmpl(这是matlab自己提供的s函数模板),我们看它来具体分析s函数的结构。 它的第一行是这样的:function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag) 先讲输入与输出变量的含义:t是采样时间,x是状态变量,u是输入(是做成simulink模块的输入),flag是仿真过程中的状态标志(以它来判断当前是初始化还是运行等)

jvm gc 线程

非 Y 不嫁゛ 提交于 2020-01-20 20:48:06
java虚拟机运行时数据区 方法区 ​ 属于共享内存区域,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 java虚拟机: ​ 线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储 局部变量表 、 操作数栈 、 动态链接 、 方法出口 等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。 StackOverflowError:线程请求的栈深度大于虚拟机所允许的深度。 OutOfMemoryError:如果虚拟机栈可以动态扩展,而扩展时无法申请到足够的内存。 本地方法栈 ​ 区别于 Java 虚拟机栈的是,Java 虚拟机栈为虚拟机执行 Java 方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。也会有 StackOverflowError 和 OutOfMemoryError 异常。 java堆 ​ 对于绝大多数应用来说,这块区域是 JVM 所管理的内存中最大的一块。线程共享,主要是存放对象实例和数组。内部会划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer, TLAB)。可以位于物理上不连续的空间,但是逻辑上要连续。 程序计数器 内存空间小,线程私有

转 Java 208道面试题及部分答案 补充部分答案

元气小坏坏 提交于 2020-01-20 08:41:26
转自 https://www.cnblogs.com/chen1005/p/10481102.html ---恢复内容开始--- 一、Java 基础 1.JDK 和 JRE 有什么区别? 答:JRE是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。   JDK是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的 2.== 和 equals 的区别是什么? 答:==是比较两个对象的地址,equals是比较连个对象的内容 3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 答:不对!hashCode()相同,不代表连个对象就相同。hashCode值是从hash表中得来的,hash是一个函数,该函数的实现是一种算法,通过hash算法算出hash值,hash表就是 hash值组成的,一共有8个位置。   相反,equals()相同,hashCode()一定相同。这个是正确的! 4.final 在 java 中有什么作用? 答: final的作用随着所修饰的类型而不同: final修饰类中的属性或者变量:无论属性是基本类型还是引用类型, final所起的作用都是变量里面存放的“值”不能变

Shader预处理宏、内置状态变量、多版本编译等

你。 提交于 2020-01-18 01:05:33
预定义shader预处理宏:   Target platform:   SHADER_API_OPENGL - desktop OpenGL   SHADER_API_D3D9 - Direct3D 9   SHADER_API_XBOX360 - Xbox 360   SHADER_API_PS3 - PlayStation 3   SHADER_API_D3D11 - desktop Direct3D 11   SHADER_API_GLES - OpenGL ES 2.0 (desktop or mobile), use presence of SHADER_API_MOBILE to determine.   SHADER_API_FLASH - Flash Stage3D   SHADER_API_D3D11_9X - Direct3D 11 target for Windows RT   Surface shader pass indicators:   UNITY_PASS_FORWARDBASE - 前向渲染的base pass(主方向光、lightmaps、SH)   UNITY_PASS_FORWARDADD - 前向渲染的add pass(没盏灯一个pass)   UNITY_PASS_PREPASSBASE - 延迟渲染base pass(renders

Linux多线程与同步

萝らか妹 提交于 2020-01-17 01:53:26
典型的UNIX系统都支持一个进程创建多个线程(thread)。在 Linux进程基础 中提到,Linux以进程为单位组织操作,Linux中的线程也都基于进程。尽管实现方式有异于其它的UNIX系统,但Linux的多线程在逻辑和使用上与真正的多线程并没有差别。 1. 多进程 我们先来看一下什么是多线程。在 Linux从程序到进程 中,我们看到了一个程序在内存中的表示。这个程序的整个运行过程中,只有 一个控制权 的存在。当函数被调用的时候,该函数获得控制权,成为 激活 (active)函数,然后运行该函数中的指令。与此同时,其它的函数处于离场状态,并不运行。如下图所示: Linux从程序到进程 我们看到,各个方块之间由箭头连接。各个函数就像是连在一根线上一样,计算机像一条流水线一样执行各个函数中定义的操作。这样的一个程序叫做 单线程 程序。 多线程就是允许一个进程内存在 多个控制权 ,以便让多个函数同时处于激活状态,从而让多个函数的操作同时运行。即使是单CPU的计算机,也可以通过 不停地在不同线程的指令间切换 ,从而造成多线程同时运行的效果。如下图所示,就是一个多线程的流程: main()到func3()再到main()构成一个线程,此外func1()和func2()构成另外两个线程。操作系统一般都有一些系统调用来让你将一个函数运行成为一个新的线程。 回忆我们在 Linux从程序到进程

Linux多线程与同步

爱⌒轻易说出口 提交于 2020-01-16 03:50:34
典型的UNIX系统都支持一个进程创建多个线程(thread)。在 Linux进程基础 中提到,Linux以进程为单位组织操作,Linux中的线程也都基于进程。尽管实现方式有异于其它的UNIX系统,但Linux的多线程在逻辑和使用上与真正的多线程并没有差别。 1. 多进程 我们先来看一下什么是多线程。在 Linux从程序到进程 中,我们看到了一个程序在内存中的表示。这个程序的整个运行过程中,只有 一个控制权 的存在。当函数被调用的时候,该函数获得控制权,成为 激活 (active)函数,然后运行该函数中的指令。与此同时,其它的函数处于离场状态,并不运行。如下图所示: Linux从程序到进程 我们看到,各个方块之间由箭头连接。各个函数就像是连在一根线上一样,计算机像一条流水线一样执行各个函数中定义的操作。这样的一个程序叫做 单线程 程序。 多线程就是允许一个进程内存在 多个控制权 ,以便让多个函数同时处于激活状态,从而让多个函数的操作同时运行。即使是单CPU的计算机,也可以通过 不停地在不同线程的指令间切换 ,从而造成多线程同时运行的效果。如下图所示,就是一个多线程的流程: main()到func3()再到main()构成一个线程,此外func1()和func2()构成另外两个线程。操作系统一般都有一些系统调用来让你将一个函数运行成为一个新的线程。 回忆我们在 Linux从程序到进程

ABAP 常用函数、系统变量

你离开我真会死。 提交于 2020-01-16 00:56:32
常用的系统变量如下: 1. SY-PAGNO当前页号 2. SY-DATUM当前时间 3. SY-LINSZ当前报表宽度 4. SY-LINCT当前报表长度 5. SPACE空字符 6. SY-SUBRC执行状态为0,表示成功. 使用SELECT语句选择查询: SY-SUBRC = 0: 至少有一行数据,当ENDSELECT语句执行完,SY-DBCNT中保存着记录的个数。 SY-SUBRC = 4: 没有数据。 SY-SUBRC = 8: 只有使用“SELECT SINGLE FOR UPDATE”时才会有, 表示: WHERE条件指定的记录不止一行,结果是没有记录被选中。 使用INSERT语句,向表中插入一行,必须注意INSERT的顺序与表中字段的顺序一致: SY-SUBRC = 0: 插入成功,SY-DBCNT包含了插入的行数,0或1。 SY-SUBRC = 4: 由于有相同的KEY存在,所以插入失败。 使用LOOP语句来遍历一个内表: SY-SUBRC = 0: 循环至少被执行一次。 SY-SUBRC = 4: 循环没有被执行,可能是没有数据,也可能是没有符合条件的记录。 使用DELETE语句来删除一条记录: SY-SUBRC = 0: 找到一行并删除之,如果该表有不唯一主键,也就是有多条重复的记录,则只删除第一条记录。 SY-SUBRC = 4: 没有找到符合条件的记录

Java多线程面试题整理

◇◆丶佛笑我妖孽 提交于 2020-01-15 09:38:38
1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点。 2) 线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。 3) 如何在Java中实现线程? 1)java.lang.Thread 类的实例就是一个线程但是它需要调用java.lang.Runnable接口来执行, 2)由于线程类本身就是调用的Runnable接口所以你可以继承java.lang.Thread 类或者直接调用Runnable接口来重写run()方法实现线程。 3). 实现Callable接口通过FutureTask包装器来创建Thread线程 Callable接口(也只有一个方法)定义如下: public interface Callable<V> { V call() throws Exception; } public class SomeCallable<V>