首先面试官让自我介绍一下 然后问你做过的项目问你擅长的语言 你与其他同学相比的优点 等等 有两道笔试题:
1,0-9a-z表示36进制 写一个方法计算36进制的和
2,单链表进行反转。
附上我写的代码 仅供参考 java代码实现
1,36进制求和
package com.nice.demo.search;
import java.util.HashMap;
/**
* @author ljg
*
*/
public class Demo1 {
private static final String byte36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";// 36进制转十进制时使用 字母大写
private static final String[] arrBy36 = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z".split(",");//十进制转36进制使用
public static void main(String[] args) {
System.out.println(byte36ToTen("1b"));
//System.out.println(byteTenTo36(47));
//System.out.println(add("1b", "2x"));
}
public static String add(String s1,String s2){
//先转十进制然后相加在转36进制
int sum=byte36ToTen(s1)+byte36ToTen(s2);
return byteTenTo36(sum);
}
/** 将36进制转10进制*/
public static int byte36ToTen(String s1){
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < byte36.length(); i++) {
map.put(byte36.charAt(i), i);
}
int size = s1.length();
char []s=s1.toCharArray();
int num = 0;
for(int i = 0; i<size; i++) {
String char2str = String.valueOf(s1.charAt(i)).toUpperCase();//将字母转大写 并将char转字符串
num = (int) (map.get(char2str.charAt(0)) * Math.pow(36, size - i - 1) + num);//根据key 取map中对应的value即数字和字母对应的值 然后乘36的n次幂 再相加
}
/* for(int i=0;i<s.length;i++){
String char2str=String.valueOf(s[i]).toUpperCase();
map.get(char2str.charAt(0) * Math.pow(36,size-i-1));
}*/
return num;
}
/** 将十进制转36进制*/
public static String byteTenTo36(int num) {
StringBuffer sBuffer = new StringBuffer();
if(num == 0) {
sBuffer.append("0");
}
while(num > 0) {
sBuffer.append(arrBy36[num % 36]);//十进制数除36
num = num / 36;
}
return sBuffer.reverse().toString();//反转一下
}
}
2,单链表反转
package com.nice.demo.search;
import java.util.ArrayList;
import java.util.Collections;
/**
* 单链表反转
1 -> 2 -> 3
3 -> 2 -> 1
* @author ljg
*
*/
class ListNode {//单链表
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public class Demo2 {
public ListNode ReverseList(ListNode head) {
//健壮性判断
if(head==null)
return null;
if(head.next==null)
return head;
ArrayList<Integer> li=new ArrayList<Integer>();
li.add(head.val);
while(head.next!=null){//用list存储链表的值
head=head.next;
li.add(head.val);
}
Collections.reverse(li);//Collections 反转list集合 没有返回值
ListNode re=new ListNode(li.get(0));
ListNode flag =null;
flag=re;
for(int x=1;x<li.size();x++){//重新新建链表 即反转后的链表
ListNode rs=new ListNode(li.get(x));
flag.next=rs;
flag=rs;
}
return re;
}
}