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的更多相关文章
随机推荐
-
(转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html)WebWork深入浅出
(转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html) WebWork深入浅出 本文发表于<开源大本营> 作者:钱安 ...
-
伏羲八卦、文王六十四卦、老子阴阳太极、西方哲学辩证与";解耦和复用”思想的异曲同工之妙
伏羲八卦.文王六十四卦.老子阴阳太极.西方哲学辩证与"解耦和复用”思想的异曲同工之妙 问题:任何程序语言在遇到复杂逻辑时,代码维护难度就会加大,如何处理该问题? 答案:重构,模块化. ...
-
Magento导出订单同时导出产品信息
Magento导出订单同时导出产品信息,根据业务扩展,Magento自身的功能也越来越满足不了我们的需求了.今天Hicoogle根据需求改善批量导出订单的同时,也要带上该订单的产品信息.花了一点时间, ...
-
Microsoft Script Editor
目前,常用的浏览器IE.Chrome.Firefox都有相应的脚本调试功能.作为我们.NET 阵营,学会如何在IE中调试JS就足够了,在掌握了IE中的调试方法以后,Chrome和Firefox中的调试 ...
-
网络信息安全攻防学习平台 上传,解密通关writeup
上传关 [1]查看源代码,发现JS代码.提交时onclick进行过验证.ctrl+shift+i 打开开发者工具,将conclick修改为 return True,即可以上传上传php文件,拿到KEY ...
-
Vue组件开发
在学习vue的时候,发现有很多使用vue开发的ui组件.本着学习的目的,自己也仿照Element写一些组件. 使用VuePress编写组件文档. 单元测试:karma+mocha+chai+sinon ...
-
谁考了第k名
题目描述: 在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩. 输入: 第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k ...
-
Android教材 | 第三章 Android界面事件处理(一)—— 杰瑞教育原创教材试读
前 言 JRedu Android应用开发中,除了界面编程外,另一个重要的内容就是组件的事件处理.在Android系统中,存在多种界面事件,比如触摸事件.按键事件.点击事件等.在用户交互过程中, ...
-
DevExpress Add ASPxGridView template columns at runtime
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %> <%@ Import Namespace ...
-
MyEclipse10.6 myeclipse2013下添加jadClipse反编译插件 .
jad是一个使用比较广泛的Java反编译软件,jadClipse是jad在eclipse下的插件,下面像大家介绍下如何将jadclipse加入到MyEclipse10.X,9.X,8.X,6.X等各版 ...