自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 收藏
  • 关注

原创 工程项目和系统模块设计

进行需求分析 划分系统模块概要设计 确定各个模块的对象种类 对象功能 根据对象设计类 根据对象的功能设计API模块化编码和测试

2021-03-31 16:48:03 204

原创 csapp 2.61习题

一、题目描述二、分析求解运算优先级 ~>!>算术>移位>&>|A. !~xB. !xC. !~(x|(~0xff))D. !(x>>(sizeof(int)-1<<3)) 本质是用!0=1 !非零=0

2021-03-16 21:02:54 518

原创 mac virtualbox ubuntu vscode includePath问题

google尝试了n篇折腾了一下午+一晚上 无果依然决然卸载ubuntu重装20.4LTS 重新配置环境 一切恢复正常

2021-03-15 10:52:35 212

原创 mac virtualbox ubuntu 20.4 共享目录永久挂载

google 了大多数都没用什么 rc.local 什么环境不说明。。。follow me step by step设置virtualbox ubuntu虚拟机共享文件夹进入ubuntu先手动设置挂载点 创建共享文件并修改权限 mkdir chmod 777 /mnt/share 挂载mac share 到虚拟机 /mnt/share mount -t vboxsf share /mnt/share自动挂载避免重启后失效 在 /etc/fstab 最后添加一

2021-03-15 10:02:06 458

原创 C hashtable demo

hash 表链表数组:二级指针基本操作 :初始化 插入 打印#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node { int data; struct node *next;}Node, *ptrNode;int N = 10;typedef Node **table;int main() { table hashTable = (

2021-03-14 09:03:35 80

原创 CSAPP 6.38 6.39 6.41课后习题

一、题目描述P490-P492二、分析求解6.38:每个Cache块32字节包含两个结构体 每个结构体8个int 因此顺序访问不命中是每块首部的第一个int不命中 所以答案为总的写次数是16*16*4 高速缓存不命中写总数是16*16*4*1/8 不命中率是1/8 = 12.5%6.39:按列顺序访问 每个Cache块的两个结构体只有第一个有效 命中率为1/4 = 25% 总的写次数不变 不命中写总数是总数的1/46.41:每个Cache块包含一个结构体 每个结构体4个

2021-03-08 11:58:08 599 1

原创 CASPP 6.34课后习题

一、题目描述二、分析求解解题关键:给出每个数组到缓存的映射关系 然后按数组的引用顺序分析缓存情况src 按行访问 dst按列访问

2021-03-08 09:20:11 574

原创 CSAPP 6.17习题解析

