小红书20230326暑假实习笔试
Posted 孤鸿末子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小红书20230326暑假实习笔试相关的知识,希望对你有一定的参考价值。
第一题:加密
小明学会了一种加密方式。他定义suc(x)为x在字母表中的后继,例如a的后继为b,b的后继为c… (即按字母表的顺序后一个)。特别的,z的后继为a。对于一个原字符串S,将其中每个字母x都替换成其三重后继,即suc(suc(suc(x)))的字母,即完成了加密。例如,abc加密后变成def (suc(suc(suc(a)))=d suc(suc(suc(b)))=e, suc(suc(suc©))=f)。 现在小明知道一个加密后的字符串S’,想请你找出他的原串S。
输入数据
3
def
输出数据
abc
直接模拟完成
Class solution
public static String findString(String s)
int n = s.length();
String ans = "";
for(int i = 0; i < n; i ++)
if(s.charAt(i)=='a' || s.charAt(i)=='b' || s.charAt(i)=='c')
ans += (char) (s.charAt(i) - 3 + 26);
else
ans += (char)(s.charAt(i) - 3);
return ans;
public main
public static void main(String[] args)
Scanner scanner = new Scanner(System.in);
System.out.print("请输入字符串的长度:");
int n = scanner.nextInt();
System.out.print("请输入字符串:");
String input = scanner.next();
Solution s = new Solution();
System.out.println(s.findString(input));
scanner.close();
第二题:K排序
在算法中,有各种各样的排序算法,例如归并排序,冒泡排序,快速排序等等。本题中,我们会使用一种新的排序算法:K排序。
K排序算法描述如下:首先,算法需要按照某种规则选择该数列上至多K个位置,将其对应的数抽出来,其他的数都往左对齐,之后这K个数排好序之后依次放在原数列末尾。以上过程算作一次操作。
例如,对于数列[1,3,5,4,2],当K=2时可以选择数字5和4,之后数列变成[1,3,2,4,5]。
你的任务是:对于给定的数列,你需要计算出最少需要多少次上述操作,使得整个数列从小到大排好序?
样例输入
2
5 1
1 2 3 4 5
5 2
1 3 5 4 2
样例输出
0
2
主要思路是贪心,每次找到当前未排序部分的最小值,将其移动到正确的位置,如果需要移动的距离超过了k,则需要进行一次K排序操作。
import java.util.*;
public class Main
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
while (T-- > 0)
int n = sc.nextInt();
int k = sc.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++)
nums[i] = sc.nextInt();
int ans = 0;
int cur = 0;
while (cur < n)
int minIndex = cur;
for (int i = cur + 1; i < Math.min(cur + k + 1, n); i++)
if (nums[i] < nums[minIndex])
minIndex = i;
if (minIndex == cur)
cur++;
else
int temp = nums[minIndex];
for (int i = minIndex; i > cur; i--)
nums[i] = nums[i - 1];
nums[cur] = temp;
ans++;
System.out.println(ans);
第三题: 涂色
给出一个数组。你需要求出按顺序对其进行一系列区间操作后最终所得的数组。
操作有三种:
将下标在L到R之间的元素全部或上X。
将下标在L到R之间的元素全部与上X。
将下标在L到R之间的元素全部设为X。
输入描述
第一行有一个正整数N(1<=N<=100000),代表数组的长度。
第二行有N个非负整数,范围在0到2^20-1之间,代表数组中的元素。
第三行有一个正整数M(1<=M<=100000),代表操作次数。
第四行有M个正整数,代表M次操作中的区间左端点L。
第五行有M个正整数,代表M次操作中的区间右端点R。
第六行是一个长度为M的字符串,|代表操作1,&代表操作2,=代表操作3。
第七行有M个正整数,代表M次操作中的参数X。
输出描述
在一行中输出N个数,代表所有操作按顺序完成后最终所得的数组。
样例输入
4
5 4 7 4
4
1 2 3 2
4 3 4 2
=|&=
8 3 6 2
样例输出
8 2 2 0
<转>2016暑假实习中科院笔试
第一:首先基本上是,基于你的简历进行初步的了解。
1:询问我的github上的项目,是不是自己做的,怎么做的,问了一下那个九宫格游戏,那个是fork别人的,然后他问我自己有没有研究?,那个项目有bug,我就实话实说,然后他问我哪里有bug,如何解决bug,问题出在哪里,,霹雳啪啦,霹雳啪啦。。。。。。。
2:看到我上面写考了会计证,问我是不是有从事金融的打算,学习成绩怎么样?排名如何?这个金融的问题,真是没想到,还以为他们要我去搞金融,原来担心我方向不明确,我说,自己只是想扩展一下各方面的知识,多学点东西对自己总是好的,主要还是从事web前端开发,热爱前端。。。。。。啥啥啥的。。。。
3:针对我的网页简历,提出了一个非常好的问题,网页简历用到了3d模型,从正面看的,问我如果从背面看会产生什么问题?因为我那个是用图片渲染的,图片上面加了文字,问我如果,不要图片,只用文字,实现怎么搞?这个我知道,就霹雳啪啦,霹雳啪啦。。。。。。。的说了一堆。
4:问我对最新前沿的技术有没有什么了解?比如说node.js,我只了解一点点,就说,对于现在的自己,目前太高深的问题不太适合,还是以基础为主。。。。。啥啥啥的。
5:问到考研的问题?问我大三怎么不去考研?
6:问我,自己对学习前端有没有什么规划,主要学习那些?前沿的技术是否了解?。。。。。啥啥啥的。。。。。。。。
7:问我阿里云ECS是怎么弄的,备案怎么搞得,配置环境啊,,是不是都是自己搞得还是一起弄得?我都是自己一个人琢磨出来的。。霹雳啪啦,噼里啪啦。。我说了一堆,跟他讲了一堆,。。,啥啥啥的。。。。。。
8:问我对于WEB UI有什么看法?扯到曾经实习软件公司的经历,在实习公司做了什么,用什么做的?
好吧!上面那些看似不够高大上,其实还是很考验一个人的反应能力的,说错了话,结果就可想而知。。。。。感觉每个问题都在考验我的反应能力。
第二:专业问题
1:如何检测一个变量是字符串?如何检测为对象类型呢?
1:使用typeOF检测字符串
var str;
alert(typeOf str)
2:给测试变量加上一个空白字符,然后与测试变量做全等判断,就可以得出这个变量是否是字符串。
<script type="text/javascript">
var str=\'ss\';
var stt=str+\'\';
alert(str==stt); //输出为真
</script
我只知道上面两种,还有其它方法,麻烦给我留言哈!
1:typeof 可以判断function的类型;在判断除Object类型的对象时比较方便。
2:判断已知对象类型的方法: instanceof
alert(c instanceof Array) ---------------> true
alert(d instanceof Date)
alert(f instanceof Function) ------------> true
alert(f instanceof function) ------------> false
注意:instanceof 后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。
3:根据对象的constructor判断: constructor alert(c.constructor === Array) ----------> true alert(d.constructor === Date) -----------> true alert(e.constructor === Function) -------> true 注意: constructor 在类继承时会出错 eg: function A(){}; function B(){}; A.prototype = new B(); //A继承自B var aObj = new A(); alert(aobj.constructor === B) -----------> true; alert(aobj.constructor === A) -----------> false; 而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true: alert(aobj instanceof B) ----------------> true; alert(aobj instanceof B) ----------------> true; 言归正传,解决construtor的问题通常是让对象的constructor手动指向自己: aobj.constructor = A; //将自己的类赋值给对象的constructor属性 alert(aobj.constructor === A) -----------> true; alert(aobj.constructor === B) -----------> false; //基类不会报true了;
4:通用但很繁琐的方法: prototype:
alert(Object.prototype.toString.call(a) === ‘[object String]’) -------> true;
alert(Object.prototype.toString.call(b) === ‘[object Number]’) -------> true;
alert(Object.prototype.toString.call(c) === ‘[object Array]’) -------> true;
alert(Object.prototype.toString.call(d) === ‘[object Date]’) -------> true;
alert(Object.prototype.toString.call(e) === ‘[object Function]’) -------> true;
alert(Object.prototype.toString.call(f) === ‘[object Function]’) -------> true;
大小写不能写错,比较麻烦,但胜在通用。
比如:
<script type="text/javascript"> var str=\'123\'; alert(Object.prototype.toString.call(str) === \'[object String]\'); //输出为真 </script>
2:对于页面加载缓慢,如何进行优化,解决途径是什么?--这个我答的不好
我是先讲页面加载缓慢是那些原因造成的,比如:
A:后端的问题。
一般网页第一个请求是动态请求的概率比较大,如果这个请求特别耗时,那肯定不是前端的责任。
B:请求过多
数一下瀑布图总共有多少行,onload之前如果有几百行,那么请求就太多了。一下子加载那么多资源造成拥挤。css,
js该合并的合并,图标该精灵的精灵,使用字体图标也很好。还有,有些不重要的东西不用放到onload之前加载,
放到后面也一样。 网页发请求数越少越好。
比如:HTML的话可以从script标签这里说,比如动态加载script标签,异步加载script标签(IE:defer、标准:async)
C:某一个部分请求的时间花费过长。
请求比其他请求的时间大出一个数量级,这种情况一般是因为某一个资源太慢了,导致网页整体变慢,资源慢的原因可能是:
a)资源在第三方站点上,他们很慢;
b)这个资源太大了;
c)这个 资源使用的域名有问题。
D:网络问题
仔细看一下一个单独的http请求,他们会分为好几段,分别是域名解析、建立连接、发送请求、等待响应和接收数据几个阶段。
理论上域名解析和建立连接应该占用的时间很小才对,主要的时间应该用在后面几个阶段上。上图中,浅灰色和灰色分别代表域名解析和建立连接。
可以看出这两个请求中花费在网络层上的时间太长了,超过总时间的一半还要多。网络层时间过长除了可能和底层网络有关之外,还可能和站点的服务端性能有关(后端RD的事情哦)。
当然,如果这种情况发生在向第三方站点发送的请求上(实际上也经常发生),建议取消或者更换某些站点功能从而避免这样的请求了。
E:接收数据时间过长
上面说了,http请求的大部分时间应该花在后面几个阶段,比如等待响应和接收数据。但是,如果接收数据的时间太长了
长到数百毫秒甚至以秒计算的时候。那也是有问题的。这种情况一般是因为下载的内容太重了,例如大图片、大脚本等。
这类问题可以使用GZIP压缩、图片压缩或者JS/CSS的minify等 手段来解决。
还有像CSS Sprites,合并CSS文件等方案。
实现页面部分缓存有 两种机制:
第一种:对用户控件进行缓存配置
此种是将页面中需要缓存的部分置于用户控件(.ascx文件)中,并且为用户控件设置缓存功能
(包含用户控件的ASP.NET页面可设置也可不 设置缓存)。
这就是通常所说的“控件缓存”。
主要包括以下3种方法:
一:使用@ OutputCache指令以声明方式为用户控件设置缓存功能,
二:在代码隐藏文件中使用PartialCachingAttribute类设置用户控件 缓存;
三:使用ControlCachePolicy类以编程方式指定用户控件缓存设置。
第二种:“缓存后替换”的方法。
该方法与控件缓存正好 相反,将页面中的某一部分设置为不缓存,因此,尽管缓存了整个页面,
但是当再次请求该页时,将重新处理那些没有设置为缓存的内容。
以上是关于小红书20230326暑假实习笔试的主要内容,如果未能解决你的问题,请参考以下文章
atcoder Keyence Programming Contest 2020 D - Swap and Flip 2020腾讯暑假实习笔试C(状压dp or 状压乱搞)