1、 java的基本数据类型,各占多少字节?

byte 8位

short 16位

int 32位

long 64位

float 32位

double 64位

boolean 1位

char 16位

2、 什么是继承、多态?怎么实现多态?

继承:子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。

多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

在Java中有两种形式可以实现多态:继承和接口。

基于继承的实现机制主要表现在父类和继承该父类的一个或多个子类对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为。

“一个接口,多个方法”展示了Java的动态多态性

3、 重写和重载

重写发生在父类和子类之间,子类重新定义父类方法,方法名、参数列表和返回类型都相同

重载是在同一个类里,方法名相同,参数不同。

4、 什么是堆、栈、队列?分别有什么特点?如何用两个栈实现队列?

堆是一个运行时数据区,通过new等指令创建,不需要程序代码显式释放

<1>优点:可动态分配内存大小,生存周期不必事先告诉编译器,Java垃圾回收自动回收不需要的数据;

<2>缺点:运行时需动态分配内存,数据存取速度较慢。

栈限制仅在表的一端进行插入和删除运算的线性表,先进后出FILO

<1>优点:存取速度比堆快,仅次于寄存器,栈数据可以共享;

<2>缺点:存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。

队列限制仅在表的一端(尾端)进行插入,另一端(首端)进行删除的线性表,先进先出FIFO

package mianshi;

import java.util.Stack;

public class StacksToQuene {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void add(int x){//进队
stack1.push(x);
}
public int deleteHead(){//出队
if(stack1.size()+stack2.size()==0){
System.out.println("队列为空");
return -1;
}
if(stack2.isEmpty()){//只有栈2为空时才把栈1转移到栈2
stack1ToStack2();
}
return stack2.pop();

}
public void stack1ToStack2(){
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
}
public static void main(String[] args){
StacksToQuene q = new StacksToQuene();
q.add(1);
q.add(2);
System.out.println(q.deleteHead());
q.add(5);
System.out.println(q.deleteHead());
}
}

5、 &和&&、==和equals

& 按位与

&& 逻辑与 当且仅当两个条件都满足时返回true

使用==比较原生类型如:boolean、int、char等等,使用equals()比较对象

对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址

equals用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同,返回值为布尔类型

boolean equals(Object o) { return this==o;}

6、 ArrayList和LinkedList、HashMap和HashTable

1)ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2)对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
3)对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

Vector和ArrayList几乎是完全相同的,唯一的区别在于Vector是同步类(synchronized).因此,开销就比ArrayList要大

HashMap不是线程安全的: HashMap是map接口的子类,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。

HashTable是线程安全的:Hashtable的方法是Synchronize的

7、 排序的几种方法,描述其思想

8、 多线程有几种实现方法?同步有几种实现方法?

实现多线程:继承Thread类;实现Runnable接口;

用synchronized关键字修饰同步方法

 同步的实现方法分别是synchronized,wait与notify

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

9、  常见的设计模式有什么?有什么作用?

10、TCP和UDP协议的区别?Http基于哪个?GET和POST请求有什么区别?

TCP面向连接的协议,通过三次握手建立可靠的连接

UDP是一个非连接的协议,传输数据之前源端和终端不建立连接

http基于TCP

GET用于信息获取,而且应该是安全的和幂等的。GET方式传输的参数安全性低,因为传输的数据会显示在请求的URL中。

POST表示可能修改变服务器上的资源的请求。POST方式传输的数据安全性较高,因为数据传输不是明显显示的。

11、使用递归实现数字n的阶乘

public class Test {

public static void main(String[] args) {

int n = 6;

System.out.println(jiecheng(n));

}

public static Double jiecheng (int i) {

Double result = 1.0;

for (int j = 1; j <= i; j ++) {

result *= j;

}

return result;

}

}

12、对有序数组进行二分查找,返回x的位置

