1: 如何释放掉指定位置的内存空间?
释放掉内存是由GC来完成的,但是程序员无法强制执行其运行,该空间在不被引用的时候不一定会立即释放,会进行finalize标记,可达性分析等等,包括finalize是否重写,重写中是否有引用等等,这个取决于GC本身,无法通过程序员代码来解决。
2:文件数据如果想展示在控制台上,首先需要读入文件的信息数据流,然后解析,流入控制台。
3: CGI和Servlet的区别?
CGI:(公共网关接口)是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。
在传统的CGI中,每个请求都要启动一个新的进程,如果CGI程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。而在Servlet中,每个请求由一个轻量级的Java线程处理(而不是重量级的操作系统进程)。
在传统CGI中,如果有N个并发的对同一CGI程序的请求,则该CGI程序的代码在内存中重复装载了N次;而对于Servlet,处理请求的是N个线程,只需要一份Servlet类代码。在性能优化方面,Servlet也比CGI有着更多的选择。
等等。详情可参考本栈的Servlet和JSP
4:关于java的继承: 子类会继承父类的所有数据域和方法?
这个问题正确与否是有歧义的,而问题的来源也是对继承的理解,继承是所有,但能不能调用时另外一回事。可以通过反射来测试,加深对继承的理解。
代码参考本栈https://www.jianshu.com/p/07333fe871f3
5:成员变量有静态和非静态
[静态成员变量]是共享数据,在共享区中,也叫方法区中。非[静态成员变量]在[堆内存]中,作用于整个类中。而[局部变量]在栈内存中,定义在函数中,函数结束[内存释放]。
6:操作系统不是计算机组成的不可或缺的部分
没有操作系统,做嵌入式开发直接操作寄存器也是OK的。
7:关于注释
编译后class文件中是没有注释的,So写再多注释对系统运行都是无所谓的
8: 关于异常的编程
在有除法存在的代码处,抛不抛出异常均可,这句话对吗?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
9: error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
10: 转发和重定向的地址变化问题
重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。
11:父类的构造函数子类可以继承吗?
不能,因为子类继承父类的时候,先运行父类构造函数;具体的说就是运行父类时就会先“调用”父类的构造函数,注意“调用”和继承不是一个含义,实质上是“自动运行”。
继承(extends)的含义其实是“扩展”,子类完全没必要扩展父类的构造函数,因为反正每次调子类的时候都会“自动运行”它父类的构造函数,如果真的需要子类构造函数特殊的形式,子类直接修改或重载自己的构造函数就好了。
另外:一般来说super()方法是子类调用父类构造器的方法时会执行的,通常省略,super方法是默认执行的也就是隐式调用。如果父类有多个构造器,子类选择调用的时候就可以写出来,显式的调用哪一个构造器。比如父类有无参构造和有参构造子类调用时就可以用super选择调用;并且super要写在构造器的第一行。
12:关于继承时父类构造方法注意事项
父类中存在有参构造方法,无参构造方法需要显示声明,否则子类需要指定调用的父类构造,不然报错。
网友评论