筆試題匯總,含參考答案(持續更新中。。。)


說明:以下大部分都是測試朋友遇到的筆試題。 

自問自答,自娛自樂,機會只留給有准備的人

技術術語

筆試或者面試的時候,經常被問一些概念,比如同步、異步、阻塞、非阻塞等等,是不是很懵逼?

https://www.cnblogs.com/uncleyong/p/11158806.html

 

linux命令及shell

批量刪除/home/test/dist下的所有進程

參考答案:ps -ef | grep '/home/test/dist' | awk '{print $2}' | xargs kill -9

 

對~/test目錄下的所有文件進行排序,且2018開頭的,在文件名后加上_bak

參考答案:https://gitee.com/UncleYong/exercise/blob/master/modifyFileName.sh

 

數據結構

二叉樹遍歷:左序、中序、右序

鏈表操作

 

算法

冒泡排序

二分查找

快速排序

插入

單向鏈表

鏈表反轉

 

 

編程(python、java) 

 

 

 

 

 

下面結果分別是?

public class Test {
    static String str;
    public static void main(String[] args)
    {
        static String str;
        System.out.println(str);
    }
}

  

public class Test {
    static String str;
    public static void main(String[] args)
    {
        String str;
        System.out.println(str);
    }
}

  

public class Test {
    static String str;
    public static void main(String[] args)
    {
        System.out.println(str);
    }
}

 

類中,jvm給成員變量賦了初始值,不會給局部變量賦初始值,局部變量沒有默認值

 

java筆試題:實例屬性、靜態屬性、實例方法、靜態方法、構造方法、代碼塊、靜態代碼塊,他們的執行順序是?

參考:https://www.cnblogs.com/uncleyong/p/12545986.html

 

【java筆試題】輸入帶*字符串,把*左移輸出,其他字母按原順序輸出,例如:輸入“as*c*gkl**o*p*h”,輸出******ascgkloph

文末:https://www.cnblogs.com/uncleyong/p/9729189.html

 

對字符串“2kd4-1124*2|^2sdAmZ%fkMcv”排序,並返回符合要求格式的元組數據。

排序規則:按照ASCII碼由大到小排序;

返回數據格式:((最大字符,最小字符),(次大字符,次小字符),,,)

參考答案:https://www.cnblogs.com/uncleyong/p/7103947.html

 

倒置輸入的整數

參考答案:https://www.cnblogs.com/uncleyong/p/6239433.html

 

結構體存儲學生學號、姓名、總分,動態內存分配增加信息,然后排序

參考答案:https://www.cnblogs.com/uncleyong/p/6870252.html

 

數組中有一個數字出現的次數超過數組長度的一半

參考答案:https://www.cnblogs.com/uncleyong/p/6914207.html


將一個字符串中的空格替換成“%20”

參考答案:https://www.cnblogs.com/uncleyong/p/6898204.html


青蛙跳台階

參考答案:https://www.cnblogs.com/uncleyong/p/7082784.html


找到第一個只出現一次的字符並返回它的位置

參考答案:https://www.cnblogs.com/uncleyong/p/7082893.html

 

python文件操作https://www.cnblogs.com/uncleyong/p/11309729.html

參考答案: 

 

面向對象小測試

第一部分:https://www.cnblogs.com/uncleyong/p/11283647.html

第二部分:https://www.cnblogs.com/uncleyong/p/11289033.html

參考答案:

 

封裝一個函數:生成n個密碼,要求包含大小寫字母,數字,並對密碼進行加鹽加密,默認鹽值%#$123

參考答案:https://gitee.com/UncleYong/exercise/blob/master/passwords.py

 

不用中間變量,交換兩個變量(同時為數字 or 同時為字符串)的值

參考答案: https://gitee.com/UncleYong/exercise/blob/master/exchageValu.py

 

運行結果

def fun(arg):
    print(id(arg))
    arg = ['hello']
    print(id(arg))

var = ['ok']
print('var: ',id(var))
fun(var)
print(var)

  

 

【筆試題】局部變量和全局變量

 https://www.cnblogs.com/uncleyong/p/11230413.html

 參考答案: 自己運行,總結規律。

 

下面代碼的作用是移除奇數,運行結果是?為什么?

li = [1,1,2,3,4,5,6,7,8,9]
for i in li:
    if i%2!=0:
        li.remove(i)
print(li)

參考答案:[1, 2, 4, 6, 8]

原因:for循環列表的下標,第一次循環,第一個值被移除,列表可變,列表長度減1,同時其它元素下標也變,所以,原來下標為1的第二個元素1,其下標變成0了,此時列表為[1,2,3,4,5,6,7,8,9];第二次循環,找到下標為1的元素2,…

 

在原代碼基礎上,如何修改為理想中的答案[2,4,6,8]?(必須保留remove)

方式一(逼格低):

li = [1,1,2,3,4,5,6,7,8,9]
li2 = [1,1,2,3,4,5,6,7,8,9]

