Java常见⾯试题
⽬录
我认为⾯试中可能会问到的,汇总⼀下。有些类名使⽤中⽂,为了⽅便查的,实际项⽬开发中不会⽤中⽂类名的。字符串是否相同⽐较
public static void main(String args[]){
String strA ="yootk";// 直接赋值实例化字符串对象
String strB =new String("yootk");// 构造⽅法进⾏实例化对象
ssh命令连接linuxString strC = strB ;// 引⽤传递(两个对象指向同⼀块堆内存)
System.out.println(strA.equals(strB));// true
System.out.println(strA.equals(strC));// true
System.out.println(strB.equals(strC));// true
}
运⾏结果:
true
true
true
冒泡排序法
public class数组的冒泡排序法{
public static void main(String args[]){
int data []=new int []{3,1,5,2,8,6,9,0};
sort(data);
printArray(data);
}
public static void sort(int array[]){// 进⾏数组排序操作
for(int x =0; x < array.length ; x ++){
for(int y =0; y < array.length -1; y ++){
if(array[y]> array[y +1]){// 前⼀个与后⼀个进⾏⽐较
int temp = array[y];// 引⼊⼀个第三⽅变量temp
array[y]= array[y +1];// 修改“array[y]”的内容
array[y +1]= temp ;// 获取原始的“array[y]”的内容
}
}
}
}
public static void printArray(int temp[]){
for(int num : temp){
jsp开发的项目System.out.print(num +"、");
}formation是什么服务
}
}
数组转置
⽅法⼀:
public class数组转相置⽅法⼀容易产⽣垃圾{
public static void main(String args[]){
int data []=new int []{1,2,3,4,5,6};
data =reverse(data);// 传递data引⽤同时修改data引⽤printArray(data);
}
public static int[]reverse(int array[]){
int temp []=new int [array.length];// 依据已有数组开辟新数组int foot = array.length -1;// 索引从0开始
for(int x =0; x < temp.length ; x ++){
temp[x]= array[foot --];// 逆序插⼊
}
return temp ;
}
public static void printArray(int temp[]){
for(int num : temp){
家长会ppt模板免费下载 素材
System.out.print(num +"、");
}
}
}
缺点:容易产⽣垃圾,不建议使⽤。
⽅法⼆:
public class数组转相置⽅法⼆推荐⽅法{
public static void main(String args[]){
int data[]=new int[]{1,2,3,4,5,6};
reverse(data);// 数组转置
printArray(data);
}
public static void reverse(int array[]){
int center = array.length /2;// 计算循环次数
int head =0;// 前部的操作脚标
int tail = array.length -1;// 后部操作脚标
for(int x =0; x < center; x++){// 转置交换
int temp = array[head];
array[head]= array[tail];
array[tail]= temp;
head++;
tail--;
}
}
public static void printArray(int temp[]){
for(int num : temp){
System.out.print(num +"、");
}
}
对⽐上⾯的⽅法,不会产⽣垃圾。
多线程⾯试题
多线程加减
设计4个线程对象,两个线程执⾏减操作,两个线程执⾏加操作。
k.demo;
class Resource {// 描述公共资源
private int number =0;// 要操作的数字
private boolean flag ;// 设置⼀个操作的标志位
// flag = true:表⽰可以进⾏加法操作,但是不允许进⾏减法操作
// flag = false:表⽰可以进⾏减法操作,但是不允许进⾏加法操作
public synchronized void add(){
while(this.flag ==false){
try{
super.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
this.number ++;// 执⾏加法操作
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("【"+Thread.currentThread().getName()+"】执⾏加法操作,当前的操作结果为:"+this.number);
this.flag =false;// 表⽰加法执⾏完毕
}
public synchronized void sub(){
while(this.flag ==true){
try{
super.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
this.number --;// 执⾏减法操作
try{
Thread.sleep(50);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("【"+Thread.currentThread().getName()+"】执⾏减法操作,当前的操作结果为:"+this.number);
this.flag =true;// 表⽰加法执⾏完毕
}
}
public class YootkDemo {// 李兴华编程训练营:yootk.ke.qq
public static void main(String[] args)throws Exception {
Resource resource =new Resource();// 公共资源
for(int x =0; x <2; x ++){// 创建加法线程
new Thread(()->{
for(int y =0; y <50; y ++){// 每个线程执⾏50次的计算
synchronized(resource){
resource.add();
}
}
},"加法线程 - "+ x).start();
}
}
for(int x =0; x <2; x ++){// 创建加法线程
充电宝上的input是什么意思
new Thread(()->{
for(int y =0; y <50; y ++){// 每个线程执⾏50次的计算
synchronized(resource){
resource.sub();
}
}
},"减法线程 - "+ x).start();
}
}
}
电脑⽣产与消费
笔试题:设计⼀个⽣产电脑和搬运电脑类,要求⽣产出⼀台电脑就搬⾛⼀台电脑,如果没有新的电脑⽣产出来,则搬运⼯要等待新的电脑产出;如果⽣产出的电脑没有搬⾛,则要等待电脑搬⾛之后再⽣产,并统计出⽣产的电脑数量。
k.demo;
import java.security.spec.RSAOtherPrimeInfo;
class Resource {// 公共的访问资源
private int number =0;// 统计电脑的数量
private Computer computer ;// 描述⽣产或取⾛的电脑资源
public Resource(){
java常见笔试题Thread numberDaemonThread =new Thread(()->{
while(true){
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("【后台线程】当前⽣产的电脑数量为:"+this.number);
}
});
numberDaemonThread.setDaemon(true);// 设置为后台线程
numberDaemonThread.start();// 启动线程
}
public synchronized void create(String brand,double price){// 创建电脑
if(thisputer != null){// 已经创建完成,但是未取⾛
try{
super.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
thisputer =new Computer(brand, price);// ⽣产新的电脑
this.number ++;// 电脑的⽣产数量要进⾏累加
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("【"+Thread.currentThread().getName()+"】电脑⽣产完成,"+thisputer);
}
public synchronized void get(){
public synchronized void get(){
if(thisputer == null){// 等待⽣产
try{
super.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("【"+ Thread.currentThread().getName()+"】搬运电脑,"+thisputer);
thisputer = null ;
}
}
class Computer {
private String brand ;// 电脑品牌
private double price ;// 电脑价格
public Computer(String brand,double price){
this.brand = brand;
this.price = price;
}
@Override
public String toString(){
return"电脑品牌 = "+this.brand +"、电脑价格 = "+this.price ;
}
}
public class YootkDemo {// 李兴华编程训练营:yootk.ke.qq
public static void main(String[] args)throws Exception {
Resource resource =new Resource();
new Thread(()->{
for(int x =0; x <50; x ++){
if(x %2==0){
}else{
}
}
},"电脑⽣产者").start();
new Thread(()->{
for(int x =0; x <50; x ++){
<();
}
},"电脑搬运⼯").start();
}
}
竞拍抢答
实现⼀个竞拍抢答程序:要求设置三个抢答者(三个线程),⽽后同时发出抢答指令,抢答成功者给出成功提⽰,未抢答成功者给出失败提⽰。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。