资讯详情

常见的面试题:

1. 项目框架

例如:nginx服务器 tomcat db数据库

使用Java使用语言开发的多用户商城系统spring jpa velocity ehcache应用作为基础开发框架springsecurity结合框架管理系统的权限url重写技术,静态商城前台页面。

2. Android四大组件:

  • 1)Activity:一个应用程序,它是一个可以包含用户界面的组件,主要用于与用户互动。一个应用程序可以包含许多活动,如点击事件,通常会触发新的Activity。
    • 2)BroadcastReceiver:应用可以当电话呼入或数据网络可用时。广播接收器没有用户界面。然而,它们可以启动一个activity或service 响应他们收到的信息,或使用它们NotificationManager通知用户。通知可以通过多种方式吸引用户的注意力──闪光背灯、振动、播放声音等。一般来说,在状态栏上放置一个持久的图标,用户可以打开它并获取信息。
      • 3)ContentProvider:内容提供商主要用于实现不同应用程序之间的数据共享功能。它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,并确保被访问数据的安全。内容提供商只需要在多个应用程序之间共享数据。例如,地址簿数据被多个应用程序使用,并且必须存储在内容提供商中。
        • :是Android实现程序后台运行的解决方案非常重要。服务的运行不依赖于任何用户界面。即使程序被切换到后台,或者用户打开另一个应用程序,服务也可以保持正常运行,但服务不是在一个独立的过程中运行的,而是在创建服务时。当一个应用程序被杀死时,所有依赖该过程的服务都将停止运行(听音乐,然后退出音乐程序)
          • 1.内存管理错误:可能是可用内存太低,app所需内存超过设备限制,app跑不起来App crash。或内存泄漏,程序运行时间越长,占用的内存越大,最终使用所有内存,导致整个系统崩溃。或者使用未经授权的内存位置也可能导致App crash。

            2.程序逻辑错误:数组越界,堆栈溢出,并发操作,逻辑错误。

            app添加未经测试的新功能,调用已释放的指针,运行时会crash。

            3.设备兼容:由于设备的多样性,app不同的设备可能会有不同的性能。

            4.网络因素:可能是网速差,达不到app所需的快速响应时间会导致快速响应时间app crash。或者不同网络的切换也可能影响app的稳定性。

            两者操作机制不同:IOS采用的是沙箱运行机制,安卓使用虚拟机运行机制。

            两者后台制度不同:IOS中任何第三方程序不能在后台运行;安卓中的任何程序都可以在后台运行,直到没有内存。

            3、IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。

            NullPointerException -

            ClassCastException - 。数字类向数字类转换改写为数字类向字符串类转换

            IllegalArgumentException -

                    ArithmeticException -

                    ArrayStoreException -

                    IndexOutOfBoundsException -

                    NegativeArraySizeException - 创建一个大小为负数的数组错误异常

                    NumberFormatException -

                    SecurityException -

                    UnsupportedOperationException -

6.WEB测试重点

        1.功能测试:所实现的功能是否和需求一致(边界值,异常情况,页面加载失败);

        2.界面测试:界面是否美观,风格是否一致,文字内容是否正确;

        3.链接测试:打开链接速度是否合理;是否链接到正确的页面;是否有空白页面;

        4.性能测试:系统能支持多少用户同时在线;超过这些用户数,系统会给出什么样的反映(网页或者图片的加载速度);

        5.兼容性测试:项目在不 同操作系统,不同浏览器上功能是否能正常使用;

        6.安全性测试:用户的登录名和密码在传输过程中是否是加密传输的;用户长时间未操作页面,session会话是否会过期,要求用户重新登录;日志文件cookies里的用户名和密码是否是加密的;登录次数和登录设备是否有限制,是否支持一个账号多个设备登录;

7. Http 请求的常见类型

  1. Get 请求: 请求指定的页面信息,并返回实体主体。
  2. Head 请求:类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
  3. Post请求: 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立/或已有资源的修改。
  4. Put 请求: 从客户端向服务器传送的数据取代指定的文档的内容。
  5. Delete 请求: 请求服务器删除指定的页面。
  6. Connect 请求: HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
  7. Trace 请求: 回显服务器收到的请求,主要用于测试或诊断。
  8. Optons 请求: 允许客户端查看服务器的性能。
  9. Patche 请求: 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

  • Get不安全Post安全
  • Get有传输数据限制(最大255)post没有
  • Get在URl中,Post在消息主体中
  1. Get传输速度慢,Post传输速度快