for i in li2:
    if i%2!=0:
        li.remove(i)
print(li)

方式二(常規思路):

li = [1,1,2,3,4,5,6,7,8,9]
li2 = li.copy()

for i in li2:
    if i%2!=0:
        li.remove(i)
print(li)

 

方案三(高逼格): from:杭州-null-失業老阿姨

li = [1,1,2,3,4,5,6,7,8,9]

for i in li[:]:
    if i%2!=0:
        li.remove(i)
print(li)

其實,更簡單的方案是列表生成式

li = list(filter(lambda x:x%2==0, li))

或者

li = [i for i in li if i%2==0]

  

 

一行代碼實現1-100奇數求和(5種方案)

 參考答案:https://gitee.com/UncleYong/exercise/blob/master/sumOfOddNumber.py

 

下面的輸出結果是?

答案是:[6, 6, 6, 6]

詳細解釋,參考:https://www.cnblogs.com/uncleyong/p/11208987.html

def multipliers():
    return [lambda x : i * x for i in range(4)]
print([m(2) for m in multipliers()])  

等價於

def func():
    fun_list = []
    for i in range(4):
        def foo(x):
            return x*i
        fun_list.append(foo)
    print(fun_list)
    return fun_list

res_list = []
for m in func():
    res_list.append(m(2))
print(res_list)

  

 

 遞歸求1-100質數的和

參考答案:https://gitee.com/UncleYong/exercise/blob/master/RecursiveSumOfPrimeNumber.py

非遞歸參考答案:

print([x for x in range(2, 101) if all([x%y!=0 for y in range(2, x)])])
print(sum([x for x in range(2, 101) if all([x%y!=0 for y in range(2, x)])]))

 

遞歸求奇數和

def test(n):
    if n==1:
        return 1

    if n%2==1:
        return (n + test(n-2))
    else:
        return test(n-1)

print(test(100))

  

def test(n):
    if n==1:
        return 1

    elif n%2==1:
        return (n + test(n-2))
    else:
        return test(n-1)

print(test(100))

  

 

 

【20190715】要求:封裝一個方法,實現文件的讀、寫、改

 參考答案:https://gitee.com/UncleYong/exercise/blob/master/filetool.py

 

 

【20190712】要求:根據輸入的數字n,生成n注大樂透號碼,大樂透規則請自行百度

 “35選5加12選2”玩法屬於雙區選號大樂透,玩法簡單易懂,彩民們在購買“35選5加12選2”時,可以從01-35共35個號碼中,選取5個號碼為前區號碼,並從01-12共12個號碼中選取2個號碼為后區號碼,組合為一注進行單式投注。

參考答案:https://gitee.com/UncleYong/exercise/blob/master/lottery_ticket.py

 

【20190711】要求:一行代碼,求1-100之間大於10且小於90的數字的平均值

 參考答案:https://gitee.com/UncleYong/exercise/blob/master/oneLineCodeSumBetween11And89.py

 

【20190710】要求:不用sum,最多一個+號,一行代碼(不包含導包)實現1到10的累加

備注:只有python實現了一行代碼

參考答案(python版):https://gitee.com/UncleYong/exercise/blob/master/MySum.py

參考答案(java版):https://gitee.com/UncleYong/exercise/blob/master/MySum.java

參考答案(shell版):https://gitee.com/UncleYong/exercise/blob/master/MySum.sh  


要求:提取出只包含數字及字母,且以字母開頭的最長的子字符串,打印出子字符串及其長度,如果有多個,都要打印出來

testStr = '#ab1k23$%&()*+,-./:;<=ab12w4>?666qzcsbj@[4f]^{1aaa12|}'

比如上面字符串提取結果是:

子字符串ab1k23,長度為6
子字符串ab12w4,長度為6

參考答案(正則):https://gitee.com/UncleYong/exercise/blob/master/findMaxSubString.py

參考答案(非正則):https://gitee.com/UncleYong/exercise/blob/master/findMaxSubString2.py

 

要求:java實現一個類,打印昨天的當前時刻

參考答案:

  https://gitee.com/UncleYong/exercise/blob/master/LastDayTime.java

  https://gitee.com/UncleYong/exercise/blob/master/TestLastDayTime.java  

 

用java編程:輸入字符串(中間有若干個空格隔開),要求:以空格隔開,刪除空格兩邊字符串的重復字符再輸出,例:aabbbcc ddaaaffggbb變為abc dafgb(注意:輸入的空格得保留下來)

方法一:正則

// 用java編程:輸入字符串(中間有若干個空格隔開),要求:以空格隔開,刪除空格兩邊字符串的重復字符再輸出,
// 例:aabbbcc ddaaaffggbb變為abc dafgb(注意:輸入的空格得保留下來)

