今日参加万惠集团(PPmoney)的面试,首先要进行一个小时的机试;机试题目难度适中,抽空分享一下:
1.经度纬度重构代码题
原来的代码逻辑大概是这样的:
public static Boolean judgeLngLaxfilter(int lng,int lax,int lngMax,int lngMin, int laxMax,int laxMin){
boolean flag =true;
boolean lngFlag1 = false;
boolean lngFlag2 = false;
boolean laxFlag1 = false;
boolean laxFlag2= false;
if(lngMax==0){
lngFlag1 = true;
}else if(lng <=lngMax){
lngFlag1 = true;
}
if(laxMax==0){
laxFlag1 = true;
}else if(lax<=laxMax){
laxFlag1 = true;
}
if(lngMin==0){
lngFlag2 = true;
}else if(lngMin>=lngMin){
lngFlag2 = true;
}
if(laxMin==0){
laxFlag2= false;
}else if(laxFlag2>=laxMin){
laxFlag2= false;
}
if(lngFlag1==true&&lngFlag2==true&&
laxFlag1==true&&laxFlag2==true){
flag = flase;
}
}
重构后的代码,答案:
public class LngLaxJudge {
public static Boolean judgeLngLaxfilter(int lng,int lax,int lngMax,int lngMin, int laxMax,int laxMin){
boolean flag =true;
boolean lngFlag1 = false;
if(lngMax==0){
lngFlag1 = true;
}else if(lng <=lngMax){
lngFlag1 = true;
}
boolean laxFlag1 = false;
if(laxMax==0){
laxFlag1 = true;
}else if(lax<=laxMax){
laxFlag1 = true;
}
boolean lngFlag2 = false;
if(lngMin==0){
lngFlag2 = true;
}else if(lngMin>=lngMin){
lngFlag2 = true;
}
boolean laxFlag2= true;
if(laxMin==0){
laxFlag2= true;
}else if(lax >= laxMin){
laxFlag2= true;
}
if(lngFlag1==true
&&lngFlag2==true
&&laxFlag1==true
&&laxFlag2==true){
flag = false;
}
return flag;
}
}
2.sql找出人数大于2de部门中员工的平均工资数
工资表如下
员工编号 员工姓名 部门 实发工资 实扣工资 应发工资 日期
1 张三 A 100 0 100 2018-07-18
2 李四 B 100 0 100 2018-07-18
3 王武 B 100 0 100 2018-07-18
4 王码 B 100 0 100 2018-07-18
5 黎黎 C 100 0 100 2018-07-18
6 kk C 100 0 100 2018-07-18
7 nini C 100 0 100 2018-07-18
答案:SELECT 部门,AVG(应发工资)AS平均工资 FROM 工资表 GROUP BY 部门 HAVING COUNT(姓名) >2;
3.设计模式题目
策略模式
找出父类接口跟几个子接口的关系
挺简单的一道题,就不发答案了。
4.选择题目(时序图)
返回的方法
Account类必须要实现的方法
也是挺简单的一道题。
5.计算利息题目
A=P(1+r/n)^nt
A位本息总和,P为本金,r为利息,t为每年计算利息次数,n为投资年限
要求:输入时进行校验,junit单元测试通过等等
public class RateTest {
public static void main(String args[]){
System.out.println("请输入参数:");
Scanner scan = new Scanner(System.in);
//本金
double P = scan.nextDouble();
System.out.println("本金是:"+P);
//利息
int r = scan.nextInt();
System.out.println("本金是:"+r);
//投资年限
int n = scan.nextInt();
System.out.println("投资年限是:"+n);
//每年计息次数
int t = scan.nextInt();
System.out.println("每年计息次数是:"+t);
//本息总和
double A = 0;
double lixi = RateTest.countLixi(P, r, t, n);
System.out.println("利息是:"+lixi);
A = RateTest.countSum(lixi, P, t, n);
System.out.println("本息总和:"+A);
}
//计算利息P(1+r/n)^nt
public static double countLixi(double P,int r,int t,int n){
double lixi= P*r/n;
for(int i=0;i<=n*t;i++){
lixi = lixi*lixi;
}
return lixi;
}
//计算本息总和
public static double countSum(double lixi,double P,int t,int n){
double sum =0;
for(int i=0;i<=t*n;i++){
P = P*P;
}
sum = P + lixi;
return sum;
}
}
给准备要面试的同胞一些经验了,如果对你有帮助,点个赞。
![](https://i-blog.csdnimg.cn/blog_migrate/7d8b87ba3b8f7e1a1fdf58ecb225b5c0.jpeg)