一个吃货公司的面试题整理

前几天去了这家公司(面试题上写的保密,所以我就不透露公司名称了)

面试题不是网上的千篇一律,有几道题还是比较考察基础和思维的,就凭着回忆整理了一下几道特色菜。


1.$a='/a/b/c/d/e/f';$b='/a/b/c/y/e/f';$a相对于$b的路径为../../../d/e/f 写出一个函数实现类似$a相对于$b的路径


function chaji($a,$b){

	$arr=explode('/',$a);
	array_shift($arr);			/span>//把字符串开头的那个杠/化为的空的元素移除
	$brr=explode('/',$b);
	array_shift($brr);
	$str='';$i=0;
	foreach($arr as $key=>$value){
		if($brr[$key]==$value){
			$str.='../';
			$i++;
		}else{
			break;
		}
	}

	$l=count($arr);
	$newarr=array_slice($arr,$i,$l-$i);
	$newstr=implode('/',$newarr);
	return $str.$newstr;
}

2.给出类似三个url,求文件名

$url1="http://www.sdf.conm/sdf.php";
$url2="http://www.sdf.conm/sdf.php?fdf=3";
$url3="ftp://www.sdf.conm/sdf.php";



function getfile($url){
	preg_match("/:\/\/(.*?)\/((.*?)\.php)/",$url,$arr);
	return $arr[2];
}

3.考基础sql。

如下表,表名为score,求全部科目都及格(score>=60)的uid

建表语句为

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
  `uid` int(11) NOT NULL,
  `course` varchar(255) default NULL,
  `score` int(10) default NULL
) ENGINE=MyISAM AUTO_INCREMENT=112 DEFAULT CHARSET=utf8;


实现要求的三种方法(三条sql中的任意一条都可以)

答案:

select a.uid from 
			(select uid from score where score>=60 group by uid) a
		LEFT JOIN 
			(select uid from score where score<60 group by uid) b 
	        using(uid) 
where b.uid is null;


select uid,count(uid) c from score where score>60 group by uid  having c=5 ;


select uid from score where uid not in ( select uid from score where score < 60 group by uid) group by uid;






4.一个大数组[2,6,8,5,7,15,654,841,21,54,6,15,3,......];

按照元素重复的次数重新由大到小排序组成新数组,例如

4=>6,//4出现了6次

15=>5,//15出现了5次

23=>4//23出现了4次


function paixu($arr){
	
	$newarr=array();
	
	foreach($arr as $value){
		if(array_key_exists($value,$newarr)){
			$newarr[$value]++;
		}else{
			$newarr[$value]=1;
		}
	
	}
	natsort($newarr);
	return array_reverse($newarr,true);

}


