Java软件工程面试题1

 

  1. 写出Runtime Exception
  •  NullPointerException
  • NumberFormatException(继承IllegalArgumentException,字符串转换为数字时出现)
  • ArrayIndexOutOfBoundsException(数组越界)
  • StringIndexOutOfBoundsException(字符串越界)
  • ClassCastException(类型转换错误)
  • UnsupportedOperationException(该操作不被支持)
  • ArithmeticException(算术错误)
  • IllegalArgumentException(非法参数)
  2.ArrayList,LinkedList的区别?
  • ArrayList: 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦;
  • LinkedList: 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 但是缺点就是查找非常麻烦 要从第一个索引开始;
  3.StringBuilder,StringBuffer,Stirng的区别
 
  • StringBuilder:不是线程安全的;
  • String:的值是不可变的,这就导致每次对String的操作都会生成新对象,不仅效率低下,而且大量浪费有限的内存空间;
  • StringBuffer:是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象,自动增加容量
 4.设计模式 
 
  • 策略模式,
  • 装饰模式,
  • 观察者模式
  • 适配器模式
  • 模版本方法
  • 单例模式
5.Hibernate or Jdbc查询User(id int primary key,name varchar(255)) id 为1的用户名称
  Connection conn = null;          Statement stmt = null;             ResultSet result = null;             Class.forName(" oracle.jdbc.driver.OralceDriver");             conn = DriverManager.getConnection(" jdbc:oracle:thin:@locast:1521:orcl", "scott", "tiger");             stmt = conn.createStatement();             result = stmt.executeQuery("select u.name from User u where u.id='1'");             while(result.next()){          String name = result.getString("name");          System.out.println(name);        }        result.close();        stmt.close();        conn.close();  
 
