牛客真题错题总结-JAVA

本文总结了JAVA编程中的线程执行体、数据类型比较、位运算、I/O同步、查找命令、设计模式、虚拟内存、二叉树、数据结构与集合类的区别、线程创建的代价、阶乘问题以及并发输出和字符串翻转问题,深入探讨了JAVA编程中的关键概念和技术。
摘要由CSDN通过智能技术生成

请问以下哪个方法用于定义线程的执行体():run()

==判断的是内存地址,integer在赋予int数值-127到128之间的数可以直接调用cache,所以内存地址一样,超过这个范围就new了一个对象,所以内存地址就不一样了就返回了false

<<:是逻辑左移,右边补0,符号位和其他未一样要移动,数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方

java对I/O访问所提供的同步处理机制是过滤流。

如果想列出当前目录以及子目录下所有扩展名为”.txt”的文件,那么可以使用一下哪个命令:
Linux find命令用来在指定目录下查找文件。

定义了一系列算法,并将每个算法都封装起来,使他们可以相互替换是指策略模式。

虚拟内存的容量只受计算机地址位数的限制。

若处理器有32位地址,则他的虚拟地址空间位2的32次方=4G

按照二叉树的定义,具有3个节点的二叉树有5种

缓存系统中主要使用的数据结构是hashMap

简述java语言中,ArrayList,Vector,LinklList的关系与区别
相同:ArrayList,LinkedList,Vector这三个类都实现了java.util,List接口,同在java.util包下,他们都允许Null值,区别ArrayList和Vector是采用数组的方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法,是线程安全的,所以性能上比ArrayList要差。LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快!ArrayList和LinkedList都不是线程安全的。

无限制创建线程的不足有哪些?
1.线程生命周期的开销非常高,线程的创建和销毁都是有代价的,线程的创建过程都需要时间,并且需要JVM和操作系统提供一些辅助操作,如果请求的到达率非常高而且请求的处理过程是轻量级的,那么位每个请求创建一个新线程将消耗大量的计算资源;2.资源消耗。活跃的线程会消耗系统资源,尤其内存,如果运行的线程数多于可用的处理器数量,那么这些线程将闲置,大量空闲的线程会占用许多内存,给垃圾回收器带来压力,而且大量线程竞争CPU资源时还会产生其他的性能开销。3.稳定性,在可创建的线程数量上存在一个限制,破坏了这些限制可能会抛出OutOfMemoryError异常,要想从这些错误中恢复过来是非常危险的,更简单的方式是通过构造程序来避免超出这些限制。

有一座高度是n级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶,要求用程序来求出一共有多少钟走法。

import java.util.Scanner;

public class jieti {

    public static void main(String[] args1)
    {
        Scanner sc = new Scanner(System.in);
        int i= sc.nextInt();
        int count = qiuJie(i);
        System.out.println(count);
    }
    private static int qiuJie(int i)
    {
        if(i == 1|| i == 0)
            return 1;
        else
            return qiuJie(i-1)+qiuJie(i-2);
    }
}

创建两个线程,其中一个输出1-52,另外一个输出A-Z。输出格式要求:12A 34B 56C 78D

import java.util.concurrent.atomic.AtomicInteger;

public class twoThread {
    public static volatile boolean flag = false;
    public static AtomicInteger time = new AtomicInteger();
    public static void main(String[] args)
    {
        new Thread(()->
        {
            for(int i=1;i<53;i=i+2)
            {
                if(!flag&&(time.get()==0||time.incrementAndGet()%2==0))
                {
                    System.out.println(i);
                    System.out.println(i+1);
                    flag=true;
                }
                else
                {
                    i=i-2;
                }
            }
        }).start();
        new Thread(
                ()->
                {
                    for(int i=0;i<26;i++)
                    {
                        if(flag&&(time.get()==1||time.incrementAndGet()%2==1))
                        {
                            System.out.println((char)(i+'A'));
                            System.out.println(' ');
                            flag=false;
                        }
                        else
                        {
                            i--;
                        }
                    }
                }
        ).start();
    }
}

原地翻转句子中单词的顺序,但单词内容的顺序不变。

import java.util.Scanner;

public class transformDanci {
    public static void main(String[] argc)
    {
        Scanner sc = new Scanner(System.in);
        String target = sc.nextLine();
        String reserve = reserve(target);
        System.out.println(reserve);

    }
    public static String reserve(String str)
    {
        String []ss =str.split("");
        StringBuffer s = new StringBuffer("");
        for(int i = ss.length-1;i>=0;i--)
        {
            s.append(ss[i]+" ");
        }
        return s.toString();
    }
}

输入一个正整数数组,将他们链接起来排成一个数,输出能排出的所有数字中最小的一个。

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class getMinNum {
    public static void main(String[] argc)
    {
        ConnectArray();
    }
    public static void ConnectArray()
    {
        String str=new Scanner(System.in).next();
        String[] numbers = str.split(",");
        Arrays.sort(numbers, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                if(o1.length() == o2.length())
                {
                    return o1.compareTo(o2);
                }
                return (o1+o2).compareTo((o2+o1));
            }
        });
        for(String s:numbers)
        {
            System.out.printf("%s",s);
        }
    }
}

有为N件物品,他们的重量W分别是W1,w2,wn他们的价值分别是v1,v2,…vn每件物品数量有且仅有一个,现在给你个承重为M的背包,求背包里装入的物品具有的价值最大总和

    import java.util.Scanner;

    public class tanxin {
        public static void main(String[] argc)
        {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int d = sc.nextInt();
            int[] value=new int[n+1];
            int[] weight=new int[n+1];
            for(int i=1;i<=n;i++)
            {
                weight[i]=sc.nextInt();
            }
            for(int i=1;i<=n;i++)
            {
                value[i]=sc.nextInt();
            }
            int[][]dp = new int[n+1][d+1];
            dp[0][d]=0;
            for(int i =1;i<=n;i++)
            {
                for(int j=d;j>=weight[i];j--)
                {
                    dp[i][j]=Integer.max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i]);
                }
            }
            System.out.println(dp[n][d]);
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值