1. 题目描述二、答案答案B容易分析 答案A中src最后一个为什么是hit?分析:Cache为直接映射一组一行 块大小8B 映射两个int 也就是一个缓存行映射一行数组src 始终按行访问 dst始终按列访问 Cache内容变化过程如下 共8次内存引用for (i = 0; i < 2; i++) for (j = 0; j < 2; j++ dst[j][i] = src[i][j];// src行访问顺序 src[0][0] src[0][1] src[

2021-03-07 14:40:46 1443 3

原创 CSAPP 数组访问模式测试

一、已知结论数组按行顺序步长为1访问模式具有最好的空间局部性-数组在内存中顺序存放顺序访问对高速缓存友好二、测试代码测试数组按行顺序和列顺序的时间倍数差测试数据:400MB数组大小 64位机器 六核i7#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 10000#define M 10000#define LEN N*M void sum(int *a) {

2021-03-07 11:15:22 78

原创 CSAPP 第三版6.11练习题

一、中间位做组索引位道理很简单:地址低位变化比地址高位快 高位由低位进位而来 低位变化快就不可能重复 将它编码成组索引位就避免不同内存块映射到相同缓存块二、练习题6.11A: 如果高位做组索引s 低位自然是标记位t 显然一个缓存块映射2^t个内存块B:t = 32 - log2(512) = 18 一个缓存块映射pow(2, 18)个内存块 array大小为4096*4B/32B = 512块 所以array映射到一个缓存块...

2021-03-06 20:34:14 740

原创 CSAPP 第三版6.29课后习题答案

一、题目描述二、分析求解地址匹配查找 注意看有效位

2021-03-06 10:21:45 603

原创 CSAPP 第三版6.25课后习题答案

一、题目描述二、分析求解缓存结构图:计算公式:C = S * B * E m = t + s + b缓存查找过程:物理地址划分为3部分 3级查找 根据组索引找某一组 根据标志找某行 根据快偏移找某个字节数据...

2021-03-06 10:05:54 367

原创 CSAPP 第三版5.17习题答案

一、题目描述二、分析求解指针长度:64位机器上所有指针类型sizeof = 8 sizeof(ptr) 与指针类无关指针类型:设置指针类型的目的是规定元素内存大小 规定指针移动的长度 char* p p++ 移动1B int* p p++ 移动4B代码分析:#include <stdio.h>void* basic_memset(void *s, int c, size_t n) { size_t cnt = 0; unsigned char *schar =

2021-03-06 09:24:38 570

原创 CSAPP 第三版3.70习题答案

一、题目描述二、分析求解union 联合体知识:所有成员共用内存 互相影响 目的是节省内存union data{ // 内存结构图 int n; |__| c 1B char c; |__| m 2B short m; |__| } |__| n 4Be1 和 e2 共享内存,所以答案为 0 8

2021-03-05 19:33:04 644

原创 CSAPP 第三版 3.69课后习题答案

一、题目描述整理成代码 typedef struct { int first; a_struct a[CNT]; int last; } b_struct; void test(long i, b_struct *bp) { int n = bp->first + bp->last; a_struct *ap = &bp->a[i]; ap->x[ap->idx] = n; } mov 0x120(%rsi),%ecx

2021-03-05 10:40:45 1066 3

原创 培养学习思维

学会学习:带着疑问 带着目的去学习 透过形式学习技术的目的 解决了什么东西学习效果检验:自己尝试用几句简单语言讲给新人学习探索:与高手交流 学习他的表达方式 逻辑思维 看待事物的角度...

2021-03-05 08:48:46 192 1

原创 ATT 汇编 lea 和 mov指令区别

一、mov 指令mov 8(%rax, %rax, 2), %rbx // rbx = M[3rax + 8]8(%rax, %rax, 2) 表示内存地址为3rax + 8的内存值二、lea 指令取有效地址,一般用来计算表达式lea 8(%rax, %rax, 2), %rbx // rbx = 3rax + 8 直接取寄存器中的值8(%rax, %rax, 2) 也表示一个内存值 但 lea 只取内存的有效地址即 3rax + 8区别:lea 直接取地址 mov 需

2021-03-04 17:35:52 772 1

原创 CSAPP 3.63课后题答案

1. 题目描述二、分析求解明确寄存器与变量:rdi: x rsi: n rax: result明确case个数:x = x - 0x3c = x - 60 // 60 是第一个casecmp x - 60 - 5 = x - 65 // 65 是最后一个caseja 4005c3 // x > 65 跳转到此处 猜测是default语句明确每个case对应的代码块:间接调转表有6个地址印证2中case范围 60-65 并写出对应关系60->5a1

2021-03-04 12:06:45 870 2

原创 数字表示-原码 反码 补码 移码

1. 计算规则假设数字用8位编码正数原 反 补码相同原码 +25: 0 001 1001 最高位为符号位 后7位为真值部分反码 +25: 0 001 1001 最高位为符号位 后7位为真值部分补码 +25: 0 001 1001 最高位为符号位 后7位为真值部分负数反码 = 符号位不变原码真值部分取反 负数补码 = 符号位不变反码+1原码 -25: 1 001 1001 最高位为符号位 后7位为真值部分反码 -25: 1 110 0110 最高位为符号

2021-03-03 17:57:18 2635 2

原创 java 各字符编码字节数

测试代码 String str = "你好123"; System.out.println(str.getBytes("unicode").length); // 12 System.out.println(str.getBytes("utf-8").length); // 9 System.out.println(str.getBytes("gbk").length); // 7结论unicode 字符数字2B 汉字3B java 默认编码方式utf-8 字符.

2021-02-20 22:26:13 249

原创 源码阅读方法

1. 基础OOA & OOD设计模式算法 数据结构2. 方法先跑代码打断点一步步调试-结合sequence diagram目标导向-忽略无关细节diagrams 类图

2021-02-20 19:07:51 61

原创 leetcode 子集II

leetcode 题目链接1. 题目考点dfs 回溯 + 剪枝2. 考点解析数组重复必定先排序 不重复自身必有start 解集不重复比有usedclass Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> subsetsWithDup(int[] nums) { Stack&lt

2021-02-20 10:02:30 64 1

原创 leetcode 子集

leetcode 题目链接1. 题目考点dfs 回溯找结束条件2. 考点解析结束条件包含在for边界中class Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> subsets(int[] nums) { Stack<Integer> path = new Stack&

2021-02-20 09:43:46 70

原创 leetcode 组合总和III

leetcode题目链接1. 题目考点dfs 回溯 + 剪枝画图分析2. 考点解析数组无重复 + 无重复数字 + 组合无重复class Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> combinationSum3(int k, int n) { Stack<Integer&

2021-02-20 09:10:30 62

原创 leetcode 组合总和II

leetcode题目链接1. 题目考点dfs + 剪枝回溯1. 考点解析回溯 + 剪枝class Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> combinationSum(int[] candidates, int target) { Arrays.sort(candidate

2021-02-20 08:46:25 73

原创 leetcode 组合

leetcode 题目链接1. 题目考点n叉树 dfs回溯+剪枝2. 考点解析回溯 + 两次剪枝class Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> combine(int n, int k) { Stack<Integer> combine = new Stac

2021-02-19 10:59:12 42

原创 leetcode 路径总和II

leetcode题目链接1. 题目考点bfsjava 栈模拟bfs递归和返回操作2. 考点解析bfs + stack List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> pathSum(TreeNode root, int targetSum) { Stack<Integer> path = new S

2021-02-19 10:28:23 93

原创 牛客 字符串的全排列

牛客题目链接1. 题目考点回溯剪枝条件2. 考点解析除开第一个重复元素外 其余重复元素开始全排必定重复import java.util.*;public class Solution { ArrayList<String> res = new ArrayList<>(); public ArrayList<String> Permutation(String str) { if (str == null || str.e

2021-02-18 18:57:53 92

原创 leetcode 重复元素的全排列

题目链接1. 题目考点回溯剪枝2. 考点解析public class Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> permuteUnique(int[] nums) { // 先排序 重复元素紧挨 Arrays.sort(nums); boolean[] us

2021-02-18 18:24:10 177 1

原创 leetcode 全排列

题目链接1. 题目考点回溯算法N叉树的遍历bfsdfs2. 考点解析bfs 解法 模板class Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> permute(int[] nums) { backTrace(nums); return res; }

2021-02-18 15:32:08 35

原创 java 最小覆盖子串

牛客题目链接1. 题目考点用一个数组来哈希映射一个字符串(典型,a[ch]++)用双指针来表示一个区间(滑动窗口)左右指针向右移动,且不回溯右指针(O(n))2. 考点解析数组哈希字符串 + 双指针滑动窗口(有三个关键地方)public String minWindow (String S, String T) { // write code here // 关键:数组哈希映射字符串 int[] needs = new int[128]; int[] w

2021-02-08 10:10:51 227

原创 java 比较版本号(中)

牛客题目链接1. 题目考点String 分隔成字符串数组2. 考点解析分隔成字符串数组逐一比较,注意最后长度判断public int compare (String version1, String version2) { // write code here String[] v1 = version1.split("\\."); String[] v2 = version2.split("\\."); int len = v1.length < v

2021-02-06 15:34:27 70

原创 java 最长重复子串(中)

牛客题目链接1. 题目考点滑动窗口机制2. 考点解析将重复字符串看成是两个连续的窗口,窗口最大值为 len / 2,比较两个窗口内的字符,逐渐缩小窗口(O(n^3))public int solve (String a) { // write code here char[] chars = a.toCharArray(); int len = chars.length; int maxLen = len / 2; // 提示:i 表示右边窗口的大小

2021-02-06 15:14:15 173

原创 java 字典树的实现

牛客题目链接1. 题目考点HashMap 的使用2. 考点解析public String[] trieU (String[][] operators) { // write code here HashMap<String, Integer> map = new HashMap<>(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < operators

2021-02-06 10:59:32 104 1

原创 java 验证IP地址

牛客题目链接1. 题目考点字符串分割符 . : 需要转义2. 考点解析一般思路,分类讨论,分而治之public String solve (String IP) { // write code here String[] strs1 = IP.split("\\."); String[] strs2 = IP.split("\\:"); if (strs1.length == 4 && isIP4(strs1)) return "IPv4";

2021-02-06 10:03:39 538

原创 java 字符串变形

牛客题目链接1. 题目考点字符串翻转2. 考点解析分离成数组,再翻转每个单词public String trans(String s, int n) { // write code here String[] strs = s.split(" "); for (int i = 0; i < strs.length; i++) { String newStr = ""; for (int j = 0; j < strs[i]

2021-02-06 09:23:49 295

原创 java 最长公共前缀

牛客题目链接1. 题目考点数组特殊情况处理字符串比较2. 考点解析直接遍历数组(最容易想到)public String longestCommonPrefix (String[] strs) { // write code here if (strs == null || strs.length == 0) return ""; if (strs.length == 1) return strs[0]; String res = strs[0];

2021-02-06 08:08:33 103

原创 java 大数加法

牛客题目链接1. 题目考点StringBuilder 的使用此题不能使用 Stack (超时)2. 考点解析public String solve (String s, String t) { // write code here int i = s.length() - 1, j = t.length() - 1; int p = 0, sum = 0; // 提示:StringBuilder 没有泛型参数 StringBuilder res = ne

2021-02-05 19:06:13 69

原创 java 大数乘法

牛客题目链接1. 题目考点StringBuilder 在字符串处理中的使用字符串加法的升级,大数加法2. 考点解析一次就过,很激动ArrayList<String> res = new ArrayList<>();public String solve (String s, String t) { // write code here // 技巧:j 表示被乘数 0 的个数 int j = 0; for (int i = s.le

2021-02-05 19:04:36 150

原创 java 将字符串转化为 整数

牛客题目链接1. 题目考点整数溢出判断符号处理2. 考点解析分上溢出和下溢出public int atoi (String str) { // write code here if (str == null || str.length() == 0) return 0; // 处理前导空格 str = str.trim(); // 注意:symbol 默认为 1 int symbol = 1, i = 0; if (str.char

2021-02-05 18:09:23 277

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除