9. http和https的区别

  1. HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议
  2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. ;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
  5. http访问不需要证书,https 访问时需要证书

  • 三次握手:

    1. 第一次握手:客户端向服务器发送访问数据的请求
    2. 第二次握手:服务器向客户端反馈信息表示已收到请求,稍后发送数据
    3. 第三次握手:客户端确认收到服务器的反馈信息,并做好接受准备
  • 四次挥手:

    1. 第一次挥手:先由客户端向服务器端发送一个FIN,请求关闭数据传输。
    2. 第二次挥手:当服务器接收到客户端的FIN时,向客户端发送一个ACK,其中ack的值等于FIN+SEQ
    3. 第三次挥手:服务器向客户端发送一个FIN,告诉客户端应用程序关闭。
    4. 第四次挥手:当客户端收到服务器端的FIN是,回复一个ACK给服务器端。其中ack的值等于FIN+SEQ

11. http响应码:

        1XXX:信息响应类,表示接收到请求并进行处理

        2XXX:代表成功,表示动作被接收,理解。

        3XXX:重定向响应类,为了完成指定动作,必须进一步处理。

        4XXX:客户端错误,客户端请求语法错误或者不能正确执行。              

        5XXX:服务器错误,客户端请求方法和参数没错,服务端超时,服务器不能执行一个正确的请求(查看服务端日志,应用程序抛出来异常)。

12. Cookie,session,token区别及作用?

  1. Cookie是客户端技术,采用保存用户数据
  2. Session是服务端,由服务端生成的sessionid(标识)标识服务器端对应的用户数据,返回给客户端。

        如果是通过cookie+session鉴权的话,那么sessionid保存到客户端的cookie中,后面的请求携带sessionid。

        3. Token由服务器端生成的,令牌(通行证)服务器会返回给客户端,客户端发起的其他的请求就会携带这个token发送给服务器。

13.  多表查询  

子查询:子查询需要放在()中先执行子查询,将子查询的结果作为父查询的一部分

SELECT id,name,sex,date FROM tb_demo068 WHERE id in(SELECT id FROM tb_demo068 WHERE id='$_POST[test]')

内连接:也被称为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取了两个表中所有相匹配的数据,舍弃了不匹配的数据

外连接:除了显示符合条件的记录外,还显示表中的记录

左连接(Left Join):select * from tbl1 Left Join tbl2 where tbl1.ID = tbl2.ID

        左连接后的检索结果是显示tbl1的所有数据和tbl2中满足where 条件的数据。简言之 Left Join影响到的是右边的表

右连接(Right Join):select * from tbl1 Right Join tbl2 where tbl1.ID = tbl2.ID

        检索结果是tbl2的所有数据和tbl1中满足where 条件的数据。简言之 Right Join影响到的是左边的表

全外连接(full join)

          全外连接是在两表进行自然连接,只把左表和右表要舍弃的都保留在结果集中,相对应的列上填null。

 Select …… from 表1 full join 表2 on 表1.C=表2.C

