前端面试--模拟面试(四)

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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值