乐信圣文笔试题
乐信圣文笔试题
题型:牛客笔试链接,8道问答题
1、5进制的1023转换为10进制是多少?转换为7进制是多少?
计算过程:
1023(5) => 15^3 + 0 + 25^1 + 3*5^0 = 125+10+3= 138(10)
138(10) => 138/7= 19...5 19/7 = 2....5 2/7=0.....2
255(7) = 51+57+2*49= 40+98= 138(10)
答:5进制的1023转换为10进制是138。转换为7进制是255。
2、比较四种排序算法的时间复杂度,空间复杂度,稳定性,适用场景
不会,胡写的。
3、进程和线程的概念?它们的区别有哪些?
进程:是操作系统分配资源的最小单位。进程可以类比为工厂,其中包含地址空间和资源和执行任务的线程。
线程:是操作系统中执行CPU调度的最小单位。线程可以类比为工人,它可以使用进程内的资源和地址空间,负责执行进程分配的任务。
区别:
1、进程是完整的一套程序,包含自己的地址空间和资源。而线程是进程的一部分,一个进程可以有多个线程,并且这些线程共享进程的相关资源。
2、进程间隔离性强,并发安全,进程A崩溃不会影响进程B。而线程由于共享进程资源,所以进程A内的线程a崩溃会导致线程b也崩溃,所以存在并发不安全的问题。
3、进程间通信需要依赖管道、信号量、信号、消息队列、共享内存等机制。而线程间通信由于共享进程资源,所以较为容易。
4、内存泄漏和垃圾回收的概念?常用垃圾回收方法有哪些?
内存泄漏:
内存泄漏是指当java中某些对象或资源已不再被使用,但始终不被回收,造成资源持续消耗浪费的现象。
垃圾回收:
垃圾回收是指java中当某些对象、变量等资源不再被使用时,由垃圾回收器自动地对相关资源进行回收的过程。
常用垃圾回收方法:
1、标记-清除算法
2、标记-整理算法
3、分代回收算法
4、复制算法
5、分辨率为1024x1024的RGBA32格式图片的内存占用多少字节?
不会,胡写的。
6、基于int数组实现动态扩容循环队列
题目给定模块,可以根据需要添加变量和方法。
public class CircularQueue {
private int[] _data;
public void Enqueue(int value) {
//todo
}
public void Dequeue(int value) {
//todo
}
不太会,我的解答:
public class CircularQueue {
// 基于int数组实现的动态扩容循环队列
private int[] _data;
private size;
// 当前队列包含元素个数
public void Enqueue(int value) {
if( size == _data.length ) {
// 队列已满
int[] new_data = new int[ _data.length*2 ];
for( int i=0; i < _data.length; i++ ) {
new_data[i] = _data[i];
}
new_data[ _data.length ] = value;
_data = new_data;
} else {
// 队列未满
_data[ size ] = value;
}
}
public void Dequeue(int value) {
for( int i=1; _data[ i ] != null; i++ ) {
_data[i-1] = _data[i];
}
}
}
7、判断密码是否合法
题目(1):密钥合法要求:
1、仅包含小写字母,大写字母,数字。
2、至少包含两种字符。
3、最小长度为8。
4、最大长度为16。
编写代码,判断密钥是否合法
题目(2):给了三个测试用例示例,编写测试用例
我的答案如下
1、代码编写(java语言)
public class Main {
Map<String,Boolean> map = new HashMap<>();
public static void main( String[] args ) {
Scanner in = new Scanner( System.in);
String password = in.next();
int cnt = 0;
// 记录出现了几种字符
int len = password.length();
if( len < 8 || len > 16 ) {
// 密码长度判断
System.out.println( "false" );
return;
}
for( int i=0; i < len ; i++ ) {
// 字符合法判断
if( isValid( password.charAt( i ) ) == false ) {
// 如果当前字符不合法
System.out.println( "false" );
return;
}
}
if( map.get( "a" ) == true ) {
cnt++;
}
if( map.get( "A" ) == true ) {
cnt++;
}
if( map.get( "0" ) == true ) {
cnt++;
}
if( cnt < 2 ) {
// 字符种类数量判断
System.out.println( "false" );
return ;
}
return;
}
public boolean isValid( char c ) {
if( ( c -'a' >= 0 && c-'z' <= 0 ) ) {
map.put( "a", true );
return true;
} else if( ( c -'A' >= 0 && c-'Z' <= 0 ) ) {
map.put( "A", true );
return true;
} else if( ( c -'0' >= 0 && c-'9' <= 0 ) ) { map.put( "0", true );
return true;
}
return false;
}
}
2、测试用例
{ input : "bcaD891123", expected : true }, // 满足三种
{ input : "BCDV654321", expected : true }, // 大写+数字
{ input : "12344321aa", expected : true }, // 小写+数字
{ input : "aabbccddee", expected : false}, // 仅有小写
{ input : "AABBCCDDEE", expected : false}, // 仅有大写
{ input : "1234567890", expected : false}, // 仅有数字
{ input : "1aA", expected : false}, // 长度小于8
{ input : "1aA1111111111111111111", expected : false}, // 长度大于16
8、扑克牌包含13*4张牌。洗牌,每次从牌堆顶抽牌,按照同种花色K->A(K在最上,A在最下)的顺序排列成4列。假设已洗好牌,编写代码将牌堆按照要求完成排列
完全不会。
#笔试#