14. 常用的adb 命令:

  •  
    db devices 显示系统中全部设备
    adb start-server 开启ADB服务
    adb kill-server 停止ADB服务
    adb connect +IP地址 连接设备(在connect后更换成想要链接的IP地址即可)
    adb disconnect 断开设备连接
    adb logcat 查看日志
    adb logcat -c #清除log 缓存
    adb shell wm size 查看屏幕分辨率
    adb get-serialno 获取手机的序列号
    adb shell cat /proc/cpuinfo 显示手机的cpu信息
    adb install xxx.apk  安装apk
    adb install  -r  xxx.apk  覆盖安装
    adb uninstall + 包名:  卸载 apk 程序
    adb uninstall -k 包名: 卸载但保留数据和缓存
    adb logcat v:* > 本地路径:抓取 log 到本地文件 
    adb shell:进入 Android 内核
    adb shell pm list packages #列出手机装的所有app 的包名
    adb shell pm list packages -3 #列出除了系统应用的第三方应用包名
    adb shell pm clear包名 #清除应用数据与缓存
    adb push:推送本地文件到手机
    adb pull:拉取手机文件到本地 
    adb shell getprop ro.build.version.release #查看Android 系统版本
    adb shell top -s 10 #查看占用内存前10 的app
    top -m 5 -n 1 | grep 包名 #查看cpu信息(-n刷新次数,-d刷新时间间隔,-m显示数量,-t显示进程名称,-s指定行排序)
    如何用adb启动虚拟机得app:  adb shell pm start -n  包名的activity
    app的日志,可以用logcat抓取adb logcat | find "com.xxx.xxx" >d:\hello.txt
    格式化输出:adb logcat -v time *:E | find "com.xxx.xxx" >d:\hello.txt

    15. 常用的linux命令:(linux机器常用在布置换机查看日志)

  • #登录机器:

    ssh v_wangzhenyu02@relay-ext.baidu.com

    ssh bae@gzns-feed-wise-gr56.gzns  (机器名称)          

    ssh work@   机器(可以修改)

    matrix_jail    机器名

  1. 查看进程:ps aux  (或者top 包括CPU、内存等系统资源占用情况,默认情况下每三秒刷新一次
  2. Tasks(系统任务)信息:total,总进程数)
  3. 查看磁盘: df  -h
  4. 查看文件大小:  du  -sh *    ( du  -sh  文件名)
  5. Int 0 关机  
  6. Poweroff   关机  shutdown -h now现在关机
  7. Int 6 重启  reboot
  8. 进入“/home”目录    cd /home
  9. 进入个人的主目录: cd
  10. 显示当前路径: pwd
  11. 查看目录中的文件:ls
  12. 显示文件和目录的详细资料: ls -l
  13. 显示隐藏文件: ls -a
  14. 创建一个叫做dir1的目录: mkdir  dir1
  15. mkdir dir1 dir2 同时创建两个目录
  16. 删除两个目录: rm -rf  dir1  dir2
  17. mv dir1 new_dir 重命名/移动 一个目录
  18. 重命名/移动一个目录:mv dir1 new_dir (mv +移动文件名+要移动的文件目录/新的名字)
  19. 复制一个文件(把file1 的内容复制到file2中) cp file1  file2
  20. 复制一个目录下的所有文件到当前工作目录: cp  dir/*
  21. 将压缩包释放到 /tmp 目录下: tar -zxvf archive.tar  /tmp

如何查看日志?         tail -f 日志文件名

如果日志在更新,如何实时查看 tail -f /var/log/messages

查看今天的日志并过滤关键字: tail -f *2022-06-15* | grep 关键字

如何查找a.log 日志文件的error字符串:

查找指定时间段的日志:sed -n '/2017-06-04 14:06:27/,/2017-06-04 14:06:34/p'  test.log

输出最后一次匹配grep条件的数据行的前后各10行:(借助tail命令取最后几行)

grep  -n  -C10  'R0619'  caps-biz.txt | tail -n 21 | less(借助less命令的/pattern可以高亮搜索词)

从根目录开始进入文件系统搜索文件名称为file1的文件   find / -name file1

在目录开始搜索在过去100天内未被使用过的文件:find / -type f -atime +100

从第一行开始查看文件的内容(file1为文件名): cat file1

显示网络接口信息: ifconfig -a

启动eth0网口: ifup etho

关闭eth0 网口: ifdown  eth0

1. 权限:

设置目录的所有人(u),群组(g)以及 其它人(o) 以读(r   4)、写(w     2)和执行(x     1)的权限:  chmod ugo+rwx directory1(directry1代表目录的所有者)

2. 设置定时任务

/song/applogs目录下有脚本 clean.sh 现在要添加到计划任务重,每天22:30分执行   crontab -e 33 22 ***  /song/applogs/clean.sh

分、时、日、月、周五种,操作符有

* 取值范围内的所有数字

/ 每过多少个数字

- 从X到Z

,散列数字

每月1、10、22日的4 : 45重启smb

45 4 1,10,22 * * /etc/init.d/smb restart

find_element(By.ID,"kw")                   #根据id定位
find_element(By.NAME,"wd")                 #根据name定位
find_element(By.CLASS_NAME,"s_ipt")        #根据class_name进行定位
find_element(By.TAG_NAME,"input")          #根据tag_name标题进行匹配
find_element(By.LINK_TEXT,u"新闻")         #根据link_text文字匹配
find_element(By.PARTIAL_LINK_TEXT,"新")          #根据partial_link_text文本模糊匹配
find_element(By.XPATH,"//*[@class='bg s_btn']"   #根据xpath进行匹配
aaa=find_element(By.CSS_SELECTOR,"span.bg ")     #根据css_selector进行匹配
print(aaa.text)                        #获取文本信息


分步骤定位---------- 先匹配到外层元素,在根据外层元素匹配到里边的子元素

.send_keys                                # 输入
.click()                                  # 点击
.clear()                                  # 清除内容
time.sleep(2)                             # 强制等等
webdriver.implicitly_wait(10)             # 隐式等待
driver.set_window_size(600,600)           # 设置浏览器 为 600乘以600 像素   
driver.maximize_window()                  # 设置全屏显示 
driver.minimize_window()                  # 设置浏览器最小化
driver.back()                             # 控制浏览器后退
driver.forward()                          # 控制浏览器前进
driver.refresh()                          # 控制浏览器刷新
ele.screenshot("./ele.png")                # 截屏,截取单个元素
driver.get_screenshot_as_file("./all.png")     #截取全屏

##获取元素的属性值
 ele = webdriver.find_element_by_id("su")
print(ele.get_attribute("type"))



单元素定位:find_element_by_XXX() 或 find_element(By.XXX, ‘XXX’)

返回值为定位到的元素对象



多元素定位:find_elements_by_XXX() 或 find_elements(By.XXX, ‘XXX’)

返回值为一个列表,列表中为定位到的元素对象,

列表中元素的索引按照定位到的顺序从零开始依次递增。

定位不到元素,返回空列表

17.性能测试

1、内存:使用adb shell脚本进行测试,查看Log数据。adb shell dump meminfo

2、CPU:使用adb shell脚本进行测试,查看Log数据。adb shell top

注意:程序持续运行及操作过程中,内存不能一直增加,不然系统会自动kill掉该进程。

3、流量监控:可以借用网易的开源工具:Emmagee

4、电量监控:和竞品做对比测试,同一机型的测试机在不同时间,不同网络条件,不同功能使用的情况下分别测试电量使用情况。

5、启动速度和滑动、界面切换速度:编写测试代码(Android Instrumentation),打桩到源码中运行后通过log数据进行分析。

  1. 点击选择被测应用,选中自己要测的app
  2. 选择关注的测试点,cup、pnet(流量)、内存(pss)等,如果没有启动可以,点击lunch进行启动
  3. 进入参数标签,点击编辑,拖拽要时时监控的性能指标到悬浮窗展示的参数这,如要监控cup(cpu)、内存(pss)、流量(pnet)(以后在运行目标app时可实时看到这些参数变化)
  4. 拖拽完成后,点击完成后返回到参数标签
  5. 在参数标签继续勾选需要监控的参数,只是不实时看到而已。如电量
  6. 打开要测试的app,点击红色圆点启动监控,开始测试
  7. 测试完成后,点击红色的停止按钮
  8. 打开gt界面,查看各个性能指标数据。单击性能指标,可以查看该性能指标的详情。如点击cpu
  9. 批量保存监控的数据:单击保存,将勾选的性能指标数据保存到该文件夹,点击ok

a.查看内存pss判断有无内存泄漏(使用完后没有释放内存)

Native/Dalvik :主要看这项,它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。

Total:该应用实时占用的真正内存

b.查看电量:一个系统走一遍基础功能耗电不应超过20%。在gt的插件标签里有耗电测试。这里已知对个别手机比较准确,可以考虑使用其他的工具来测耗电量

c.查看流量pnet:流量应稳步或较小的递增,如果一下变大,就要查看是哪费流量了进行优化

d.cpu查看

标签: aux11变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台