public class Test
{
    public static void main(String[] args){
//        String s = "aabbbcc ddaaaffggbb";
//        String s = "aaabbbccckkkdaaa";
        System.out.print("請輸入字符串:");
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        System.out.println("你輸入的原字符串:" + s);
        Test test = new Test();
        String res = test.rmRepeated(s);
        System.out.println("去重之后的字符串:" + res);
    }

    String rmRepeated(String s){
        String str = "";
        for(int i = 0; i<s.length();i++){
            if (str.length()!=0){
                if (str.charAt(str.length()-1)!=s.charAt(i)){
                    str +=s.charAt(i);
                }
                else{
                    String ss = Character.toString(s.charAt(i));
                    Pattern pattern = Pattern.compile("[\\s]");  // 字母:Pattern.compile("[a-zA-Z]"); 數字:Pattern.compile("[0-9]");
                    Matcher matcher = pattern.matcher(ss);
                    if(matcher.find()){
                        str +=s.charAt(i);
                    }
                }
            }
            else{
                str +=s.charAt(i);
            }
        }
        return str;
    }
}

 

方法二:

public class Test
{
    public static void main(String[] args){
//        String s = "aabbbcc ddaaaffggbb";
//        String s = "aaabbbccckkkdaaa";
        System.out.print("請輸入字符串:");
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        System.out.println("你輸入的原字符串:" + s);
        Test test = new Test();
        String res = test.rmRepeated(s);
        System.out.println("去重之后的字符串:" + res);
    }

    String rmRepeated(String s){
        String str = "";
        for(int i = 0; i<s.length();i++){
            if (str.length()!=0){
                if (str.charAt(str.length()-1)!=s.charAt(i)){
                    str +=s.charAt(i);
                }
                else{
                    String ss = Character.toString(s.charAt(i));  // Sring ss = Sring.valueOf(s.charAt(i));
                    if(ss.equals(" ")){
                        str +=s.charAt(i);
                    }
                }
            }
            else{
                str +=s.charAt(i);
            }
        }
        return str;
    }
}

 

 

【20190709】要求:從左到右,每三位進行反轉,例如,輸入123456789,輸出321654987,如果輸入1234567890,輸出3216549870

參考答案:https://gitee.com/UncleYong/exercise/blob/master/new_str.py 

 

要求:假如你要為一個應用搞限時促銷,生成激活碼(或者優惠券)請用 Python 如何生成 200 個激活碼(或者優惠券)
激活碼的格式為asqE-9xRK-lqWU-QkMT
要求1: 使用隨機生成時,生成數字概率為1/5,大寫字母和小寫字母概率各為2/5
要求2: 這200個激活碼,他們各不相同 

參考答案:https://gitee.com/UncleYong/exercise/blob/master/coupon_gen.py 

 

數據庫操作(增、刪、改、查)

1.一條語句是否使用了索引
2.A,B,C三個字段都建立了索引,組合查詢AB,AC,BC哪種不會使用索引
3.寫一個查詢和更新SQL
4.事物的理解
5.事物的特性

 

以mysql為例,單表插入1萬條數據,建表的語句:create table test(id int, name varchar(20));

要求:至少兩種方案

參考答案一(存儲過程,不傳參&傳參):https://gitee.com/UncleYong/exercise/blob/master/addDatas.sql

參考答案二(py):https://www.cnblogs.com/uncleyong/p/10938993.html

 

 

一個sql題,查詢出grade不一樣的人的所有記錄

表stu

 

 

參考答案(基於mysql):

方式一:

select * from stu 
	where name in (
		select tt.name from (
			Select t.code,t.name,t.grade  from stu t  group by t.code,t.name,t.grade having count(*)=1) tt);

方式二:

select distinct  s.* from stu s  join(
		select t.code,t.name,t.grade 
		from stu t 
		group by t.code,t.name,t.grade 
		having count(*)=1) s2
where  s.code = s2.code and s.name=s2.name;

 

方式三:(oracle中下面方式寫會報錯)

 

 

 

 

 

 

 

 

jmeter:
1.怎么做參數化
2.前置處理器和后置處理器的區別
3.bean shell postprocessor怎么這種變量進行參數化
4.聚合報告可以查看到哪些結果

 

Linux:
1.常用命令
2.查看日志 包含訂單信息
3.查看一個java進程

性能測試:
1.性能測試關注哪些指標
2.性能測試時cpu使用率過高會怎么處理

java:
1.StringBuffer和StringBuilder的區別
2.LinkedLIst和ArrayList的區別
3.重載和重寫的區別
4.重載和重寫哪個是在一個類里
5.怎么查看現場阻塞
6.jvm調優會調整哪些參數
7.jdk提供的日志工具
8.MQ是否了解,什么場景使用,kafka
9.什么情況下會fullgc

接口:
1.一個下單接口設計測試用例


自動化:
說一說自動化測試框架,里面包含哪些東西

 

部分圖片來源於網絡,如有侵權,請聯系刪除。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM