欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 阿里探花笔试

阿里探花笔试

2025/2/26 1:19:47 来源:https://blog.csdn.net/github_39019743/article/details/144852700  浏览:    关键词:阿里探花笔试

1.策略模式 实现一个场景,输入两个数字和一个操作类型(加-add,减-subtract,乘-multi,除-devise),输出计算结果,要求不能使用if-else 或switch等条件控制语句 ,请使用java 实现 并且给出思路

// 1. 定义策略接口
interface CalculatorStrategy {double calculate(double num1, double num2);
}// 2. 实现具体策略类:加法策略
class AdditionStrategy implements CalculatorStrategy {@Overridepublic double calculate(double num1, double num2) {return num1 + num2;}
}// 减法策略
class SubtractionStrategy implements CalculatorStrategy {@Overridepublic double calculate(double num1, double num2) {return num1 - num2;}
}// 乘法策略
class MultiplicationStrategy implements CalculatorStrategy {@Overridepublic double calculate(double num1, double num2) {return num1 * num2;}
}// 除法策略
class DivisionStrategy implements CalculatorStrategy {@Overridepublic double calculate(double num1, double num2) {if (num2 == 0) {throw new IllegalArgumentException("除数不能为0");}return num1 / num2;}
}// 3. 创建上下文类
class CalculatorContext {private CalculatorStrategy strategy;public void setStrategy(CalculatorStrategy strategy) {this.strategy = strategy;}public double executeStrategy(double num1, double num2) {return strategy.calculate(num1, num2);}
}public class Main {public static void main(String[] args) {// 示例操作数double num1 = 10;double num2 = 5;// 示例操作类型String operation = "multi"; CalculatorContext context = new CalculatorContext();// 利用Map存储操作类型与对应策略对象的映射关系java.util.Map<String, CalculatorStrategy> strategyMap = new java.util.HashMap<>();strategyMap.put("add", new AdditionStrategy());strategyMap.put("subtract", new SubtractionStrategy());strategyMap.put("multi", new MultiplicationStrategy());strategyMap.put("devise", new DivisionStrategy());CalculatorStrategy selectedStrategy = strategyMap.get(operation);if (selectedStrategy!= null) {context.setStrategy(selectedStrategy);double result = context.executeStrategy(num1, num2);System.out.println("计算结果: " + result);} else {System.out.println("不支持的操作类型");}}
}

2. 测题目一: A系统提供的login服务,有外部“很多”系统在调用该服务实现其登录逻辑(比如B、C、D等等系统)

现在需要你实现以下逻辑:
1,在A系统上统计各个系统login服务的调用次数 2,把统计出来的每个系统的调用次数做一次升序排序 提示:*/ //登录伪代码如下,各个系统调用本方法登录 // systemName系统名称、userId 用户ID //在本方法中把每个系统调用次数进行统计并用集合存储 public void login(String systemName,String userId) {

}

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class LoginServiceStatistics {// 使用HashMap来记录系统名称和对应的调用次数private static Map<String, Integer> callCountMap = new HashMap<>();public static void login(String systemName, String userId) {// 获取当前系统名称对应的调用次数,如果不存在则默认为0,然后加1callCountMap.put(systemName, callCountMap.getOrDefault(systemName, 0) + 1);}public static List<Map.Entry<String, Integer>> getSortedCallCounts() {// 将HashMap的Entry集合转换为ArrayList,便于排序List<Map.Entry<String, Integer>> entryList = new ArrayList<>(callCountMap.entrySet());// 使用自定义比较器按照调用次数进行升序排序entryList.sort((e1, e2) -> e1.getValue().compareTo(e2.getValue()));return entryList;}public static void main(String[] args) {// 模拟不同系统调用登录服务login("B", "user1");login("C", "user2");login("B", "user3");login("D", "user4");login("C", "user5");List<Map.Entry<String, Integer>> sortedList = getSortedCallCounts();for (Map.Entry<String, Integer> entry : sortedList) {System.out.println(entry.getKey() + "系统调用次数: " + entry.getValue());}}
}

3.使用java 三个线程循环打印ABC10次

import java.util.concurrent.Semaphore;public class PrintABCWithSemaphore {// 定义三个信号量,分别控制三个线程的执行顺序private static Semaphore semaphoreA = new Semaphore(1);private static Semaphore semaphoreB = new Semaphore(0);private static Semaphore semaphoreC = new Semaphore(0);static class ThreadA implements Runnable {@Overridepublic void run() {try {for (int i = 0; i < 10; i++) {semaphoreA.acquire();System.out.print("A");semaphoreB.release();}} catch (InterruptedException e) {e.printStackTrace();}}}static class ThreadB implements Runnable {@Overridepublic void run() {try {for (int i = 0; i < 10; i++) {semaphoreB.acquire();System.out.print("B");semaphoreC.release();}} catch (InterruptedException e) {e.printStackTrace();}}}static class ThreadC implements Runnable {@Overridepublic void run() {try {for (int i = 0; i < 10; i++) {semaphoreC.acquire();System.out.println("C");semaphoreA.release();}} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {new Thread(new ThreadA()).start();new Thread(new ThreadB()).start();new Thread(new ThreadC()).start();}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com