精华内容
下载资源
问答
  • 第十四题: 以下代码的输出结果是?

    千次阅读 2019-11-14 15:54:27
    以下代码的输出结果是? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class B { public static B t1 = new B(); .....

    第十四题:

    以下代码的输出结果是?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    public class B

    {

        public static B t1 = new B();

        public static B t2 = new B();

        {

            System.out.println("构造块");

        }

        static

        {

            System.out.println("静态块");

        }

        public static void main(String[] args)

        {

            B t = new B();

        }

    }

     

    A 静态块 构造块 构造块 构造块
    B 构造块 静态块 构造块 构造块
    C 构造块 构造块 静态块 构造块
    D:构造块 构造块 构造块 静态块

    懵逼树上懵逼果,懵逼树下你和我

    首先看到这道题,我就想着那不是先静态代码块先执行吗

    话不多说,直接跑代码

    public class B
    
    {
    
        public static B t1 = new B();
    
        public static B t2 = new B();
    
        {
    
            System.out.println("构造块");
    
        }
    
        static
    
        {
    
            System.out.println("静态块");
    
        }
    
        public static void main(String[] args)
    
        {
    
            B t = new B();
    
        }
    
    }

    运行结果

    接着我们看看大家的评论


    开始时JVM加载B.class,对所有的静态成员进行声明,t1 t2被初始化为默认值,为null,又因为t1 t2需要被显式初始化,所以对t1进行显式初始化,初始化代码块→构造函数(没有就是调用默认的构造函数),咦!静态代码块咋不初始化?因为在开始时已经对static部分进行了初始化,虽然只对static变量进行了初始化,但在初始化t1时也不会再执行static块了,因为JVM认为这是第二次加载类B了,所以static会在t1初始化时被忽略掉,所以直接初始化非static部分,也就是构造块部分(输出''构造块'')接着构造函数(无输出)。接着对t2进行初始化过程同t1相同(输出'构造块'),此时就对所有的static变量都完成了初始化,接着就执行static块部分(输出'静态块'),接着执行,main方法,同样也,new了对象,调用构造函数输出('构造块')

    最后答案选择C

    文章仅个人理解,来在各大网站。如有不合理之处,欢迎吐槽。

    阅读目录(置顶)(长期更新计算机领域知识)

    阅读目录(置顶)(长期更新计算机领域知识)

    阅读目录(置顶)(长期科技领域知识)

    歌谣带你看java面试题

    展开全文
  • 以下代码的输出结果是?

    千次阅读 2018-05-31 15:25:20
    不知道的话,看看我标出的执行顺序吧。 package com; class A{   //3  public A() {  a1();  }   public void a1() {  System.out.println("A-a1");  } }   public class B extends A{  int bb = 0;...
    class A {
    
    	public A() {
    		a1();
    	}
    
    	public void a1() {
    		System.out.println("A-a1");
    	}
    }
    
    public class Test extends A {
    
    	int bb = 0;
    
    	public Test() {
    		bb = 1000;
    	}
    
    	public void a1() {
    
    		System.out.println("bb is " + bb);
    
    		System.out.println("B-a1");
    
    	}
    
    	public static void main(String[] args) {
    		new Test();
    	}
    }
    

    知道他们的答案了吗?不知道的话,看看我标出的执行顺序吧。

    package com;
    class A{   
        //3
        public A()  {
            a1();
        } 
    
        public void a1()    {
            System.out.println("A-a1");
        }
    }
     
    
    public class B extends A{
        int bb = 0;    //2
    
        public B()   {
            //5
            bb = 1000;
        }
    
        //4
        public void a1()   {
            System.out.println("bb is " + bb);
            System.out.println("B-a1");
        }
        public static void main(String[] args)  {
            //1
            new B();    
    }}

    展开全文
  • V8是如何执行JavaScript代码

    千次阅读 2020-03-31 16:42:23
    文章目录V8是如何执行...2. 执行转换后的代码并输出执行结果;高级代码为什么需要先编译再执行?1. CPU只能识别机器代码2. CPU能直接识别汇编语言吗3. 计算机如何执行高级语言4. 编译器和解释器的优缺点编译器:解...


    V8是如何执行JavaScript代码的

    主要核心流程分为两步 – 编译执行
    1. 首先将 JavaScript代码 转换为 低级中间代码 或者 机器能够理解的机器代码 ;
    2. 执行转换后的代码并输出执行结果;

    高级代码为什么需要先编译再执行?

    1. CPU只能识别机器代码

    机器代码由 CPU 执行,可以把 CPU 看成是一个非常小的运算机器,我们可以通过 二进制的指令CPU 进行沟通;

    比如:给 CPU 发出 ‘1000100111011000’ 的二进制指令,这条指令的意思是将一个寄存器中的数据移到另一个寄存器中,当处理器执行到这条指令的时候,便会按照指令的意思去实现相关的操作。

    注意:CPU 只能识别二进制的指令,但是对开发者而言,二进制代码难以阅读和记忆,于是我们又将二进制指令集转换为人类可以识别和记忆的符号,这就是 汇编指令集

    2. CPU能直接识别汇编语言吗

    答案是:不能!
    如果使用了汇编语言编写了一个程序,那么就还需要一个汇编编译器,作用是将汇编代码编程成机器代码。

    并且编写汇编语言 工作量巨大,因为:
    1) 不同的CPU有不同的指令集,需要为每种架构的CPU编写特定的汇编语言;
    2) 编写汇编语言,我们需要了解和处理器架构相关的硬件知识;

    3. 计算机如何执行高级语言

    第一种:解释执行,需要先将输入的源代码通过 解析器 编译成中间代码 ,之后直接使用解释器解释执行中间代码,然后直接输出结果;

    第二种:编译执行,采用这种方式也需要先将源代码转换为中间代码 ,然后我们的编译器再将中间代码编译成机器代码。通常编译成的机器代码是以二进制文件形式存储的,需要执行这段程序的时候直接执行二进制文件就可以了。

    注意:无论是使用解释器进行解释执行,还是使用编译器进行编译后执行,最终源代码都需要被转换为对应平台的 本地机器指令

    4. 编译器和解释器的优缺点
    编译器:
    • 优点:将源代码编译成可被CPU直接执行的机器指令,因为执行效率更高;
    • 缺点:跨平台支持不好,不同CPU有不同指令集,同一套源代码需要被编译成不同机器语言;
    解释器:
    • 优点:更容易跨平台,解释器自身会将源代码转换为当前平台所需的机器语言;
    • 缺点:执行效率低一些,因为每句源码都要经过解释器解释为可执行的机器语言;
    5. 即时编译器

    是一种平衡策略,平衡了编译执行和解释执行的优缺点,引入了 热点代码 机制

    执行过程:
    1、当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。
    2、在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地机器指令之后,可以获取更高的执行效率。
    3、当程序运行环境中内存资源限制较大,可以使用解释器执行节约内存,反之可以使用编译执行来提高效率。

    比如Java程序:最初是通过解释器 解释执行 ,当Java虚拟机发现某个方法或者代码块运行特别频繁的时候,会标记其为 热点代码(Hot Spot Code)。JIT即时编译器会将这些热点代码编译成与本地机器相关的机器指令,进行各个层次的优化。


    V8执行JS代码的具体流程

    V8是如何执行JS代码的

    1. 执行之前,准备所需的基础环境

    在 V8 启动执行 JavaScript 之前,它还需要准备执行 JavaScript 时所需要的一些基础环境,这些基础环境包括了 堆空间栈空间全局执行上下文全局作用域消息循环系统内置函数 等,这些内容都是在执行 JavaScript 过程中需要使用到的。

    比如:

    • JavaScript 全局执行上下文就包含了执行过程中的全局信息,比如一些内置函数,全局变量等信息;
    • 全局作用域包含了一些全局变量,在执行过程中的数据都需要存放在 内存 中;
    • 由于 V8 采用了经典的堆和栈的管理内存管理模式,所以 V8 还需要初始化了内存中的堆和栈结构;
    • 另外,要我们的 V8 系统活起来,还需要 初始化消息循环系统 ,消息循环系统包含了 消息驱动器消息队列 ,它如同 V8 的心脏,不断接受消息并决策如何处理消息。
    2. 准备好基础环境,向V8提交要执行的JS代码

    首先,V8 会接收到要执行的 JavaScript 源代码,不过这对 V8 来说只是一堆 字符串,V8 并不能直接理解这段字符串的含义,它需要 结构化 这段字符串;

    3. 结构化字符串(JS源代码)

    结构化,是指信息经过分析后可 分解成多个互相关联的组成部分。各组成部分间有明确的层次结构,方便使用和维护,并有一定的操作规范;

    4. 生成AST、作用域

    结构化之后,就生成了 抽象语法树(AST),AST 是便于 V8 理解的结构;在生成 AST 的同时,V8 还会 生成相关的作用域,作用域中存放相关变量

    5. 生成字节码

    有了 AST 和 作用域 之后,接下来就可以生成 字节码 了,字节码是介于 AST 和 机器代码 的中间代码。但是与特定类型的机器代码无关,解释器可以直接解释执行字节码 ,或者通过编译器将其编译为二进制的机器代码再执行;

    6. 解释器解释执行字节码

    生成字节码之后,解释器就登场了,它会 按照顺序 解释执行字节码,并输出执行结果;

    注意:关于热点代码
    在解释执行字节码的过程中,如果发现了某一段代码会被重复多次执行,那么监控器会将这段代码标记为 热点代码。当某段代码被标记为热点代码后,V8 就会将这段字节码丢给 优化编译器优化编译器会在后台将字节码编译成二进制代码,然后再对编译后的二进制代码执行优化操作,优化后的二进制机器代码的执行效率会得到大幅提升。如果下面再执行到这段代码时,那么 V8 会优先选择优化之后的二进制代码,这样代码的执行速度就会大幅提升。

    不过,和静态语言不同的是,JavaScript 是一种非常灵活的动态语言,对象的结构和属性是可以在运行时任意修改的,而经过优化编译器 优化过的代码只能针对某种固定的结构,一旦在执行过程中,对象的结构被动态修改了,那么优化之后的代码势必会变成无效的代码,这时候优化编译器就需要执行 反优化操作,经过反优化的代码,下次执行时就会回退到解释器解释执行。

    以上


    Programming is an art form.
    展开全文
  • PHP中,在客户端发出请求触发脚本执行,然后在服务器端执行一段代码,页面关闭了也要继续执行,并且要先返回一些状态给客户端,避免前端等待超时。 /**************** 1 返回给前端结果之前的操作 ***************...

    PHP中,在客户端发出请求触发脚本执行,然后在服务器端执行一段代码,页面关闭了也要继续执行,并且要先返回一些状态给客户端,避免前端等待超时。

    /**************** 1 返回给前端结果之前的操作 ****************/
    /**************** 2 告诉前端结果,告诉浏览器操作成功,但继续运行php ****************/
    ob_end_clean();
    ob_start();    
    //Windows服务器需要加上这行。
    echo str_repeat(" ",4096);//windows
    // echo str_repeat(' ', 65536); //linux
    //-----------------------------------------------------------------------------------
    _ajaxReturntwo(200,'操作成功');//返回结果给ajax
    //-----------------------------------------------------------------------------------
    $size = ob_get_length();
    
    header("Content-Length: ".$size);
    header("Connection: close");
    header("HTTP/1.1 200 OK");
    header('Content-Type:application/json; charset=utf-8');
    ob_end_flush();
    if(ob_get_length())
    ob_flush();
    flush();
    if (function_exists("fastcgi_finish_request")) { // yii或yaf默认不会立即输出,加上此句即可(前提是用的fpm)
        fastcgi_finish_request(); // 响应完成, 立即返回到前端,关闭连接
    }
    
    ignore_user_abort(true);//在关闭连接后,继续运行php脚本
    set_time_limit(0); //no time limit,不设置超时时间(根据实际情况使用)
    /**************** 2 告诉前端结果,告诉浏览器完成,但继续运行php ****************/
    /**************** 3 继续运行php ****************/
    sleep(20);
    /*
      休眠PHP,也就是当前PHP代码的执行停止,20秒钟后PHP被唤醒,
      PHP唤醒后,继续执行下面的代码,但这个时候上面代码的结果已经输出浏览器了,
      也就是浏览器从HTTP头中知道了服务端关闭了连接,浏览器将不在等待服务器的响应,
      反应给客户的就是页面不会显示处于加载状态,换句话说用户可以关掉当前页面,或者关掉浏览器,
      PHP唤醒后继续执行下面的代码,这也就实现了PHP后台执行的效果,
      休眠的作用只是让php先把前面的输出作完,不要急于马上执行下面的代码,休息一下而已,也就是说下面的代码
      执行的时候前面的输出应该到达浏览器了
    */
    .......继续写功能的逻辑
    
    
    
    
    
    function _ajaxReturntwo($code, $msg, $data=array())
    {
        $data = is_null($data) ? array() : $data;
        $data = array(
            "code" => $code,
            "msg" => $msg,
            "data" => json_encode($data)
        );
        header('Cache-Control:no-cache,must-revalidate');
        header('Pragma:no-cache');
        header('Content-Type:application/json; charset=utf-8');
        header("Access-Control-Allow-Origin: *");
        header("Access-Control-Allow-Headers:x-requested-with,content-type");
        echo json_encode($data);
    }

     

    展开全文
  • java选择题——代码运行

    千次阅读 2019-06-17 21:44:00
    1. 以下代码运行输出是() public class Person{ private String name = "Person"'; int age = 0; } public class Child extends Person{ public S...
  • 一行注释也能影响代码运行?别不信!

    千次阅读 多人点赞 2020-04-12 08:37:49
    没想到吧,一行注释也能影响运行结果 也许你在某个段子里听说过,某行注释删掉后,程序竟然不能预期执行?真的会这样么?你还别不信。 见证“奇迹” 1//来源:公众号【编程珠玑】 2//作者:守望先生 3#...
  • Java代码执行shell命令

    千次阅读 2019-09-24 21:21:11
    Java代码执行shell命令 本文描述两种方式使用java代码执行shell命令,首先使用Runtime类调用exce方法,其次使用ProcessBuilder实例实现更灵活的方式。 1. 环境准备 执行shell命令之前,我们需要获取jvm底层操作系统...
  • 函数和代码复用

    万次阅读 多人点赞 2019-06-06 16:31:41
    29、下面代码运行结果是 def fib(n): a,b = 1,1 for i in range(n-1): a,b = b,a+b return a print(fib(7)) A.5 B.8 C.13 D.21 答案:C 答案解析:注意a,b = b,a+b并不等价于a=b b=a+b 30、下面代码运行结果是 ...
  • 最近在处理一个 `Python` 局部变量的作用域问题时发现有些奇怪,想起了之前常写的 `Lua` 脚本,于是想写个函数测试一下,结果发现短短的十几行代码出现了多个错误,这可是我写了近三年的代码啊,才放下半年就记不清...
  • 对于很多初学者而言,会想当然地认为 “finally 代码块一定会被执行”,因此我们可以看下面这个案例: public class Demo { public static void main(String[] args) { try { BufferedReader br = new ...
  • 现在页面用ajax的越来越多, 好多代码是通过js执行结果显示在页面的, 所以在scrapy抓取过程中就需要通过一个中间件来执行这个js代码,  这个可以通过scrapy webkit来完成. 安装scrapy: sudo apt-get install ...
  • Android Java代码执行adb Shell命令

    万次阅读 2015-01-19 14:07:54
    Android Java代码执行adb Shell命令 通过java代码代替adb命令 增加工具类 ShellUtils.java import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io....
  • tensorflow代码运行的最后抛出异常:问题: Exception ignored in: <bound method BaseSession.__del__ of <tensorflow.python.client.session.Session object at 0x7f15b0500400>> ...
  • 用java代码执行linux命令(shell脚本)

    千次阅读 2020-04-27 09:14:25
    在windows下面编写java代码,然后打包放到Linux下面运行,并且执行某个脚本。 Runtime.getRuntime().exec("xxx.sh").waitFor(); 通过RunTime.getRuntime().exec()调用服务器命令脚本来执行。 用法: // 在单独的...
  • 三种可能不执行finally代码块的情况 - 在try代码块之外产生异常或者返回下是不会执行finally代码块的 - 执行try代码块时候退出了JVM虚拟机 - 在子线程执行try代码块或者catch代码块时候突然关闭了线程,也可能不...
  • Android WebView远程代码执行漏洞简析

    千次阅读 2016-02-16 20:17:39
    0x00 本文参考Android WebView 远程代码执行漏洞简析。代码地址为,https://github.com/jltxgcy/AppVulnerability/tree/master/WebViewFileDemo。下面我们分析代码。 0x01 首先列出项目工程目录: MainActivity....
  • VBA-加快你的代码运行速度--转自ExcelHome

    千次阅读 多人点赞 2020-05-14 14:42:32
    主题:VBA-加快你的代码运行速度 我们知道,用VBA实现同一个效果可能有多种不同的方法,写出一个最有效率的代码是大家都追求的,但是假如我水平有限,经验不足,实践不多,或者逻辑线路的设计不够简洁清爽,是不是就无法...
  • jsp页面中的代码执行加载顺序

    千次阅读 2018-09-13 10:29:37
    一.jsp页面中的代码执行加载顺序介绍 1. java是在服务器端运行的代码,jsp在服务器的servlet里运行,而javascript和html都是在浏览器端运行的代码。所以加载执行顺序是是java>jsp>js。 2. js在jsp...
  • 浅谈 JS 里 一句代码是怎么运行的及其编译原理

    千次阅读 多人点赞 2021-04-16 04:09:18
    可能有很多小伙伴在JS代码运行中只知道一些基本的,像代码是逐行运行的、分为编译阶段和执行阶段。当问到代码是怎么运行的 和 JS代码运行的编译原理时,有的小伙伴就可能理解不是很全面了。这也是很多大厂里面试所会...
  • 什么是整洁的代码

    千次阅读 多人点赞 2019-09-18 12:17:34
    作者 | xybaby来源 | https://www.cnblogs.com/xybaby/p/11335829.html写出整洁的代码,是每个程序员的追求。《clea...
  • 代码整洁 vs 代码肮脏

    万次阅读 多人点赞 2019-09-16 12:05:12
    写出整洁的代码,是每个程序员的追求。《clean code》指出,要想写出好的代码,首先得知道什么是肮脏代码、什么是整洁代码;然后通过大量的刻意练习,才能真正写出整洁的代码。 WTF/min是衡量代码质量的唯一标准,...
  • SurfaceView 之满屏的代码雨效果

    千次阅读 2019-02-17 13:52:41
    博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载。... 在开始制作代码雨效果之前呢,先来看看 Android 提供的另一种 View,它是 View 的孪生兄弟:SurfaceView 那它 与 View 有什...
  • 代码执行演示嵌在你的PPT中

    万次阅读 2017-09-07 09:43:11
    “Talk is cheap, show me your code!” 当一个程序员在做技术分享的时候, 代码演示经常是不可或缺的一个环节。然而在你的演示PPT和代码运行之间切换是一件非常恼人事情,而且非常影响演示的节奏和流畅性。要做一个...
  • 这里只给出SSD物体检测源代码代码基于谷歌开源的Object Detection Api,可以直接运行。 import numpy as np import os import six.moves.urllib as urllib import sys import tarfile import tensorflow as tf ...
  • //执行windows 下 ejtag命令 final Process p = Runtime.getRuntime().exec("D:\\loongson\\OtherTools\\ejtag-debug-cygwin\\ejtag_debug_usb.exe -e 'source D:/ejtag-debug-cygwin/configs/config.ls1...
  • vscode编译运行C代码

    千次阅读 2019-08-31 16:42:37
    文章目录代码准备工作launch.jsontask.json 代码准备工作 1、新建目录     vscode是不能直接新建工程的,需要先新建目录,存放代码 2、打开vscode,File --> Open Folder… --> 选择上面新建的test_...
  • “同步”是一种线性执行的方式,执行的流程不能跨越,其后的线程要阻塞等待前面线程的运行;同步可以保证顺序一致,但是容易导致阻塞,即同步是阻塞模式。 “同步”一般用于流程性比较强的程序,比如用户登录功能...
  • jupyter notebook运行R语言代码

    千次阅读 2020-04-14 23:47:29
    目录0引言1、度娘方案汇集2、报错信息汇总3、最终解决4、代码调试5、总结 0引言 我是一直以来是使用R语言来建模处理数据。python也只是入门,大大小小的模型都没做过。用的编译器是R语言基础的编译器、Rstudio和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,104,935
精华内容 441,974
关键字:

下面代码的执行结果是is