java0618
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的更多相关文章
随机推荐
- k8s环境清理
每一种方法 #!/bin/shdocker rm -f $(docker ps -qa)docker volume rm $(docker volume ls -q)cleanupdirs=" ...
- 20175314 实验三 敏捷开发与XP实践
20175314 实验二 Java面向对象程序设计 一.实验内容 XP基础 XP核心实践 相关工具 二.实验步骤 (一)代码格式化 创建"175314.exp3"项目,在该项目下创 ...
- char* = "name" g++报告warn的原因
char* str = { "abcd" },先定义一个字符串常量“abcd“,再将指针str指向它,返回值是这个指针,由于字符串常量在编译时分配内存,只有程序退出时才被销毁,所以 ...
- L2-025 分而治之(并查集)
分而治之,各个击破是兵家常用的策略之一.在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破.为此参谋部提供了若干打击方案.本题就请你编写程序,判断每个方案的可行性 ...
- SSM商城开发学习
功能模块:前端:门户.商品搜索.商品展示.购物车.注册&登录 后端:商品管理.订单管理.cms 上线,bug,维护,停到上线,维护,打包,上线 某一个模块出现bug,停到这个模块 tomcat ...
- phpstudy 配置端口 和 虚拟域名访问
打开phpstudy窗口 选择->其他选项菜单->打开配置文件->httpd.conf 添加一个 Listen 8081(端口号) 查看到 Include conf/vhost ...
- redis集群搭建及设置账户(转)
Redis集群搭建以及为集群设置密码 介绍安装环境与版本 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-3.2.4 版本. ...
- ios UITableView的style的区别与用法,以及分割线的显示与隐藏
******************tableview style****************************************************** // tableview ...
- Skipping acquire of configured file ···doesn't support architecture 'i386' acquire of configured file
系统更新的时候报错: Skipping acquire of configured file 'main/binary-i386/Packages' as repository 'http://rep ...
- map和list循环遍历
//map遍历(zmm是实体类) Map<String, zmm> maps = new HashMap<String, zmm>(); //给map存值: maps.put( ...