‘壹’ 牛客网字节跳动面试题解析
1)
题目给出的初始值是在计算机存储形式,即补码形式。a为负数,b为整数。
a-b = a + (-b)——思路是先得到(-b)的补码形式,然后将a的补码与(-b)的补码相加。
a的补码题目已给出: 0xF000000000000000
-b的原码:0xFFFFFFFFFFFFFFFF
-b的反码:0x8000000000000000
-b的补码:0x8000000000000001
a-b = 0xF000000000000000 + 0x8000000000000001
= 0x7000000000000001
= 2^62 + 2^61 + 2^60 + 1
负数-正数 = 正数?这是因为计算机存储字节长度的限制导致的最高位溢出。
2)
Boolean([]) //true
布尔类型里只有这几参数个返回false,其它都为true
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean('') // false
布尔类型与其它任何类型进行比较,布尔类型将会转换为number类型。
Number([])返回0所以第二题为true
Number转换类型的参数如果为对象返回的就是NaN,
那么Number({})返回的就是NaN。
通过Object.prototype.toString.call({})来判断类型,0与NaN相比为false
所以 true true false
3)
块元素
address - 地址
blockquote - 块引用
center - 举中对齐块
dir - 目录列表
div - 常用块级容易,也是css layout的主要标签
dl - 定义列表
fieldset - form控制组
form - 交互表单
h1 - 大标题
h2 - 副标题
h3 - 3级标题
h4 - 4级标题
h5 - 5级标题
h6 - 6级标题
hr - 水平分隔线
isindex - input prompt
menu - 菜单列表
noframes - frames可选内容6)
一、无继承性的属性
1、display:规定元素应该生成的框的类型
2、文本属性:
vertical-align:垂直文本对齐
text-decoration:规定添加到文本的装饰
text-shadow:文本阴影效果
white-space:空白符的处理
unicode-bidi:设置文本的方向
3、盒子模型的属性:width、height、margin 、margin-top、margin-right、margin-bottom、margin-left、border、border-style、border-top-style、border-right-style、border-bottom-style、border-left-style、border-width、border-top-width、border-right-right、border-bottom-width、border-left-width、border-color、border-top-color、border-right-color、border-bottom-color、border-left-color、border-top、border-right、border-bottom、border-left、padding、padding-top、padding-right、padding-bottom、padding-left
4、背景属性:background、background-color、background-image、background-repeat、background-position、background-attachment
5、定位属性:float、clear、position、top、right、bottom、left、min-width、min-height、max-width、max-height、overflow、clip、z-index
6、生成内容属性:content、counter-reset、counter-increment
7、轮廓样式属性:outline-style、outline-width、outline-color、outline
8、页面样式属性:size、page-break-before、page-break-after
9、声,(对于不支持frame的浏览器显示此区块内容
noscript - )可选脚本内容(对于不支持script的浏览器显示此内容)
ol - 排序表单
p - 段落
pre - 格式化文本
table - 表格
ul - 非排序列表
4)
通过iframe设置document.domain可以实现跨域
5)
ES6
A:类必须使用new调用,否则会报错。这是它跟普通构造函数的一个主要区别,后者不用new也可以执行。
B:export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。
// 报错
export 1;
// 报错
var m = 1;
export m;
上面两种写法都会报错,因为没有提供对外的接口。第一种写法直接输出 1,第二种写法通过变量m,还是直接输出 1。1只是一个值,不是接口。正确的写法是下面这样。
// 写法一
export var m = 1;
// 写法二
var m = 1;
export {m};
// 写法三
var n = 1;
export {n as m};
D:A模块对外暴露了一个对象,引入的时候需要使用解构赋值
上面两种写法都会报错,因为没有提供对外的接口。第一种写法直接输出 1,第二种写法通过变量m,还是直接输出 1。1只是一个值,不是接口。正确的写法是下面这样。
import {readFile} from ‘A'
6)
一、无继承性的属性
1、display:规定元素应该生成的框的类型
2、文本属性:
vertical-align:垂直文本对齐
text-decoration:规定添加到文本的装饰
text-shadow:文本阴影效果
white-space:空白符的处理
unicode-bidi:设置文本的方向
3、盒子模型的属性:width、height、margin 、margin-top、margin-right、margin-bottom、margin-left、border、border-style、border-top-style、border-right-style、border-bottom-style、border-left-style、border-width、border-top-width、border-right-right、border-bottom-width、border-left-width、border-color、border-top-color、border-right-color、border-bottom-color、border-left-color、border-top、border-right、border-bottom、border-left、padding、padding-top、padding-right、padding-bottom、padding-left
4、背景属性:background、background-color、background-image、background-repeat、background-position、background-attachment
5、定位属性:float、clear、position、top、right、bottom、left、min-width、min-height、max-width、max-height、overflow、clip、z-index
6、生成内容属性:content、counter-reset、counter-increment
7、轮廓样式属性:outline-style、outline-width、outline-color、outline
8、页面样式属性:size、page-break-before、page-break-after
9、声音样式属性:pause-before、pause-after、pause、cue-before、cue-after、cue、play-ring
二、有继承性的属性
1、字体系列属性
font:组合字体
font-family:规定元素的字体系列
font-weight:设置字体的粗细
font-size:设置字体的尺寸
font-style:定义字体的风格
font-variant:设置小型大写字母的字体显示文本,这意味着所有的小写字母均会被转换为大写,但是所有使用小型大写字体的字母与其余文本相比,其字体尺寸更小。
font-stretch:对当前的 font-family 进行伸缩变形。所有主流浏览器都不支持。
font-size-adjust:为某个元素规定一个 aspect 值,这样就可以保持首选字体的 x-height。
2、文本系列属性
text-indent:文本缩进
text-align:文本水平对齐
line-height:行高
word-spacing:增加或减少单词间的空白(即字间隔)
letter-spacing:增加或减少字符间的空白(字符间距)
text-transform:控制文本大小写
direction:规定文本的书写方向
color:文本颜色
3、元素可见性:visibility
4、表格布局属性:caption-side、border-collapse、border-spacing、empty-cells、table-layout
5、列表布局属性:list-style-type、list-style-image、list-style-position、list-style
6、生成内容属性:quotes
7、光标属性:cursor
8、页面样式属性:page、page-break-inside、windows、orphans
9、声音样式属性:speak、speak-punctuation、speak-numeral、speak-header、speech-rate、volume、voice-family、pitch、pitch-range、stress、richness、、azimuth、elevation
三、所有元素可以继承的属性
1、元素可见性:visibility
2、光标属性:cursor
四、内联元素可以继承的属性
1、字体系列属性
2、除text-indent、text-align之外的文本系列属性
五、块级元素可以继承的属性
1、text-indent、text-align
7)
将一个数组调整为最大堆.
根据堆的性质, 只要保证部分有序即可, 即根节点大于左右节点的值. 将数组抽象为一个完全二叉树, 所以只要从最后一个非叶子节点向前遍历每一个节点即可. 如果当前节点比左右子树节点都大, 则已经是一个最大堆, 否则将当前节点与左右节点较大的一个交换, 并且交换过之后依然要递归的查看子节点是否满足堆的性质, 不满足再往下调整. 如此即可完成数组的堆化.
8)
http请求方法(get、post区别)
1、本质区别:get用于查询信息(查),post用于插入信息(插);
2、安全性:对于服务器讲,get是安全(不更改信息)、幂等(作用1次和n次效果相同); post不安全、不幂等;
对于客户端将,get参数直接暴露在URL, 不安全;post参数放消息体中,更安全;
3、传送长度: get受 URL限制,传送数据量小; post传送数据量大,默认不受限制;
4、缓存机制、历史记录:get请求会被浏览器主动缓存,也会被保留在历史记录中,post都不可以;
5、数据类型:get只允许ASCII码字符类型,post无限制;
9)
属于javaScript的typeof运算符的可能结果
10)
条件概率
男,周二:1/14
男,非周二:6/14
女,周二:1/14
女,非周二:6/17
两个孩子至少一个是周二生的男孩:1/14+1/14-1/14*1/14=27/196
两个孩子都是男孩且至少一个是周二生的:1/14*1/14+1/14*6/14+6/14*1/14=13/196
条件概率:13/27
12)
14)
关于下列CSS选择器:ID选择器、类选择器、伪类选择器、标签名称选择器,排序正确的是
ID选择器>Class选择器=伪类>标签名称选择器
15)
假设两线程为A、B,设有3种情况:
1.AB不并发:此时相当于两个方法顺序执行。A执行完后a=-1,B使用-1作为a的初值,B执行完后a=-2
2.AB完全并发:此时读写冲突,相当于只有一个线程对a的读写最终生效。相同于方法只执行了一次。此时a=-1
3.AB部分并发:假设A先进行第一次读写,得到a=1;之后A的读写被B覆盖了。B使用用1作为a的初值,B执行完后a=0
‘贰’ 牛客网华为机试题,c++编译的,我自测都是对的,但是提交就是不对,我要崩溃了
输入有多组数据,希望有多个输出。
你的代码把多组测试数据放在一个集合中,做了一次输出。
‘叁’ 牛客网刷题ACM模式 Objc Swift
之前做算法题都是输入输出都确定了
到牛客网这个ACM 感觉很迷茫
用Swift 搞定了输入出处 但是 retrun a + b 这种简单的加法都超时 只能放弃了(Leetcode 做的算法题 都是用的Swift 之前是Java 支持之后 就一直用Swift了)。如果将来牛客网优化了,还是会用Swift
while 能接收多组数据
这里好多OC语法不能用 用就超时了
想到 OC 是C的超集 可以用C语言
好久没用C了,这里简单记录下C的基本语法,够做题的
这里记录下
‘肆’ js在牛客网上的多行输入多行输出
如下例子主要是在node编译环境下。
比如加法运算:
输入:
3
1 2
1 3
1 4
输出:
3
4
5
使用的是for循环调用console.log()
对每一行的输入都有对应的输出的多行输入多行输出的问题可以使用如下方法:
输入:
1 2
1 3
1 4
输出:
3
4
5
‘伍’ 牛客网c++ 输入输出怎么处理
1、flush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。2、scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。① 遇空格、“回车”、“跳格”键。② 遇宽度结束。③ 遇非法输入。键盘缓冲区就可能有残余信息问题。scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中解决就要在scanf()函数之后加个fflush(stdin)。
‘陆’ 牛客网上的java编程题,自己电脑运行没问题,但是在牛客网上运行失败,不知道原因在哪里
1.简单性
Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。
2.面向对象
Java是一个面向对象的语言。对程序员来说,这意味着要注意应中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。
Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。例如,Java提供产生图形用户接口部件的类(java.awt包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩写,处理输入输出的类(java.io包)和支持网络功能的类(java.net包)。
3.分布性
Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。
网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。
4.编译和解释性
Java编译程序生成字节码(byte-code),而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行。
在一个解释性的环境中,程序开发的标准"链接"阶段大大消失了。如果说Java还有一个链接阶段,它只是把新类装进环境的过程,它是增量式的、轻量级的过程。因此,Java支持快速原型和容易试验,它将导致快速程序开发。这是一个与传统的、耗时的"编译、链接和测试"形成鲜明对比的精巧的开发过程。
5.稳健性
Java原来是用作编写消费类家用电子产品软件的语言,所以它是被设计成写高可靠和稳健软件的。Java消除了某些编程错误,使得用它写可靠软件相当容易。
Java
Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。
可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的可能性。类似地,Java自动的"无用单元收集"预防存储漏泄和其它有关动态存储分配和解除分配的有害错误。Java解释程序也执行许多运行时的检查,诸如验证所有数组和串访问是否在界限之内。
异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。
‘柒’ 关于牛客网JS的输入和利用nodejs实现输入输出
牛客网JS实现输入
读取输入的一行数据
读取输入固定行的多行输入数据
读取任意行输入
nodejs实现输入输出
‘捌’ 牛客网的python多行输入到底怎么算对的
ne1 = sys.stdin.readline().strip()
line2 =
sys.stdin.readline().strip()
if line1 == "" or line2
== ""
#我试着这样,但是算法也是没有效果。这样输入应该是可以的。
‘玖’ 牛客网刷算法总结
容器:vector map set list
算法:回溯法(dfs),分支界限法(bfs),贪心算法,分治法,动态规划
容器排序API:sort reverse find count
字符串操作API:find rfind find_first_of find_last_of find_first_not_of find_last_not_of
其他:查表法,快排,深度优先搜索dfs,广度有限搜索bfs
1、getline 最后需要判空,如果是输入一个,请用cin
2、str.append(8-str.size(),'0') ,后面增加几个‘0’
3、str.substr(0,8) 0开始截取8个,str.substr(8)8开始截取剩余
4、'a'比'A'大32
5、math.h sqrt 开方
6、int(a+0.5)
7、iimap[key] += value map->first << " " << map->second
8、num=num*10+n%10
9、set不重复数组
10、>> 位移
11、emplace_back()相比push_back()少调用一次拷贝构造函数
12、instr.rfind('\\')
13、带路径文件名称,行号,以空格隔开 可以这样cin >> instr && cin >> row
14、合唱队,动态规划
15、兄弟单词,一起排一次序,比较相等
16、素数伴侣,男女配对,匈牙利算法(二部图,交错路径,增广路径)
17、加解密用查表法
18、兔子算法,a+b+c
19、数组也可以用sort排序,如sort(nums,nums+26)
20、nodes.erase(iter)删除这个位置的数据
21、计算字符串距离用动态规划
22、插入排序一定要back
23、vector<vector<int>> c1(x,vector<int>(y,0));
24、#include<bits/stdc++.h>
25、str.erase(str.begin()+i1, str.begin()+i2+1); str.insert(str.begin()+i1, 'A'+c.size()-1);
26、润年( (year%4==0&&year%100!=0)||year%400==0)
27、尼科彻斯定理 数学公式直接可以推出来首项是m*m+1-m,有m项
28、find rfind 可以查找子串,find_first_of find_last_of find_first_not_of find_last_not_of 则不能
29、int index = str1.find(str);