模拟面试题四
1.说一下hashRouter和historyRouter的区别
history和hash都是利用浏览器的两种实现前端路由,history是利用浏览器历史记录栈的API实现,hash是监听location对象hash值变化来实现。
使用hash创建的页面不是很美观,url路径中有#,#后面的值不会包含在http中,即不会发送给服务器,history没有#。
hashRouter的兼容性很好,history的兼容性略差。
在项目上线时history需要与后端人员进行配合,否则刷新会出现404现象。hash不会。
HashRouter原理:通过window.onhashchange方法获取新的URL中的hash值,再做进一步处理
HistoryRouter原理:通过history.pushState做页面跳转不会触发页面刷新,通过window.onpopstate监听浏览器的前进和后退。
需要兼容低版本的浏览器时,建议使用hash模式。
需要添加任意类型数据到记录时,可以使用history模式。
2.常见GDB命令
GDB是在linux/unix操作系统下的命令行窗口
(gdb)help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h
(gdb)run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r
(gdb)start:单步执行,运行程序,停在第一执行语句
(gdb)list:查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数),简写l
3.说一下浮动(float)?
浮动是最早用来解决文字围绕图片问题的,浮动会使某个元素脱离正常的文挡流,漂浮在标准流之上,和标准流不在一个层级。
一般块级元素会独占一行,若想实现多个块级元素在一行,可以使用float,但float有好也有坏,当在一个盒子里写文档时,一般是不固定盒子高度的,因为有的内容多,有的少,但是如果在盒子中加入两个子盒子,且使用了float,那么父盒子的高度会变为0(float之后,子盒子脱离了文档流,在父盒子的上方),称为高度塌陷。面对这一问题,可以使用以下几种方法解决:
隔墙法:在父盒子中加一个子盒子,直接写入clear:both即可。
overflow:hidden
before和after伪元素
.box::after{
content:'';
display:none;
height:0;
visibility:hidden;
clear:both;
}
4.IP协议的首部结构
首部协议一共是20个字节(固定)
第一个4字节: 版本号;首部长度; 服务类型;总长度;
第二个4字节:标识;标志;片偏移;
第三个4字节:生存时间;协议;校验和;
第四个4字节:源ip地址;
第五个4字节:目的ip地址;
5.字符串插入,删除,替换编程题
import java.util.*;
public class Solution {
/**
* min edit cost
* @param str1 string字符串 the string
* @param str2 string字符串 the string
* @param ic int整型 insert cost
* @param dc int整型 delete cost
* @param rc int整型 replace cost
* @return int整型
*/
public int minEditCost (String str1, String str2, int ic, int dc, int rc) {
// 动态规划
int len1 = str1.length();
int len2 = str2.length();
int dp[][] = new int[len1 + 1][len2 + 1] ;
for (int i = 0; i <= len1; i++) {
for (int j = 0; j <= len2; j++) {
if (i == 0) dp[i][j] = j * ic;
else if (j == 0) dp[i][j] = i * dc;
else if (str1.charAt(i - 1) - 'a' == str2.charAt(j - 1) - 'a') dp[i][j] = dp[i -
1][j - 1];
else dp[i][j] = Math.min(dp[i - 1][j] + dc, Math.min(dp[i - 1][j - 1] + rc,
dp[i][j - 1] + ic));
}
}
return dp[len1][len2];
}
}
6.部分数字反转编程题
直接进行while循环,如果num在int内即进行反转,否则返回0.
import java.util.*;
public class Solution {
/**
*
* @param x int整型
* @return int整型
*/
public int reverse(int x) {
int res = 0;
while(x != 0) {
int t = x % 10;
int newRes = res * 10 + t;
if((newRes - t) / 10 != res) return 0;
res = newRes;
x /= 10;
}
return res;
}
}