6.斐波那契数列:每个数等于前两个数之和(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...)
fib(n)={1 (n=0)
1 (n=1)
fib(n-1)+fib(n-2) (n>1);第一项和第二项都等于2;求出 斐波那契数列第n项(n>=1的自然数),要求用递归算法.
public static int fibonacci(int n) { if (n == 1 || n == 2) { return 1; } else { return fibonacci(n - 1) + fibonacci(n - 2); } }
 
   循环法
   int circle1 = 1; int circle2 = 1; int circle3; for (int i = 3; i <= n; i++) { circle3 = circle1 + circle2; circle1 = circle2; circle2 = circle3; } return circle2;
 
  7 给定一个文件夹,把文本文件(.txt)放到List<File> txtFiles对象中,要考虑子文件夹Filel.listFiles()返回一个目录下面的文件File数组
    public List<File> getFiles(File fileDir, String fileType) { List<File> fileList = new ArrayList<File>(); try { //文件夹是否存在 if (fileDir.isDirectory()) { File[] files = fileDir.listFiles(); for (File file : files) { //是否是文件 if (file.isFile()) { //文件类型后缀名 String isFileType=file.getName().substring(file.getName().lastIndexOf(".")+1); if (fileType.equalsIgnoreCase(isFileType)) { fileList.add(file); } }  } }else { throw new  Exception("文件夹不存在!"); } } catch (Exception e) { e.printStackTrace(); } return fileList; }
 

      public static void main(String[] args) {
FindFile findfile= new FindFile();
List<File> fileList = findfile.getFiles(new File("d:\\test"), "txt");
for (File file : fileList) {
String fileName=file.getName().substring(0,file.getName().lastIndexOf("."));
System.out.println(fileName);
}
}

  8.有三张表, 


DROP TABLE IF EXISTS `b`;
CREATE TABLE `b` (
  `boe_header_id` int(11) NOT NULL,
  `boe_line_id` int(11) DEFAULT NULL,
  `amount` varchar(11) DEFAULT NULL,
  `type` varchar(11) DEFAULT NULL,
  PRIMARY KEY (`boe_header_id`)

DROP TABLE IF EXISTS `a`;
CREATE TABLE `a` (
  `boe_header_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '单据头id',
  `dept_id` int(11) DEFAULT NULL COMMENT '报账部门id',
  `boe_date` varchar(11) DEFAULT NULL COMMENT '报账日期',
  PRIMARY KEY (`boe_header_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
DROP TABLE IF EXISTS `c`;
CREATE TABLE `c` (
  `dept_id` int(11) NOT NULL AUTO_INCREMENT,
  `dept_name` varchar(11) DEFAULT NULL,
  PRIMARY KEY (`dept_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

   编写sql查询出综合部门在2015年1月份报销费用类型为交通费的报账金额总和?

  SELECT b.type,sum(b.amount) from b
  LEFT JOIN  a on b.boe_header_id=a.boe_header_id
   LEFT JOIN  c on a.dept_id=c.dept_id
  where b.type='交通费' and c.dept_name='综合部' and a.boe_date='2015.1';  

9.排序

  /**
* 排序 从小到大排列

* @param arr
* @return
*/
public static int[] sorttArr(int[] arr) {
int temp;
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}


}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
return arr;


}

  折半查找:先排序 -1 为没有找到,找到直接返回要找数字的位置

   public int searchNum(int[] arr, int findNum) {
if (arr == null) {
return -1;
}
int start = 0;
int end = arr.length - 1;
while (start <= end) {
int middle = (start + end) / 2;
int middleNum = arr[middle];
if (findNum == middleNum) {
return middle;
} else if (findNum < middleNum) {
end = middle - 1;
} else {
start = middle + 1;
}
}
return -1;
}

 

 

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你正在准备Java软件工程师的面试,以下是一些建议: 1. 复习Java基础知识:面试官可能会问一些基本的Java概念,如面向对象编程,数据结构和算法,多线程编程等。确保你已经熟悉了这些概念,并且能够解释清楚。 2. 学习Java框架:现在Java框架有很多,例如Spring,Hibernate,MyBatis等。学习并熟悉其中的一些框架,因为大多数企业都会使用这些框架。你应该知道它们的优点、缺点和在哪些场景下使用。 3. 练习编写代码:面试官可能会要求你编写一些代码,例如实现一个算法,或者用Java框架构建一个小项目。确保你已经熟练掌握Java语言,能够在面试时快速编写代码。 4. 熟悉常用的工具和技术:熟悉如何使用Eclipse、IntelliJ IDEA等集成开发环境(IDE),掌握Maven、Git等版本控制工具的使用。 5. 准备面试问题的答案:根据你的经历和技能,你可能会被问及一些问题,例如你的工作经验、你最擅长的技术,你遇到的最大挑战等。你应该提前准备好这些问题的答案。 6. 学会提问:在面试中,不仅要回答面试官的问题,还要向面试官提出问题。这是一个展示你对行业和工作的了解程度的机会。问一些关于企业文化、技术栈等问题,以便更好地了解工作职责和公司。 最重要的是,不断学习和实践。Java软件工程师面试通常涉及到广泛的主题和技能,需要不断学习和掌握新的知识和技术。 ### 回答2: 准备Java软件工程师的面试需要掌握以下几个方面: 1. 扎实的Java基础知识:包括面向对象编程、集合框架、异常处理、多线程等。要熟悉Java的核心概念和语法,能够灵活应用。 2. 常用的Java开发框架和工具:对于企业级应用,掌握Spring、Hibernate等框架非常重要。了解Maven、Git等开发工具的使用。 3. 数据库相关知识:了解SQL语言,熟悉常见的数据库操作,如增删改查、事务处理等。对于常用的数据库如MySQL、Oracle等要有一定的了解。 4. 网络编程和Web开发:了解HTTP协议、Socket编程等常见的网络相关知识,能够使用Servlet、JSP、Spring MVC等进行Web开发。 5. 测试和调试技能:掌握Junit等单元测试框架的使用,熟悉常见的调试工具和技巧,如断点调试、日志记录等。 6. 代码质量和性能优化:了解代码规范和设计原则,能够编写可维护、可扩展的代码。对于性能优化方面,理解常见的性能问题和优化方法。 7. 项目经验和实践:准备一些有挑战性的项目经验,能够清晰地介绍自己在项目中的角色和贡献,展示自己在实际工作中的能力和经验。 在准备面试过程中,可以通过复习基础知识、阅读相关书籍、参加培训班、做练习题等方式来加强自己的技能。此外,还可以参加线上线下的技术交流活动,与其他开发者分享、学习经验。最重要的是多做实践,通过自己动手实际开发项目来提升自己的能力。同时也要保持一颗积极的心态,充满信心地去应对面试挑战。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值