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的更多相关文章
随机推荐
- tmux复制模式
复制模式支持滚屏等操作,进入方法为Ctrl + b再按"[",此时进入所谓的copy-mode 然后就可以用上下键或PageDn/PageUp浏览屏幕了. 想退出copy-mode ...
- redis各类错误可能的解决方案
.报Timeout performing EVAL 这个可能是连到读库从库了,直接改成写库就没问题了. 2. 各种ConnectTimeout 一般是偶尔或经常就超时,这种情况,找了各种回答,最后在s ...
- 不常用但是很实用的css记录
本文主旨是记录一些不常用但是非常炫酷的css属性,提升用户体验的捷径之一. 1.background-attachment 滚动视差 https://codepen.io/Chokcoco/p ...
- Oracle SQL Developer 调试存储过程步骤(Oracle)
1.首先你编译通过你的存储过程,编译的时候一定要选“编译以进行调试”. 2.在想要调试的行上设置好断点. 3.点击“调试”按钮,然后输入存储过程入参,点“确定”开始调试. 4.断点进入后,上方会出现一 ...
- anaconda使用方法
我是用的win10.想写爬虫,所以使用了 anaconda .总结一下使用的方法. 安装阶段跳过.: 再终端输入 jupyter notebook 然后就会在. 浏览器显示一个网页.其实这个也不 ...
- bootstrapTable服务器端分页
bootstrap table加载:无论是服务器分页还是客户端分页,重新加载表格前请一定先销毁!销毁!销毁! !!销毁表格:: 客户端分页: 1. 表格销毁 $('#tableID').bootst ...
- docker镜像运行错误排查
docker做服务时,如果客户端无法连接,错误排查: 1.先使用 docker ps 查看镜像是否都在运行中,如果没有就进入镜像查看日志 2.如果确定代码及配置文件没有问题,就需要检查镜像的替换是否正 ...
- Ubuntu 18.04 下如何配置mysql 及 配置远程连接
首先是大家都知道的老三套,啥也不说上来就放三个大招: sudo apt-get install mysql-server sudo apt isntall mysql-client sudo apt ...
- 弹飞绵羊[HNOI2010]
--BZOJ2002 Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线 ...
- POJ 3162.Walking Race 树形dp 树的直径
Walking Race Time Limit: 10000MS Memory Limit: 131072K Total Submissions: 4123 Accepted: 1029 Ca ...