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. 破损的键盘 (Broken Keyboard)--又名悲剧文本(线性表)

     题目: 你有一个破损的键盘.键盘上的所有键都可以正常工作,但有时Home键或者End键会自 动按下.你并不知道键盘存在这一问题,而是专心地打稿子,甚至连显示器都没打开.当你 打开显示器之后, 展现在 ...

  2. grep -iq 与grep -qi 意思

    就是有的时候你不需要直接打印出结果,比如在shell脚本中,你只需要知道grep有没有找到指定的字符串,而不需要满屏幕打印出来,因为那样会很难看.这只可以加-q选项,执行结果是:如果找到了,会返回0, ...

  3. Python 解决命令行删除、退格乱码问题

    安装了python 在命令行界面无法进行删除.退格 1 安装readline模块 两种方式:yum install -y readline-devel  readline 或者 下载文件https:/ ...

  4. LAB8 android

    妈的,标签名字能改成自己的名字,我也是个神人嘞. 明明是去掉两个括号,怎么变成3个了,醉了. 点组件,attribute,可以修改对应的值.非常直观?. content_mail.XML要设置ID才能 ...

  5. linux下查看动态链接库so文件的依赖的相关组建

    我们很多c程序在windows下是以dll形式展现的,在linux则是以so 形式展现的. windows一般不会因为编译dll文件的编译器版本不同而出先dll文件不能执行. 但是linux下,不同版 ...

  6. yum 安装时遇到“UnicodeDecodeError: 'ascii' codec”的问题

    今天新安装了一个6.9系统,配置好本地yum源后,用yum安装时报了以上的错误信息,在/etc/yum.repos.d/目录下多出了TTT的一个目录 (手动问号),在百度上查了一些文档. 解决方法:1 ...

  7. Spring的xml配置文件中约束的必要性 找不到元素 'beans' 的声明

    今天在复习Spring MVC框架的时候,只知道xml配置文件中的约束有规范书写格式的作用,所以在配置HandlerMapping对象信息的时候没有加入约束信息之后进行测试,没有遇到问题.后来在配置S ...

  8. 后台跨域(CORS)

    解决跨域问题 一.为什么会有跨域问题? 是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,像是一般的href属性,a标签什么的都不拦截. 二.解决跨域问题的两种方式 JS ...

  9. 201771010134杨其菊《面向对象程序设计(java)》第十三周学习总结

    第十三周学习总结 第一部分:理论知识 第11章 事件处理(事件处理基础; 动作; 鼠标事件;AWT事件继承层次) 1. 事件源(event source):能够产生事件的对象都可 以成为事件源,如文本 ...

  10. 不在sudoer里解决办法 和 RHEL 挂载NTFS硬盘

    输入su 切换到root用户 打开/etc/sudoers sudo vim sudoers 在root    ALL=(ALL:ALL) ALL 下边比着写一个自己的用户名就可以了 下载 可以到ht ...