public
class BinarySearch {

/**

* 二分查找算法

*

* @param srcArray 有序数组

* @param key 查找元素

* @return key的数组下标,没找到返回-1

*/

public static void main(String[] args)
{

int srcArray[] =
{3,5,11,17,21,23,28,30,32,50,64,78,81,95,101};

System.out.println(binSearch(srcArray, 0, srcArray.length - 1,
81));

}

// 二分查找递归实现

public static int binSearch(int
srcArray[], int start, int end, int key) {

int mid = (end - start) / 2 +
start;

if (srcArray[mid] == key) {

return mid;

}

if (start >= end) {

return -1;

} else if (key > srcArray[mid])
{

return binSearch(srcArray, mid
+ 1, end, key);

} else if (key < srcArray[mid])
{

return binSearch(srcArray,
start, mid - 1, key);

}

return -1;

}

// 二分查找普通循环实现

public static int binSearch(int
srcArray[], int key) {

int mid = srcArray.length / 2;

if (key == srcArray[mid]) {

return mid;

}

int start = 0;

int end = srcArray.length - 1;

while (start <= end) {

mid = (end - start) / 2 +
start;

if (key < srcArray[mid])
{

end = mid - 1;

} else if (key > srcArray[mid])
{

start = mid + 1;

} else {

return mid;

}

}

return -1;

}

}

java0618的更多相关文章

随机推荐

  1. Ionic2+WebApi 导出Excel转Pdf文件。

    步骤: 1.首先在WebApi中先把excel生成好. 2.把excel转成Pdf,并返回下载的链接. 3.Ionic2的页面做好下载的接口. 嗯~思路很清晰,那么下面就来详细的操作吧. 以下是H5的 ...

  2. innodb 关键特性(两次写与自适应哈希索引)

    两次写: 场景: 当发生数据库宕机时,可能innodb存储引擎正在写入某个页到表中,而这个页只写了一部分,这种情况被称为部分写失效,如果发生,可以通过重做日志进行恢复,重做日志中记录的是对页的物理操作 ...

  3. mysql学习5:数据库设计

    mysql学习5:数据库设计 本文转载:https://blog.51cto.com/9291927/2087925:原创为天山老妖S 一.数据库设计简介 按照规范设计,将数据库的设计过程分为六个阶段 ...

  4. 【转载】Linux系统下命令行连接蓝牙设备 查看查找 蓝牙

    Linux系统下命令行连接蓝牙设备 2018年11月26日 10:47:27 Zz笑对一切 阅读数:741   1.打开系统蓝牙 sudo service bluetooth start 1 进入bl ...

  5. 20164319 刘蕴哲 Exp3 免杀原理与实践

    [实验内容] 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程( ...

  6. 手工脱壳之AsPack压缩脱壳-随机基址

    一.工具及壳介绍二.脱壳1.ESP定律脱壳2.单步跟踪脱壳3.基址重定位的修复 一.工具及壳介绍 使用工具:Ollydbg.PEID.ImportREC.LoadPE.010 Editor 查看待脱壳 ...

  7. Redis master/slave,sentinel,Cluster简单总结

    现在互联网项目中大量使用了redis,本文著主要分析下redis 单点,master/slave,sentinel模式.cluster的一些特点. 一.单节点模式 单节点实例还是比较简单的,平时做个测 ...

  8. SQL CTE递归

    WITH cte_name AS ( --Anchor member is defined ' UNION ALL --Recursive member is defined referencing ...

  9. Swoole addProcess的使用

    addProcess函数 是添加一个用户自定义的工作进程.这个有什么用呢?服务在启动后,可以用于监控.上报或者其他特殊的任务. 注意这个添加的进程是被manager进程管理的.如果这个添加的用户进程经 ...

  10. CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念及 Chelsio T5 产品介绍 转载

    CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念及 Chelsio T5 产品介绍 2016年09月01日 13:56:30 疯子19911109 阅读数:4823 标签:  ...