java面试相关问题
获取一个字符串中,任意子串出现次数。
- 准备
- 使用substring()获取每一次判断完剩下的字符串(会创建一堆字符串对象)
- 使用indexOf()从查询到后边的位置继续查询
- 使用子串进行切割(需要判断首尾有没有该字串,因为首尾不会切割出空串)
- 思路
- 用大圈套小圈,外层的大圈循环取几个字符(所有字符可以不取),内层的小圈每次取一个子串
- 用indexOf从开始找是否有匹配(-1则没有),有匹配的话则从匹配的位置往后数所取字符个数个位置继续找,直到到最后一个位置或-1
- 代码JAVA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16String originStr = "asdffdassdf";
for (int subStrLength = 1; subStrLength <= originStr.length(); subStrLength++) {
for (int subStrIndex = 0; subStrIndex + subStrLength <= originStr.length(); subStrIndex++) {
String subStr = originStr.substring(subStrIndex, subStrIndex + subStrLength);
int times = 0;
int index = 0;
while ((index = originStr.indexOf(subStr, index)) != -1) {
times++;
index += subStrLength;
if (index >= originStr.length()) {
break;
}
}
System.out.println(subStr + "出现的次数为" + times + "次");
}
}
获取两个字符串中最大相同的子串
- 思路
- 找到短的那个字符串
- 从短字符串中依次获取子串,查看是否包含在另一个字符串中(子串从长取到短)
- 代码JAVA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27String originStr_1 = "asdffdassdf";
String originStr_2 = "asfdsafd";
String shortStr = originStr_1.length() < originStr_2.length() ? originStr_1 : originStr_2;
String longStr = originStr_1.length() > originStr_2.length() ? originStr_1 : originStr_2;
Set<String> resultSet = new HashSet<>();
for (int subStrLength = 1; subStrLength <= shortStr.length(); subStrLength++) {
for (int subStrIndex = 0; subStrIndex + subStrLength <= shortStr.length(); subStrIndex++) {
String subStr = shortStr.substring(subStrIndex, subStrIndex + subStrLength);
if (longStr.contains(subStr)) {
resultSet.add(subStr);
}
}
}
int maxLength = 0;
for (String result: resultSet) {
if (result.length() > maxLength) {
maxLength = result.length();
}
}
for (String result: resultSet) {
if (result.length() == maxLength) {
System.out.println(result);
}
}
包装类的题
JAVA
1 | // jdk1.5后,自动装箱,如果装箱的是一个字节,该数据会被共享,不会新开辟空间 |
Integer对象是在Integer.IntegerCache创建的,-128到127的值已被缓存,新的Integer对象在此区间会被复用,不在此区间会在堆产生新对象。128不在此区间,所以产生了两个对象,hashCode值不同,所以需要使用intValue()来取到真实的值。Long对象也是如此。
Integer.valueOf会复用值
参考链接
使用LinkedList模拟堆栈(FILO)或者队列(FIFO)数据结构
需要自己定义一个容器,用LinkedList作为底层来描述
JAVA
1 | class Test { |
TreeSet传入字符串,以其长度排序
使用比较器进行排序,毕竟String重写他的compareTo方法不方便
JAVA
1 | class StringComparator implements Comparator<String> { |
获取字符串中,每一个字母出现的次数,要求打印结果是a(2)b(1)
- 思考
- 这里一个是字母,一个是次数,相当于字母与次数有映射关系。且关系数很多
- 当前容器中数组和Map集合有映射关系,可以做这件事。数组用于映射关系的一方为有序编号,Map用于映射关系的两方都没有有序编号
- 使用Map集合发现,保证唯一性的一方具备顺序,因而使用TreeMap集合
- 代码JAVA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31public static void main(String[] args) {
String tempStr = "fdgav123cbsacdfs";
String s = getCharsCount(tempStr);
System.out.println(s);
}
private String getCharsCount(String tempStr) {
Map<Character, Integer> charMap = new TreeMap<>();
for (char ch : tempStr.toCharArray()) {
if (ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z') {
Integer tempCount = charMap.get(ch);
int count = 1;
if (tempCount != null) {
count += tempCount;
}
charMap.put(ch, count);
}
}
return map2String(charMap);
}
private String map2String(Map<Character, Integer> charMap) {
StringBuilder sb = new StringBuilder();
Iterator<Map.Entry<Character, Integer>> charIter = charMap.entrySet().iterator();
while (charIter.hasNext()) {
Map.Entry<Character, Integer> charEntry = charIter.next();
sb.append(charEntry.getKey() + "(" + charEntry.getValue() + ")");
}
return sb.toString();
}
将数据插入到有序数据中仍有序
JAVA
1 | /** |
获取一个整数的十六进制
JAVA
1 | /** |
匿名内部类
JAVA
1 | /** |
键盘数据操作
JAVA
1 | // 获取用户键盘录入数据,并转为大写显示在控制台。用户输入over,结束键盘录入。 |
字符串截取指定长度字节
截取字符串指定长度字节,转为新字符串
GB2312,中文两个字节表示,都是开头为1,都是负数
GBK,因为字太多,中文两个字节中第一个为负数,可能第二个字节是正数。
例如(琲:bei)。但用这个程序判断一定没问题,只要最后有异常字符,就抛弃掉
JAVA
1 | public void cutTest() throws UnsupportedEncodingException { |
字符串截取指定长度字节2
截取字符串指定长度字节,转为新字符串
使用UTF-8编码,错误字符不输出
UTF-8中,中文都是三个字节,每个字节都是负数
英文都是正数,所以没有问题,前边的中文肯定是三个字节,没有问题
只有最后一个字,如果字节不够会出问题
JAVA
1 | public void cutTest() throws UnsupportedEncodingException { |
正则处理
QQ号校验
JAVA
1 | /** |
治疗口吃
JAVA
1 | // 治疗口吃 |
对IP地址排序
JAVA
1 | // 因为是字符串排序,所以正常排序和字符串排序结果不同.所以可以想到每个都补成3位,然后按照字符串顺序排序. |
对邮件地址校验
JAVA
1 | // 可以用于关键字屏蔽. |
爬虫
获取互联网中符合指定规则的数据.百度早期爬keywords,现在爬内容
JAVA
1 | // 爬取邮箱地址 |
- 本文标题:java面试相关问题
- 创建时间:2022-01-20 17:57:26
- 本文链接:https://blog.212490197.xyz/article/program/java/interview-questions/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论