前端笔试题递归
- 格式:docx
- 大小:11.18 KB
- 文档页数:2
前端算法笔试题一、题目描述某网站有一组整数数据,数据数量不超过1000个,且每个数据的范围在[-10000, 10000]之间。
请你设计一个前端算法,实现以下功能:1. 数据去重:将重复出现的数字去除,仅保留一个。
2. 数据排序:将数据按照从小到大的顺序进行排序。
3. 数据筛选:将数据中所有大于等于0的数字筛选出来,并保持原始顺序不变。
二、算法设计思路1. 数据去重:使用Set数据结构来进行去重操作。
将原始数据逐个插入Set中,利用Set的特性自动去除重复的数字,最后将Set转换为数组格式即可得到去重后的数据。
2. 数据排序:使用快速排序算法来对数据进行排序。
选择数组中的一个元素作为基准值,将小于基准值的元素放在左边,大于基准值的元素放在右边,再递归地对左右两部分进行快速排序,最后合并左右两部分即可得到有序数组。
3. 数据筛选:遍历原始数据,将大于等于0的数字筛选出来,并按照出现顺序保存在一个新的数组中。
三、算法实现```javascriptfunction removeDuplicates(arr) {// 去重let set = new Set(arr);return Array.from(set);}function quickSort(arr) {// 排序if (arr.length <= 1) {return arr;}let pivotIndex = Math.floor(arr.length / 2); let pivot = arr.splice(pivotIndex, 1)[0];let left = [];let right = [];for (let i = 0; i < arr.length; i++) {if (arr[i] < pivot) {left.push(arr[i]);} else {right.push(arr[i]);}}return quickSort(left).concat([pivot], quickSort(right));}function filterPositiveNumbers(arr) {// 筛选let result = [];for (let i = 0; i < arr.length; i++) {if (arr[i] >= 0) {result.push(arr[i]);}}return result;}// 示例数据let data = [1, 2, 3, 4, 3, 5, -1, 0, -2, -3, 6, 7, -4, -2, 8, 9, 0, 10]; // 去重let uniqueData = removeDuplicates(data);// 排序let sortedData = quickSort(uniqueData);// 筛选let filteredData = filterPositiveNumbers(sortedData);console.log(filteredData);```四、算法分析该算法的时间复杂度主要集中在排序操作上,即快速排序的时间复杂度为O(nlogn)。
web前端笔试题及答案一、选择题1. 下列哪个不是JavaScript的数据类型?A. NumberB. StringC. UndefinedD. Array答案:D2. CSS中,以下哪个属性用于设置元素的宽度?A. widthB. heightC. marginD. padding答案:A3. HTML5中,用于定义文档的元数据的标签是:A. <html>B. <head>C. <meta>D. <title>答案:B二、简答题1. 请简述什么是BEM命名方法,并说明其优点。
答案:BEM是Block Element Modifier的缩写,是一种CSS类名命名方法。
它通过将CSS类名分为三个部分:块(Block)、元素(Element)和修饰符(Modifier),来提高CSS的可读性和可维护性。
优点包括:提高代码的可读性,方便团队协作;通过块和元素的命名,可以避免CSS选择器的冲突;修饰符的使用可以方便地覆盖或扩展样式。
2. 请解释什么是跨域资源共享(CORS)以及它是如何解决跨域请求问题的。
答案:跨域资源共享(CORS)是一种安全机制,允许Web页面上的脚本发起跨域HTTP请求。
它通过在HTTP响应头中添加特定的字段来告知浏览器,哪些源可以访问该资源。
CORS通过设置Access-Control-Allow-Origin等响应头,允许或限制来自不同源的请求,从而解决了由于浏览器同源策略导致的跨域请求问题。
三、编程题1. 编写一个JavaScript函数,实现数组中所有数字的累加。
示例代码:```javascriptfunction sumArray(numbers) {let sum = 0;for (let i = 0; i < numbers.length; i++) {sum += numbers[i];}return sum;}```2. 请使用HTML和CSS创建一个简单的登录表单,并包含用户名和密码输入框。
必备算法:递归!⽆论你是前端开发,还是后端开发,都需要掌握它!递归是⼀种⾮常重要的算法思想,⽆论你是前端开发,还是后端开发,都需要掌握它。
在⽇常⼯作中,统计⽂件夹⼤⼩,解析xml⽂件等等,都需要⽤到递归算法。
它太基础太重要了,这也是为什么⾯试的时候,⾯试官经常让我们⼿写递归算法。
本⽂呢,将跟⼤家⼀起深⼊挖掘⼀下递归算法~什么是递归?递归,在计算机科学中是指⼀种通过重复将问题分解为同类的⼦问题⽽解决问题的⽅法。
简单来说,递归表现为函数调⽤函数本⾝。
在知乎看到⼀个⽐喻递归的例⼦,个⼈觉得⾮常形象,⼤家看⼀下:❝递归最恰当的⽐喻,就是查词典。
我们使⽤的词典,本⾝就是递归,为了解释⼀个词,需要使⽤更多的词。
当你查⼀个词,发现这个词的解释中某个词仍然不懂,于是你开始查这第⼆个词,可惜,第⼆个词⾥仍然有不懂的词,于是查第三个词,这样查下去,直到有⼀个词的解释是你完全能看懂的,那么递归⾛到了尽头,然后你开始后退,逐个明⽩之前查过的每⼀个词,最终,你明⽩了最开始那个词的意思。
❞来试试⽔,看⼀个递归的代码例⼦吧,如下:递归的特点实际上,递归有两个显著的特征,终⽌条件和⾃⾝调⽤:✿⾃⾝调⽤:原问题可以分解为⼦问题,⼦问题和原问题的求解⽅法是⼀致的,即都是调⽤⾃⾝的同⼀个函数。
✿终⽌条件:递归必须有⼀个终⽌的条件,即不能⽆限循环地调⽤本⾝。
结合以上demo代码例⼦,看下递归的特点:递归与栈的关系其实,递归的过程,可以理解为出⼊栈的过程的,这个⽐喻呢,只是为了⽅便读者朋友更好理解递归哈。
以上代码例⼦计算sum(n=3)的出⼊栈图如下:为了更容易理解⼀些,我们来看⼀下函数sum(n=5)的递归执⾏过程,如下:✿计算sum(5)时,先sum(5)⼊栈,然后原问题sum(5)拆分为⼦问题sum(4),再⼊栈,直到终⽌条件sum(n=1)=1,就开始出栈。
✿ sum(1)出栈后,sum(2)开始出栈,接着sum(3)。
✿最后呢,sum(1)就是后进先出,sum(5)是先进后出,因此递归过程可以理解为栈出⼊过程啦~递归的经典应⽤场景哪些问题我们可以考虑使⽤递归来解决呢?即递归的应⽤场景⼀般有哪些呢?✿阶乘问题✿⼆叉树深度✿汉诺塔问题✿斐波那契数列✿快速排序、归并排序(分治算法体现递归)✿遍历⽂件,解析xml⽂件递归解题思路解决递归问题⼀般就三步曲,分别是:✿第⼀步,定义函数功能✿第⼆步,寻找递归终⽌条件✿第⼆步,递推函数的等价关系式这个递归解题三板斧理解起来有点抽象,我们拿阶乘递归例⼦来喵喵吧~1、定义函数功能定义函数功能,就是说,你这个函数是⼲嘛的,做什么事情,换句话说,你要知道递归原问题是什么呀?⽐如你需要解决阶乘问题,定义的函数功能就是n的阶乘,如下:2、寻找递归终⽌条件递归的⼀个典型特征就是必须有⼀个终⽌的条件,即不能⽆限循环地调⽤本⾝。
以下是一些可能的Java递归笔试题目:
1. 阶乘计算:
实现一个函数,使用递归计算给定数字的阶乘。
例如,factorial(5) 应返回。
java代码:
2. 斐波那契数列:
实现一个函数,使用递归计算斐波那契数列的第n项。
斐波那契数列的定义是:。
java代码:
3. 汉诺塔问题:
实现一个函数,使用递归解决汉诺塔问题。
给定三个柱子A、B、C和n个圆盘,开始时所有圆盘都在柱子A上,目标是将所有圆盘移动到柱子C上,遵循以下规则:
每次只能移动一个圆盘。
每次移动时,圆盘必须放在比它大的圆盘上面。
不允许将任何较大的圆盘放在较小的圆盘上。
java代码:
4. N个台阶的走法:
给定一个楼梯有N个台阶,每次可以跳上1阶或2阶,计算总共有多少种不同的走法。
java代码:
5. 树的深度优先搜索(DFS):
给定一个树的数据结构,实现一个函数,使用递归进行深度优先搜索。
java代码:
这些题目涵盖了基本的递归概念和应用,包括简单的数学问题、经典的递归
问题以及数据结构中的递归搜索。
在实际的笔试中,题目可能会包含更复杂的场景和限制。
前端开发笔试题及答案一、选择题1. HTML5 中新增的语义化标签是以下哪一个?A. `<div>`B. `<section>`C. `<span>`D. `<img>`答案:B2. 以下哪个JavaScript方法可以用来获取元素的属性值?A. `getAttribute()`B. `setAttribute()`C. `removeAttribute()`D. `createElement()`答案:A3. CSS3 中,以下哪个属性用于设置元素的圆角?A. `border-radius`B. `border-color`C. `border-style`D. `border-width`答案:A二、简答题1. 请简述什么是响应式网页设计,并说明其重要性。
答案:响应式网页设计是一种使网站能够适应不同屏幕尺寸和设备的设计方法。
它通过使用流体网格布局、灵活的图片和媒体查询等技术,确保网页在各种设备上都能提供良好的用户体验。
响应式设计的重要性在于,随着移动设备的普及,用户越来越多地通过手机和平板电脑访问网站,因此,网站需要能够适应这些设备,以提供一致的用户体验。
2. 请解释什么是跨站脚本攻击(XSS)以及如何预防。
答案:跨站脚本攻击(XSS)是一种网络安全漏洞,攻击者通过在网页中注入恶意脚本,当其他用户浏览该页面时,恶意脚本会在用户的浏览器中执行,可能导致用户信息泄露、会话劫持等安全问题。
预防XSS的方法包括:对用户输入进行严格的验证和过滤,使用HTTP-only cookies,对输出进行编码,以及使用内容安全策略(CSP)等。
三、编程题1. 编写一个JavaScript函数,实现数组的去重功能。
```javascriptfunction uniqueArray(arr) {return [...new Set(arr)];}```2. 请使用CSS实现一个简单的响应式导航栏。
最新前端笔试题及答案一、单选题1. HTML5 中,用于绘制图形的元素是:A. `<canvas>`B. `<svg>`C. `<iframe>`D. `<video>`答案:A2. 下列哪个选项不是 CSS3 新增的特性?A. 圆角B. 多列布局C. 伪类 :hoverD. 渐变答案:C3. JavaScript 中,用于获取当前时间的函数是:A. `new Date()`B. `Date.now()`C. `getNow()`D. `getCurrentTime()`答案:A4. 下列哪个选项是 ES6 新增的字符串方法?A. `trim()`B. `includes()`C. `indexOf()`D. `replace()`答案:B5. 在 React 中,用于创建组件的函数是:A. `React.createClass()`B. `ponent`C. `createReactClass()`D. `React.createElement()`答案:B二、多选题1. 下列哪些是 CSS Flexbox 的属性?A. `flex-direction`B. `justify-content`C. `align-items`D. `float`答案:A, B, C2. 在 JavaScript 中,哪些方法可以用来实现深拷贝?A. `JSON.parse(JSON.stringify(object))`B. `Object.assign()`C. `Object.create()`D. `Object.clone()`答案:A三、判断题1. 在 HTML5 中,`<audio>` 和 `<video>` 标签只能在 Firefox 浏览器中播放。
答案:错误2. 使用 `const` 关键字声明的变量是不可修改的。
答案:错误3. 在 React 中,组件的生命周期方法 `componentDidMount()` 会在组件的更新阶段被调用。
招聘前端或移动开发岗位笔试题及解答(某大型集团公司)(答案在后面)一、单项选择题(本大题有10小题,每小题2分,共20分)1、以下哪种编程语言是专门为前端开发设计的?A. JavaB. CC. JavaScriptD. Python2、以下哪个不是HTML5引入的新特性?A. canvasB. SVGC. videoD. Flash3、以下哪种技术不属于前端开发中的客户端脚本语言?A. JavaScriptB. JavaC. PythonD. TypeScript4、在HTML5中,以下哪个元素用于创建可拖动的区域?A. <div>B. <canvas>C. <draggable>D. <area>5、以下哪种技术不是前端开发中常用的JavaScript库或框架?A. jQueryB. ReactC. AngularD. PHP6、在移动开发中,以下哪个不是原生应用开发的常见编程语言?A. SwiftB. JavaC. KotlinD. HTML57、以下哪个技术栈通常用于开发原生Android应用?A. React NativeB. FlutterC. AngularD. Vue.js8、在HTML5中,以下哪个标签用于创建视频播放器?A.B.C.D.9、题干:在HTML5中,哪个属性可以用来控制页面是否在加载时显示滚动条?A. scrollbarsB. scrollbar-widthC. scrollD. autoScroll 10、题干:以下哪个技术不是React.js中的核心概念?A. JSXB. Virtual DOMC. HooksD. jQuery二、多项选择题(本大题有10小题,每小题4分,共40分)1、以下哪些技术或框架是前端开发中常用的?()A、HTML5B、CSS3C、JavaScriptD、ReactE、Vue.jsF、jQueryG、AngularH、Swift(用于移动开发)2、以下哪些特性是移动开发中Android和iOS平台共有的?()A、触摸屏操作B、多点触控C、应用生命周期管理D、文件存储访问E、网络通信F、图形渲染G、传感器数据访问H、应用权限管理3、以下哪些技术栈通常用于移动端开发?()A. HTML5, CSS3, JavaScriptB. Android原生开发(Java/Kotlin)C. iOS原生开发(Objective-C/Swift)D. React NativeE. Flutter4、以下哪些是前端性能优化的常见方法?()A. 压缩图片和资源文件B. 使用CDN加速内容分发C. 减少DOM操作,使用DocumentFragmentD. 利用缓存机制,如Service WorkerE. 使用CSS3的硬件加速5、以下哪些技术或框架是前端开发中常用的?()A. HTML5B. CSS3C. JavaScriptD. ReactE. Vue.jsF. AngularG. Node.js6、在移动开发中,以下哪些平台支持原生应用开发?()A. iOSB. AndroidC. Windows PhoneD. HTML5E. FlutterF. React NativeG. Xamarin7、以下哪些技术或框架是前端开发中常用的?()A. HTML5B. CSS3C. JavaScriptD. ReactE. AngularF. Node.jsG. BootstrapH. jQuery8、以下哪些是移动开发中常见的平台和工具?()A. Android StudioB. XcodeC. FlutterD. React NativeE. SwiftF. KotlinG. IntelliJ IDEAH. Visual Studio9、以下哪些技术或框架常用于前端开发?()A. ReactB. AngularC. Vue.jsD. BootstrapE. JavaF. Kotlin 10、在移动应用开发中,以下哪些平台或技术是必须掌握的?()A. iOS SDKB. Android SDKC. FlutterD. SwiftE. KotlinF. Web技术三、判断题(本大题有10小题,每小题2分,共20分)1、HTML5的本地存储方式中,WebSQL已经被弃用,目前主流的是localStorage和sessionStorage。
前端开发笔试题及答案### 前端开发笔试题及答案#### 一、选择题1. 下列哪个不是HTML5的新特性?- A. 语义化标签- B. 地理位置- C. 表单控件- D. 内联框架(iframe)答案: D2. CSS3中,以下哪个属性用于实现圆角效果?- A. `border-radius`- B. `border-style`- C. `border-color`- D. `border-width`答案: A3. JavaScript中,以下哪个方法用于获取数组中的最大值? - A. `Math.max()`- B. `Array.max()`- C. `Array.maxValue()`- D. `Math.maxValue()`答案: A#### 二、简答题1. 解释什么是跨域请求,并说明如何解决跨域问题。
跨域请求指的是浏览器在执行Ajax请求时,由于同源策略的限制,不能向与当前页面不同源的服务器发送请求。
解决跨域问题的方法有: - JSONP:通过动态创建`<script>`标签,利用其不受同源策略限制的特性来获取数据。
- CORS:服务器端设置响应头`Access-Control-Allow-Origin`,允许特定的源访问资源。
- 代理服务器:在同源的服务器上设置代理,由代理服务器向目标服务器发送请求,再将结果返回给前端。
2. 描述一下事件冒泡和事件捕获的区别。
事件冒泡是指事件从最具体的元素(事件目标)开始,逐级向上传播到较为不具体的节点(文档)。
事件捕获则是事件从最不具体的节点(文档)开始,逐步向下传播到最具体的节点(事件目标)。
事件冒泡是默认的事件处理机制,而事件捕获可以通过设置`addEventListener`的第三个参数为`true`来启用。
#### 三、编程题1. 编写一个JavaScript函数,实现数组去重的功能。
```javascriptfunction uniqueArray(arr) {return [...new Set(arr)];}```2. 编写一个HTML和CSS代码片段,创建一个简单的响应式导航栏。
安卓前端笔试题及答案一、选择题1. 在Android开发中,以下哪个不是Activity生命周期的方法?A. onCreate()B. onStart()C. onResume()D. onDestroy()答案:D2. Android中,以下哪个是用于网络请求的类?A. SharedPreferencesB. AsyncTaskC. HttpURLConnectionD. BroadcastReceiver答案:C3. 在Android中,以下哪个不是布局文件?A. LinearLayoutB. RelativeLayoutC. ConstraintLayoutD. TextView答案:D4. Android中,以下哪个不是用于处理线程的类?A. ThreadB. HandlerC. BroadcastReceiverD. AsyncTask答案:C5. 在Android开发中,以下哪个不是用于数据存储的方式?A. SQLiteB. Shared PreferencesC. File StorageD. BroadcastReceiver答案:D二、简答题1. 请简述Android中Handler的作用。
答案:Handler在Android中用于在应用程序的主线程上执行任务和发送消息。
它允许应用程序在主线程上执行延迟操作或在后台线程上发送消息到主线程。
2. 请解释Android中的Context是什么,以及它的作用。
答案:Context是Android应用程序中的一个非常基本的接口,它提供了访问应用程序环境资源的途径。
Context用于启动活动、服务、广播接收器等,也可以访问系统服务和资源。
三、编程题1. 编写一个简单的Android Activity,该Activity包含一个按钮,当点击按钮时,会在Toast中显示“按钮被点击了”。
```javapublic class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);Button button = findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "按钮被点击了", Toast.LENGTH_SHORT).show();}});}}```2. 请编写一个Android服务(Service),该服务在后台运行,并周期性地执行一些任务。
以下是一些前端算法的笔试题及答案,供您参考:一、数组排序问题描述:给定一个整数数组,请你编写一个算法将该数组按照升序排序。
解题思路:可以使用快速排序、归并排序等常见排序算法,也可以手动实现冒泡排序、插入排序等简单排序算法。
二、链表操作问题描述:给定一个链表,请你编写一个算法将该链表反转。
解题思路:可以使用迭代或递归的方式,遍历链表一次,依次修改每个节点的指向,从而实现链表的反转。
三、二分查找问题描述:给定一个有序数组,请你编写一个算法在该数组中查找一个元素,并返回该元素的索引。
解题思路:可以使用二分查找算法,在有序数组中反复将查找范围缩小一半,直到找到目标元素或查找范围为空。
四、字符串匹配问题描述:给定两个字符串S和P,请你编写一个算法判断P是否是S的子串。
解题思路:可以使用KMP算法、Boyer-Moore算法等字符串匹配算法,也可以手动实现滑动窗口等简单算法。
五、动态规划问题描述:给定一个二维数组dp,其中dp[i][j]表示到达位置(i, j)所需的最小代价,请你编写一个算法求解dp数组的值。
解题思路:可以使用动态规划算法,将dp数组视为一个状态转移方程的表格,根据状态转移方程求解dp数组的值。
六、深度优先搜索(DFS)和广度优先搜索(BFS)问题描述:给定一个有向图或无向图,请你分别使用DFS和BFS遍历该图的所有节点。
解题思路:可以使用DFS或BFS算法遍历图的所有节点,根据图的拓扑结构选择合适的算法。
七、查找最大值和最小值问题描述:给定一组数字序列,请你编写一个算法找到该序列中的最大值和最小值。
解题思路:可以使用简单的循环遍历算法,依次比较每个元素的大小,找到最大值和最小值。
以上是部分前端算法的笔试题及答案,这些题目可以考察候选人的算法基础和思维能力,帮助他们更好地了解自己的编程能力和潜力。
web前端笔试题及答案一、HTML部分1. 什么是HTML?HTML(超文本标记语言)是一种用于创建网页的标准标记语言,它结合了文本、图像和其他内容,以及用于规定布局和样式的标签和属性。
2. HTML5中新增了哪些元素和功能?HTML5引入了很多新的元素和功能,包括但不限于以下几个:- 新的语义化标签,如`<header>`、`<footer>`、`<nav>`等,用于更好地描述页面内容的结构。
- 音频和视频元素`<audio>`和`<video>`,以及对应的控制API,使得在网页中嵌入和控制多媒体内容更加方便。
- 表单部分的增强,包括新增的输入类型(如日期、时间、邮箱等)和表单验证功能。
- WebGL、Canvas和SVG的支持,实现更丰富的图形和动画效果。
- 本地存储,如LocalStorage和SessionStorage,提供了在浏览器端存储数据的能力。
- 增强的地理定位、拖拽、离线应用等功能。
3. 请描述一下HTML中的块级元素和内联元素的区别。
- 块级元素:块级元素会独占一行或多行空间,可以设置宽度、高度、外边距和内边距等样式属性。
常见的块级元素包括`<div>`、`<p>`、`<h1>`-`<h6>`等。
- 内联元素:内联元素与其他元素在一行上并排显示,宽度和高度由内容决定,无法设置上述的样式属性。
常见的内联元素包括`<span>`、`<a>`、`<strong>`、`<em>`等。
4. 如何在HTML中嵌入图像?可以使用`<img>`元素来在HTML中嵌入图像,需要设置`src`属性为图像文件的URL,如:```<img src="image.jpg" alt="描述性文本">```其中,`alt`属性指定了在图像无法加载时的替代文本,可以提高可访问性。
程序员递归面试问题及解析面试例题2:八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
该问题是19 世纪著名的数学家高斯1850 年提出:在8×8 格的国际象棋盘上摆放 8 个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
[英国某著名计算机图形图像公司面试题]解析:递归实现 n 皇后问题。
算法分析:数组a、b、c 分别用来标记冲突,a 数组代表列冲突,从a[0]~a[7]代表第 0 列到第 7 列。
如果某列上已经有皇后,则为 1,否则为 0。
数组 b 代表主对角线冲突,为 b[i-j+7],即从 b[0]~b[14]。
如果某条主对角线上已经有皇后,则为 1,否则为 0。
数组 c 代表从对角线冲突,为 c[i+j],即从 c[0]~c[14]。
如果某条从对角线上已经有皇后,则为 1,否则为 0。
代码如下:#include <stdio.h>static char queen[8][8];static int a[8];static int b[15];static int c[15];static int iqueennum=0; //记录总的棋盘状态数void qu(int i);//参数i 代表行int main(){int iline,icolumn;//棋盘初始化,空格为*,放置皇后的地方为@for(iline=0;iline<8;iline++){a[iline]=0; //列标记初始化,表示无列冲突for(icolumn=0;icolumn<8;icolumn++)queen[iline][icolumn]='*';}//主、从对角线标记初始化,表示没有冲突for(iline=0;iline<15;iline++)b[iline]=c[iline]=0;qu(0);return 0;}void qu(int i){int icolumn;for(icolumn=0;icolumn<8;icolumn++){if(a[icolumn]==0&&b[i-icolumn+7]==0&&c[i+icolumn]==0) //如果无冲突{queen[i][icolumn]='@';//放皇后a[icolumn]=1;//标记,下一次该列上不能放皇后b[i-icolumn+7]=1;//标记,下一次该主对角线上不能放皇后c[i+icolumn]=1;//标记,下一次该从对角线上不能放皇后if(i<7) qu(i+1);//如果行还没有遍历完,进入下一行else //否则输出{//输出棋盘状态int iline,icolumn;printf("第%d 种状态为:\n",++iqueennum);for(iline=0;iline<8;iline++){for(icolumn=0;icolumn<8;icolumn++)printf("%c ",queen[iline][icolumn]);printf("\n");}printf("\n\n");}//如果前次的皇后放置导致后面的放置无论如何都不能满足要求,则回溯,重置queen[i][icolumn]='*';a[icolumn]=0;b[i-icolumn+7]=0;c[i+icolumn]=0;}}}。
前端Js笔试题及答案一、选择题1. 在JavaScript中,以下哪个选项是正确的?A. 变量声明时必须初始化B. 函数声明和函数表达式都可以提升C. 只有全局变量可以提升D. 函数声明可以提升,函数表达式不可以答案:B2. 下列哪个选项不是JavaScript的原始数据类型?A. NumberB. StringC. ObjectD. Boolean答案:C3. 以下哪个方法可以用来获取一个数组中的最大值?A. max()B. sort()C. indexOf()D. reduce()答案:D二、填空题1. 在JavaScript中,使用________关键字可以创建一个全局变量。
答案:var2. 使用________方法可以将一个数组的所有元素连接成一个字符串。
答案:join3. JavaScript中的________对象用于存储和操作日期。
答案:Date三、简答题1. 请解释JavaScript中的闭包是什么?答案:闭包是指一个函数能够访问其定义时的作用域链,即使在其定义的作用域外执行时仍然可以访问。
2. 请描述JavaScript中的原型继承机制。
答案:JavaScript中的原型继承机制是基于原型链的。
每个对象都有一个原型对象,对象可以通过原型链访问其原型对象的属性和方法。
四、编程题1. 编写一个JavaScript函数,接收一个数组作为参数,返回数组中所有偶数的和。
答案:```javascriptfunction sumEvenNumbers(arr) {return arr.reduce((accumulator, currentValue) => {return currentValue % 2 === 0 ? accumulator + currentValue : accumulator;}, 0);}```2. 编写一个JavaScript函数,实现一个简单的深拷贝功能。
前端笔试题及答案1. HTML/CSS 题目1.1 请解释HTML5中的语义化标签有哪些,并给出至少3个例子。
答案:HTML5中的语义化标签用于定义文档的结构,常见的语义化标签包括`<header>`、`<footer>`、`<article>`、`<section>`、`<nav>`、`<aside>`等。
其中,`<header>`用于定义文档或区段的页眉;`<footer>`用于定义文档或区段的页脚;`<article>`用于定义独立的内容区块。
1.2 CSS选择器有哪些类型?答案:CSS选择器主要有以下类型:- 标签选择器:如`div`、`p`、`span`等。
- 类选择器:如`.className`。
- ID选择器:如`#idName`。
- 属性选择器:如`[type="text"]`。
- 伪类选择器:如`:hover`、`:active`、`:nth-child(n)`等。
- 伪元素选择器:如`::before`、`::after`等。
2. JavaScript 题目2.1 解释JavaScript中的闭包是什么,并给出一个示例。
答案:闭包是一个函数和声明该函数的词法环境的组合。
闭包允许函数访问其定义时的作用域链,即使在其外部调用时。
示例如下:```javascriptfunction outerFunction() {var outerVariable = 'I am outer';function innerFunction() {console.log(outerVariable);}return innerFunction;}var inner = outerFunction();inner(); // 输出:I am outer```2.2 如何在JavaScript中实现深拷贝?答案:实现深拷贝的方法有多种,可以使用递归函数、JSON方法、结构赋值(Object.assign)等。
【递归】经典递归前端⾯试题/** 递归套路总是两个相加第⼀个+后⾯的所有* 优点:代码更简洁* 缺点:形成了闭包,递归层次太深时容易造成栈溢出* 1. 根据题⽬搭架⼦,定义好⼊参、出参* 2. 考虑并处理极端情况* 3. 考虑正常情况(就是递归即函数调⽤⾃⾝)* **//**1. 拿⼀对刚出⽣的⼩兔⼦编故事。
假设,⼀对刚出⽣的⼩兔⼦,第⼀个⽉没有繁殖能⼒,两个⽉后⽣下⼀对兔⼦。
假设所有的兔⼦都不死,那么10⽉后有多少对兔⼦?所经历的⽉数 1 2 3 4 5 6 7 8 9 10兔⼦对数 1 1 2 3 5 8 13 21 34 55 // 斐波拉契数列前两个数之和等于第三个数6⽉兔⼦数量 = 5⽉数量 + 4⽉数量**/const fBArray = (month) => {if (month <= 2) {return1;}return fBArray(month - 1) + fBArray(month - 2);};console.log(fBArray(3));/**2. 使⽤递归求和**/let arr3 = [1, 2, 3];let sumArr = (arr) => {if (!arr.length) {return0;} else if (arr.length === 1) {return arr[0];} else if (arr.length === 2) {return (arr[0] + arr[1]);}const newArr = arr.shift();return (newArr + sumArr(arr));};console.log(arr3);console.log(sumArr(arr3));console.log(arr3);/**3. 使⽤递归阶乘 4x3x2x1**/let factNum = (num) => {if (!num) {return0;} else if (num <= 2) {return num;}return num * factNum(num - 1);};factNum(4);// 4. 将数组扁平化并去掉重复数据,最终得到⼀个降序且不重复的数组let arr1 = [1, [3, 3, 4], [5, 6, 5, 6, 17, 7, [8, 9, [10, 11, [12, 13, 14, 18, 16, 18, [15]]]]], [16]];let flatArr = (arr) => {let newArr = [];for (let i = 0; i < arr.length; i++) {if (arr[i] instanceof Array) {// newArr = [...newArr, ...flatArr(arr[i])] 第⼀步扁平化得到⼀维数组flatArr(arr[i]).forEach(item => { // 第⼆步去重!newArr.includes(item) && (newArr = [...newArr, item]);})} else {newArr.indexOf(arr[i]) === -1 && (newArr = [...newArr, arr[i]]);}}return newArr.sort((a, b) => b - a); // 第三步排序};console.log(flatArr(arr1));// 5. 使⽤递归实现九九乘法表let numTable = (num = 9) => {let resultNum = '';if (num <= 0) {return num;} else if (num > 9 || num === 1) {return console.log(1 + ' * ' + num + ' = ' + num);}for (let i = 1; i <= num; i++) {resultNum += i + ' * ' + num + ' = ' + (i * num) + '\t'; }numTable(num - 1);console.log(resultNum);return0;};numTable();// 普通乘法表let arrNumTable = (num = 9) => {let arrNum = '';for (let i = 1; i <= num; i++) {for (let j = 1; j <= i; j++) {arrNum += j + ' * ' + i + ' = ' + (i * j) + '\t';}arrNum += '\n';}console.log(arrNum);return0;};arrNumTable();。
web前端开发笔试题及答案一、单选题(每题2分,共20分)1. HTML5中,用于定义文档类型和字符编码的标签是:A. <!DOCTYPE html>B. <html>C. <head>D. <meta charset="UTF-8">2. 下列哪个属性用于控制图片的宽度?A. srcB. altC. widthD. height3. CSS中,下列哪个属性用于设置元素的背景颜色?A. colorB. backgroundC. background-colorD. fill4. JavaScript中,用于获取当前日期的函数是:A. Date()B. new Date()C. getDate()D. getToday()5. 在JavaScript中,用于实现循环遍历数组的常用方法是:A. forB. whileC. forEachD. map二、多选题(每题3分,共15分)6. 下列哪些是HTML5的新特性?A. 语义化标签B. 表单控件C. 媒体播放D. 画布(Canvas)7. CSS中,哪些属性可以设置元素的边框样式?A. borderB. border-styleC. border-widthD. border-color8. JavaScript中,哪些是常用的数据类型?A. NumberB. StringC. BooleanD. Undefined9. 在JavaScript中,哪些方法可以用于数组元素的添加?A. push()B. unshift()C. splice()D. concat()10. 下列哪些是前端性能优化的方法?A. 压缩CSS和JavaScript文件B. 合并CSS和JavaScript文件C. 使用CDN加速静态资源加载D. 延迟加载非首屏资源三、简答题(每题5分,共10分)11. 请简述HTML和XHTML的主要区别。
java算法⾯试题:递归算法题1递归算法题1⼀个整数,⼤于0,不⽤循环和本地变量,按照n,2n,4n,8n的顺序递增,当值⼤于5000时,把值按照指定顺序输出来。
例:n=1237则输出为:1237,2474,4948,9896,9896,4948,2474,1237,提⽰:写程序时,先致谢按递增⽅式的代码,写好递增的以后,再增加考虑递减部分。
package com.swift;public class Digui_Dizeng_Dijian {public static void main(String[] args) {/** ⼀个整数,⼤于0,不⽤循环和本地变量,按照n,2n,4n,8n的顺序递增,当值⼤于5000时,把值按照指定顺序输出来。
例:n=1237 则输出为: * 1237, 2474, 4948, 9896, 9896, 4948, 2474, 1237,*/int n = 1237;dizeng(n);System.out.println(sum(100));}//⽆返回值递归public static void dizeng(int n) {System.out.println(n);if(n>9000) {dijian(n);}if (n < 5000) {dizeng(n * 2);}}public static void dijian(int n) {System.out.println(n);if(n==1237) {System.exit(0);}else {dijian(n/2);}}//有返回值递归public static int sum(int num) {if (num > 1) {return num + sum(num - 1);} else {return 1;}}}。
技术前端⾯试题(⼀):递归解析递归基本上是⼀个必考的算法题,它是实现程序计算过程中描述过程的基础模式之⼀,可见这是极其重要的。
前端考察这个的原因,多数是在于看看⾯试者对于⼀些基础算法的了解程度,以及思考程度。
题⽬:⼀个数组“var meta = [1,2,[3,4,[5]],6,[7,[8,9,[10,11,[12]]]]];”,通过递归的⽅式依次取出这个数组中的数据。
最简单的⽅式是设定⼀个函数,传⼊这个数组,然后判断其中的值是否为数组。
如果为数组,那么继续调⽤当前的函数,将这个值传⼊。
如果不为数组,那么就将值return出来,或者push到某个新数组⾥。
function fillArray(array,result){var count = array.length;var i = 0;for(;i<count;++i){var temp = array[i];if(Array.isArray(temp)){fillArray(temp,result);} else {result.push(array[i]);}}}var result = [];fillArray(meta,result);// 递归的结果console.log('递归处理的结果:',result);显然上述不是⼀个最优的答案,这个时候,⾯试官想要看的可能就是你主动思考的能⼒了,想⼀想,这个是不是可以优化⼀下,如果可以怎么办?我们先从结果来看:如果⼀个结果已经确定,在第⼆次调⽤时是否可以从内存⾥直接读,⽽不需要再缓存?设计好⼀个简单的Key/Value缓存在循环时,增加⼀个条件判断,如果缓存中存在,那么直接从缓存读取结果var resultMap = {};function fillArrayII(array,result){var count = array.length;var i = 0;if (!count){return [];}for(;i<count;++i){var temp = array[i];var g = resultMap[temp];if(g){result.push(g);} else {if (Array.isArray(temp)){fillArrayII(temp,result);} else {result.push(temp);}}}}var date1 = new Date();var time1 = date1.getTime();var r = [];fillArrayII(meta,r);var date2 = new Date();var time2 = date2.getTime();console.log('no cache time : ',time2 - time1);var date3 = new Date();var time3 = date3.getTime();var f = [];fillArrayII(meta,f);var date4 = new Date();var time4 = date4.getTime();console.log('cache time : ',time4 - time3);⼤家可以看⼀下优化的结果:⽆缓存的420ms,⽽缓存过的393ms,⾜⾜提升了27ms,虽然这个空间不⼤,但是如果当递归⾜够深时,可以节省⼤量的时间。
2021年中级前端笔试⾯试题总结(含答案解析)记录本⼈在⼴州⾯试中遇到的⼀些问题(主要是技术⼀⾯),公司中⼩企业居多,也有⼤⼚(⾮BAT)。
岗位⼀般写的中级前端开发或1~3年经验岗位。
问题主要选取⼀些⾼频和基础的问题。
(问题的回答只是本⼈的理解,⾮参考答案,有些答案只给个提⽰,详解可⾕歌百度或在掘⾦内搜索相关⽂章)题⽬考察频率指相关问题的考察频率,并⾮只是提到的点。
JavaScript基础1、声明提升类问题(考察频率:⾼)变量声明和函数声明都会提升,但函数会提升到变量前。
具体解释可参考《你不知道的JavaScript(上卷)》2、js存储⽅式(考察频率:中)cookiesessionStoragelocalStorageindexedDB3、什么情况下会遇到跨域,怎么解决?(考察频率:⾼)同源策略是浏览器的⼀个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对⽅资源。
若地址⾥⾯的协议、域名和端⼝号均相同则属于同源。
jsonp跨域、nginx反向代理、node.js中间件代理跨域、后端设置http header、后端在服务器上设置cors。
4、Promise中的执⾏顺序(考察频率:⾼)let promise = new Promise(function(resolve, reject) {console.log('Promise');resolve();});promise.then(function() {console.log('resolved.');});console.log('Hi!');// Promise// Hi!// resolved上⾯代码中,Promise 新建后⽴即执⾏,所以⾸先输出的是Promise。
然后,then⽅法指定的回调函数,将在当前脚本所有同步任务执⾏完才会执⾏,所以resolved最后输出。
5、JavaScript事件循环机制相关问题(考察频率:⾼)事件循环机制的概念关键字:单线程⾮阻塞、执⾏栈、事件队列、宏任务(setTimeout()、setInterval())、微任务(new Promise())可参考:宏任务、微任务、同步任务的执⾏顺序setTimeout(function () {console.log(1);});new Promise(function(resolve,reject){console.log(2)resolve(3)}).then(function(val){console.log(val);})console.log(4);// 2// 4// 3// 1先按顺序执⾏同步任务,Promise新建后⽴即执⾏输出2,接着输出4,异步任务等同步任务执⾏完后执⾏,且同⼀次事件循环中,微任务永远在宏任务之前执⾏。
前端笔试题递归含解答共5道题目一:计算斐波那契数列的第n 项。
```javascript
function fibonacci(n) {
if (n <= 1) {
return n;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
// 测试
console.log(fibonacci(5)); // 输出:5
```
题目二:实现一个阶乘函数。
```javascript
function factorial(n) {
if (n === 0 || n === 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
// 测试
console.log(factorial(4)); // 输出:24
```
题目三:实现一个递归函数,将数组元素相加。
```javascript
function sumArray(arr, n) {
if (n <= 0) {
return 0;
} else {
return sumArray(arr, n - 1) + arr[n - 1];
}
}
// 测试
console.log(sumArray([1, 2, 3, 4, 5], 3)); // 输出:6
```
题目四:实现一个递归函数,反转字符串。
```javascript
function reverseString(str) {
if (str === "") {
return str;
} else {
return reverseString(str.substr(1)) + str[0];
}
}
// 测试
console.log(reverseString("Hello")); // 输出:olleH
```
题目五:实现一个递归函数,判断字符串是否是回文。
```javascript
function isPalindrome(str) {
str = str.toLowerCase().replace(/[^a-zA-Z0-9]/g, "");
if (str.length <= 1) {
return true;
} else if (str[0] === str[str.length - 1]) {
return isPalindrome(str.substr(1, str.length - 2));
} else {
return false;
}
}
// 测试
console.log(isPalindrome("A man, a plan, a canal, Panama")); // 输出:true ```。