<think>好的,我需要帮助用户找到基于Java和IntelliJ IDEA开发订餐系统的教程或示例代码。首先,用户提到了三个引用,但看起来这些引用内容可能不相关,或者用户可能混淆了引用来源。我需要仔细检查这些引用内容,看看是否有关于订餐系统的具体实现细节。 引用1提到了使用数组和对象保存订单信息,包括访、删除订单,计算总金额等。引用2详细描述了订单系统的各个功能,如点餐、查看订单、签收、删除、点赞和退出。引用3补充了订单的具体字段,如订餐人姓名、菜品选择、送餐时间、地址、状态和总金额。这些引用提供了系统的基本需求,但用户需要的是具体的开发教程或示例代码。 接下来,我需要考虑如何构建一个Java项目,使用IntelliJ IDEA作为开发工具。首先,项目结构应该包括主类、订单类、菜品类等。然后,根据引用中的功能点,逐步实现各个模块。 用户可能需要指导如何初始化数据,比如使用数组或集合来存储菜品和订单。例如,引用2提到使用ArrayList来存储订单,这可以作为参考。另外,处理用户输入和菜单切换是关键部分,可能需要使用Scanner类来获取用户输入,并通过循环显示菜单选项。 关于示例代码,我需要提供一个简单的框架,包括类的定义、主菜单循环、订单管理的功能实现。例如,订单类应包含姓名、菜品列表、时间、地址、状态和总金额。菜品类则包含名称、价格和点赞数。 还需要考虑如何计算总金额,根据引用3,总金额需要根据所选菜品及份数计算。这涉及到遍历订单中的菜品,累加单价乘以份数。 此外,用户提到的点赞功能(引用2和3)需要能够为菜品增加点赞数,这可以通过在菜品类中添加点赞数属性,并在用户选择点赞时更新该属性。 最后,测试和调试也是重要的步骤,确保各个功能按预期工作,例如订单状态的转换(已预定到已完成)和输入验证(如送餐时间必须在10到20之间)。 总结来说,我需要提供一个结构清晰的步骤指南,涵盖项目设置、类设计、功能实现和示例代码,同时参考用户提供的引用内容,确保覆盖所有提到的需求点。</think>以下是为您整理的Java订餐系统开发指南,包含核心代码示例和实现思路: ### 一、项目环境搭建 1. 在IntelliJ IDEA中新建Java项目 2. 创建包结构:`com.chihuo.system` 3. 创建核心类: - `MainApp`(主程序) - `Food`(菜品类) - `Order`(订单类) - `DataCenter`(数据存储类) ### 二、核心数据结构设计 ```java // 菜品类 public class Food { int id; String name; double price; int likes; } // 订单类 public class Order { String customerName; List<Food> foods; int deliveryTime; String address; int status; // 0-已预定 1-已完成 double totalAmount; } ``` ### 三、核心功能实现 #### 1. 数据初始化(引用[3]) ```java public class DataCenter { public static List<Food> foods = new ArrayList<>(); public static List<Order> orders = new ArrayList<>(); static { foods.add(new Food(1, "红烧肉", 38.0, 0)); foods.add(new Food(2, "宫保鸡丁", 28.0, 0)); } } ``` #### 2. 主菜单逻辑(引用[2]) ```java public class MainApp { public static void main(String[] args) { while(true) { System.out.println("1.我要订餐 2.查看订单 3.签收订单 4.删除订单 5.我要点赞 6.退出"); Scanner sc = new Scanner(System.in); int choice = sc.nextInt(); switch(choice) { case 1: createOrder(); break; case 2: showOrders(); break; // ...其他功能实现 } } } } ``` #### 3. 创建订单功能(引用[3]) ```java private static void createOrder() { Order order = new Order(); Scanner sc = new Scanner(System.in); // 输入订餐人姓名 System.out.print("请输入姓名:"); order.customerName = sc.next(); // 选择菜品 System.out.println("可选菜品:"); for(Food f : DataCenter.foods) { System.out.println(f.id + "." + f.name + " " + f.price + "元"); } System.out.print("请输入菜品序号:"); int foodId = sc.nextInt(); // 验证送餐时间(引用[3]) do { System.out.print("请输入送餐时间(10-20点):"); order.deliveryTime = sc.nextInt(); } while(order.deliveryTime <10 || order.deliveryTime>20); // 计算金额 order.totalAmount = calculateAmount(foodId, quantity); DataCenter.orders.add(order); } ``` ### 四、关键功能实现要点 1. **订单状态管理**(引用[2]) ```java // 签收订单时验证状态 if(order.status == 0) { order.status = 1; } else { System.out.println("订单已完成,不可重复签收"); } ``` 2. **输入验证逻辑** ```java // 送餐时间验证(引用[3]) while(true) { System.out.print("请输入送餐时间:"); int time = sc.nextInt(); if(time >=10 && time <=20) break; System.out.println("输入错误!"); } ``` 3. **点赞功能实现**(引用[2]) ```java public static void addLike() { System.out.println("请选择要点赞的菜品:"); for(Food f : DataCenter.foods) { System.out.println(f.id + "." + f.name + " 当前点赞数:" + f.likes); } int choice = sc.nextInt(); DataCenter.foods.get(choice-1).likes++; } ``` ### 五、项目优化建议 1. 使用文件存储代替内存存储 2. 增加异常处理机制 3. 实现GUI界面(可参考JavaFX或Swing) 4. 添加数据库支持(推荐MySQL)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值