java面试:手写代码
二分查找法。
/**
* 二分查找法:给定一组有序的数组,每次都从一半中查找。直到找到要求的数据。
* 主要是得找到下标的表示方法。
*/
public class BinaryFind {
/**
* 使用二分法,找到有序数组中的某个数,返回下标。
* @param sortedArray
* @param number
* @return
*/
public int find(int[] sortedArray,int number){
if(sortedArray==null) {
throw new IllegalArgumentException();
}
int last=sortedArray.length-1;
int start=0;
//没找到对应的数据,就一直循环查找
while ( start<= last ) {
//先找到中间的元素的下标 , mid是首尾下标的和的一半
int mid= (start+last)/2 ;
if( sortedArray[mid] > number ) {
last=mid-1;
}else if(sortedArray[mid] <number ){
start=mid+1;
}else {
return mid;
}
}
return -1;
}
排序算法
1.快速排序
/**
* 快速排序.
* https://gitbook.cn/books/59f6a752d97c2122653a169e/index.html
*/
public class QuicklySort {
/**
*
* @param a 数组
* @param low 数组开始的下标。也就是0。
* @param high 数组末尾的下标。也就是length-1。
*/
public int[] sort(int a[],int low,int high){
if(low>high || a==null) {
return null;
}
int i=low;
int j=high;
//key设置为数组首位
int key=a[low];
//while结束后,小于key的全部放在key的左边,大于key的全部放在右边。。
while (i<j) {
//最后面的下标,从后向前遍历,找到第一个大于key的数据,将它赋给数组首位
while (i<j && key<=a[j]) {
j--;
}
a[i]=a[j];
//最前面的下标,从前向后遍历,找到第一个小于key的数据
while (i<j && key>=a[i]) {
i++;
}
a[j]=a[i];
a[i]=key;
}
//以下的i就是key的下标,对key两边的数据分别进行排序。
sort(a,low,i-1);
sort(a,i+1,high);
return a;
}
}
2.冒泡排序
比较低端,不建议写。
多线程
1.手写一下生产者消费者模式,不要用BlockingQueue。
思路:可以使用wait(),notify()
2.手写一个死锁。
设计模式
设计模式的代码详情见:
设计模式代码示例
1.手写一下单例模式。
单例模式示例
2.手写一下工厂模式。
3.手写一下观察者模式。
观察者模式示例
说起来很尴尬,我曾经在面试平安某个子公司时,一面聊了一个小时顺利通过,二面因为没能手写观察者模式,十分钟就结束了面试。当时的心情真的好难受。
待补充。
参考资料:
十大排序算法全面解析-Java实现
《剑指offer》
java面试:手写代码的更多相关文章
- Java面试手写代码题
1.栈实现 2.Iterator实现 3.单例 4.多线和控制(暂停,恢复,停止) 5.生产者消费者
- 前端面试手写代码——call、apply、bind
1 call.apply.bind 用法及对比 1.1 Function.prototype 三者都是Function原型上的方法,所有函数都能调用它们 Function.prototype.call ...
- 前端面试手写代码——模拟实现new运算符
目录 1 new 运算符简介 2 new 究竟干了什么事 3 模拟实现 new 运算符 4 补充 预备知识: 了解原型和原型链 了解this绑定 1 new 运算符简介 MDN文档:new 运算符创建 ...
- 前端面试手写代码——JS函数柯里化
目录 1 什么是函数柯里化 2 柯里化的作用和特点 2.1 参数复用 2.2 提前返回 2.3 延迟执行 3 封装通用柯里化工具函数 4 总结和补充 1 什么是函数柯里化 在计算机科学中,柯里化(Cu ...
- js面试-手写代码实现new操作符的功能
我们要搞清楚new操作符到底做了一些什么事情? 1.创建一个新的对象 2.将构造函数的作用域赋给新对象(因此this指向了这个新对象) 3.执行构造函数中的代码(为这个新对象添加属性) 4.返回新对象 ...
- 前端面试手写代码——JS数组去重
目录 1 测试用例 2 JS 数组去重4大类型 2.1 元素比较型 2.1.1 双层 for 循环逐一比较(es5常用) 2.1.2 排序相邻比较 2.2 查找元素位置型 2.2.1 indexOf ...
- 2019前端面试系列——JS高频手写代码题
实现 new 方法 /* * 1.创建一个空对象 * 2.链接到原型 * 3.绑定this值 * 4.返回新对象 */ // 第一种实现 function createNew() { let obj ...
- .netER的未来路,关于基础是否重要和应该自己手写代码吗?
http://www.cnblogs.com/onepiece_wang/p/5558341.html#!comments 引用"基础知识的学习,一开始可能是背书,但是在后续若干年的工作过程 ...
- java 从零开始手写 RPC (03) 如何实现客户端调用服务端?
说明 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 写完了客户端和服务端,那么如何实现客户端和服务端的 ...
- java 从零开始手写 RPC (04) -序列化
序列化 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何实 ...
随机推荐
- 50.纯 CSS 创作一个永动的牛顿摆
原文地址:https://segmentfault.com/a/1190000015270808#articleHeader0 感想: 动画效果 + ::before + 2D转换 HTML code ...
- 1. @ModelAttribute注解
添加@ModelAttribute修饰的方法,在每个目标方法调用前都会执行该方法. 一般情况下,在form表单修改的时,某项字段规定为不可更改,就需要使用该注解标注的方法,根据id的获取与否,来从数据 ...
- mybatis中xml文件的${}和#{}区别
之前的笔记:#{}相当于JDBC的? ${}是字符串连接符,如果入参为普通类型{}中只写value 在项目中要实现所有业务批量提交的功能,实现方式,把表名,表主键字段当做参数传递,在xml文件中全部使 ...
- chattr 改变文件、目录属性 (chmod、passwd等涉及文件修改的命令提示Operation not permitted)
与chmod这个命令相比,chmod只是改变文件的读写.执行权限,更底层的属性控制是由chattr来改变的. lsattr查看文件或目录属性 chattr命令的用法:chattr [ -RVf ] [ ...
- netty ChannelOption
项目中用到很多netty,配置了各种不同的ChannelOption优化项,不同的配置对于在高并发情况下的性能有不小的影响 首先看下全部项目,参考下这篇文章,虽然不全 https://www.cnbl ...
- ConcurrentModificationException原因及排除
如何产生,一边遍历一边修改元素,产生iter后再修改原结构,如下,无论是for中或iter都会产生ConcurrentModificationException import java.util.Ar ...
- Servlet开发
源地址:http://www.cnblogs.com/xdp-gacl/p/3760336.html 一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun ...
- English Conversation – Checking in at an airport
English Conversation – Checking in at an airport Share Tweet Share Tagged With: Ben Franklin Exercis ...
- 福州大学软件工程W班-助教总结
背景 福州大学软件工程W班,总人数46人,讲师汪老师. 前期期望 希望自己能够在课程当中起到引导作用,发挥助教最大的用处. 实际执行情况 第一个问题是自动化测试工具,该工具主要是用来测试程序WordC ...
- [jQ/PHP]再谈使用JS数组储值的运用(提交PHP处理)
--------------------------------------------------------------------------------------------------- ...