1.下面中哪两个可以在A的子类中使用:( )
class A {
protected int method1 (int a, int b) {
return 0;
}
}
A. public int method 1 (int a, int b) { return 0; }
B. private int method1 (int a, int b) { return 0; }
C. private int method1 (int a, long b) { return 0; }
D. public short method1 (int a, int b) { return 0; }
解答:AC
主要考查子类重写父类的方法的原则
B,子类重写父类的方法,访问权限不能降低
C,属于重载
D,子类重写父类的方法 返回值类型要相同或是父类方法返
2.Abstract method cannot be static. True or False ?
A True
B False
解答:A
抽象方法可以在子类中被重写,但是静态方法不能在子类中被重写,静态方法和静态属性与对象是无关的,只与类有关,这与abstract是矛盾的,所以abstract是不能被修饰为static,否则就失去了abstract的意义了
最近面试被问到 然后我有点尴尬的题目,如下:
进程间的通信:
1、同步:多个线程通过synchronized关键字来实现线程间通信,即共享内
存间的通信,多个线程需访问共享内存变量,谁拿到锁,谁就先执行。
2、while轮询的方式
线程A不断地改变条件,线程ThreadB不停地通过while语句检测这个条件(list.size()==5)是否成立
从而实现了线程间的通信。但是这种方式会浪费CPU资源。之所以说它浪费资源,
是因为JVM调度器将CPU交给线程B执行时,它没做啥“有用”的工作,只是在不断地测试 某个条件是否成立。
而且很容易造成死循环,以为线程B的判断条件修改了的话,线程A也感受不到。
3、wait/notify机制
当条件未满足时(list.size() !=5),线程A调用wait() 放弃CPU,并进入阻塞
状态。---不像②while轮询那样占用CPU
当条件满足时,线程B调用 notify()通知 线程A,
所谓通知线程A,就是唤醒线程A,并让它进入可运行状态。
这种方式的一个好处就是CPU的利用率提高了。
4、管道
进程间的通信
(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,
允许一个进程和另一个与它有共同祖先的进程之间进行通信。
(2)命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,
它还允许无亲缘关 系 进程间的通信。命名管道在文件系统中有对应的文件名。
命名管道通过命令mkfifo或系统调用mkfifo来创建。
(3)信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,
除了用于进程间通信外,进程还可以发送 信号给进程本身;linux除了支持
Unix早期信号语义函数sigal外,
还支持语义符合Posix.1标准的信号函数sigaction
(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,
又能够统一对外接口,用sigaction函数重新实现了signal函数)。
(4)消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。
有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读
走队列中的消息。消息队列克服了信号承载信息量少,
管道只能承载无格式字节流以及缓冲区大小受限等缺
(5)共享内存:使得多个进程可以访问同一块内存空间,
是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。
往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
(6)内存映射(mapped memory):内存映射允许任何多个进程间通信,
每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。
(7)信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
(8)套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。
起初是由Unix系统的BSD分支开发出来的,
但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。
堆和栈:
基本类型的变量和对象的引用变量都是在函数的栈内存中分配,
当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空
间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间.
堆内存用于存放由new创建的对象和数组。
数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,
但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。
这个也是java比较占内存的主要原因
linux常用的操作:
比如说我们现在来显示当前目录(ls 显示文件及目录或ll),然后我们创建目录名叫aa (mkdir -p aa),
这个时候我们想切换到文件目录进去(cd aa),从别处拷贝上传的web项目
过来(拷贝cp 移动 mv 删除 rm),
打包或者解压(tar -zcvf /home/abc.tar.gz /home/abc 打包 ,解压把 c换成x)
vi操作有三种操作状态:命令模式,输入i进入插入模式,按shitf+;进入底线命令模式。
常用的快捷键有x,删除光标后一个字符,dd删除光标所在行,yy复制光标所在行。
搜索
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
mysql和oracle分页
(1)MySql的Limit m,n语句
Limit后的两个参数中,参数m是起始下标,它从0开始;
参数n是返回的记录数。我们需要分页的话指定这两个值即可
(2)Oracle数据库的rownum 伪列
在Oracle数据库中,分页方式没有MySql这样简单,它需要依靠rownum来实现.
Rownum表示一条记录的行号,值得注意的是它在获取每一行后才赋予.
因此,想指定rownum的区间来取得分页数据在一层查询语句中
是无法做到的,要分页还要进行一次查询.
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM TABLE_NAMEA
WHERE ROWNUM <= 40
)
WHERE RN >= 21
- Java中sleep和wait的区别
① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。
② 锁: 最主要是sleep方法没有释放锁,而wait方法释放了锁,
使得其他线程可以使用同步控制块或者方法。
sleep不出让系统资源;wait是进入线程等待池等待,
出让系统资源,其他线程可以占用CPU。
Sleep()可以通过设置时间如,Thread.sleep(1000)。
线程沉睡一秒后,线程将重新处于准备状态。
而wait()是指线程在请求某已经被暂用的资源不得将一直处于暂停状态,
直到其他线程使用notify将其唤醒。
post和get的区别:
GET,POST,PUT,DELETE分别为:查、改、增、删。
get一般用以获取/查询 信息,post一般用以 更新资源信息。
get请求的数据会附在URL之后,以?和分割符相连。而post是把提交的数据放置在HTTP的包体中。
get提交的数据量是很小的,取决于URL的长度限制,而post是没有大小限制的,post传递的数据比较大。
post比get的安全性要高,比如一个登陆页面,通过 Get 方式提交数据时,
用户名和密码将出现在 URL 上,
如果页面可以被缓存或者其他人可以访问客户这台机器,就可以从历史记
录获得该用户的帐号和密码,所以表单提交建议使用 Post 方法;
网友评论