投的java研发岗
有20道选择和3道编程
选择题涉及知识点:
瀑布模型开发流程()
静态结构、非静态结构、构造方法调用顺序()
一次趟能确定的一个元素位置的排序算法有哪些(简单选择排序、快排、堆排序)
DNS解析错误
垃圾回收机制
编程题
1.求一个长整型数的二进制形式包含1的个数
public class Main1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
int count=0;
while(number!=0){
number=number&(number-1);
count++;
}
System.out.println(count);
}
}
2.求给定时间落在哪个区间内 输出该区间的序号 要求按序输出
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
/*
* 输出在时间区间范围内的序号
*/
public class Main2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int curtime = sc.nextInt();
String line ="";
String[] nums=new String[n];
int[] starttimes = new int[n];
int[] endtimes = new int[n];
ArrayList<String> res = new ArrayList<String>();
for(int i=0;i<n;i++){
nums[i]=sc.next();
starttimes[i]=sc.nextInt();
endtimes[i]=sc.nextInt();
}
sc.close();
for(int i=0;i<n;i++){
if(curtime<=endtimes[i]&&curtime>=starttimes[i]){
res.add(nums[i]);
}
}
if(res.size()==0){
System.out.println("null");
}
else{
Collections.sort(res);
for(String t : res){
System.out.println(t);
}
}
}
}
3.实现简易的LRU算法 get put方法 当超出指定容量时 采用LRU最近最久未使用方法
这题没有给输入行数 因此不好控制何时结束,LRU主要实现思想借助队列 先进先出原则
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Scanner;
/*
* 实现简单的LRU算法
* 要求输入命令 p表示put g表示get 如果超出指定容量则采用LRU算法移除元素
* 这里采用队列存放最近使用的元素 队首时间最久 队尾最新
*/
public class Main3 {
static Map<Integer, Integer> maps= new HashMap<Integer, Integer>();
static Queue<Integer> queue=new LinkedList<>();
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int cap = sc.nextInt();//缓存容量
int m=sc.nextInt();
ArrayList<String> cmds = new ArrayList<String>();//存放所有行命令
while(m>=0){//获取输入
String line = sc.nextLine();
cmds.add(line);
m--;
}
//System.out.println(cmds.size());
sc.close();
//遍历每一行命令
for(String s:cmds){
String[] ss = s.split(" ");
String s1=ss[0];
//System.out.println(s);
//如果为put
if(s1.equals("p")){
//System.out.println("mvp");
int t1=Integer.parseInt(ss[1]);
int t2=Integer.parseInt(ss[2]);
put(t1, t2,cap);
}
if(s1.equals("g")){//如果为get
//System.out.println("mmp");
int t3 = Integer.parseInt(ss[1]);
get(t3,cap);
}
}
}
//get函数
public static void get(int key,int num){
if(maps.containsKey(key)){
queue.remove(key);
queue.add(key);
//System.out.println("ji");
System.out.println(maps.get(key));
}
else{
System.out.println("-1");
}
}
//put函数
public static void put(int key,int val,int num){
if(maps.containsKey(key)){
maps.put(key, val);//是否已包含元素
queue.remove(key);
queue.add(key);
}
else{
if(maps.size()<=num){//判断是否超过容量 否
queue.remove(key);
queue.add(key);
}
else{//超出缓存容量
//选择最近最久未使用的
Integer k = queue.poll();
maps.remove(k);
maps.put(key, val);
}
}
}
}