面试题

编程珠玑:插入排序优化

余生长醉 提交于 2021-01-14 02:42:45
插入排序的精髓就是首先将第一个元素视为有序子数组x[0...0],然后插入x[1]...x[n-1].思想很简单,代码也很简单,简单的代码有没有优化的空间呢?编程珠玑中提供了几个优化后的方案,效率提高了70%之多。 简单的实现(sort1) void insertSort(int *array, size_t size) { for(size_t i = 1; i < size; i++) { for(int j = i; j > 0 && array[j - 1] > array[j]; j--) { swap(array[j - 1], array[j]); } } } 优化思路 内循环的swap函数可能不如内联函数快些,所以第一步优化将该swap函数展开,据作者说,展开后效率提高了60%。 优化代码(sort2) void insertSort(int *array, size_t size) { for(size_t i = 1; i < size; i++) { for(int j = i; j > 0 && array[j - 1] > array[j]; j--) { int t = array[j]; array[j] = array[j - 1]; array[j - 1] = t; } } } 优化思路 由于内循环中总是给变量t赋同样的值(x[i]的初始值)

Android面试题

泄露秘密 提交于 2020-11-08 16:24:19
初级 Android 应用工程师 面试题 1. Android 的基本架构以及四大主键 2.Activity 的启动模式有哪些?这些启动模式的具体含义? 3.Android 中 Parcelable 接口的作用?以及和 Serializable 接口的区别? 4.Android 切换到主线程有几种方式?分别都是什么? 5.Android 在单线程模型中 Message 、 Handler 、 Message Queue 、 Looper 之间的关系?以及在 Android 4.0 之后它们的变化? 6.Android 中,给自己的 APP 实现一个数据库需要继承哪个基类?需要实现基类中的哪两个方法?这两个方法分别在什么时候调用? 7.Android 中,当需要向 sqlite 数据库插入大量数据时,有什么办法提高 sql 执行的效率?(至少说 2 条) 8.Android 中 Context 的作用?在同一个虚拟存储空间中能同时存在两个 application 么?如果能,有哪些方式?如果不能,请解释原因? 9. 谈谈你常用的 Java 设计模式,以及你所知晓 Android 在设计中所用到的设计模式。 10. 谈谈面向对象的几个基本特征。 11.TCP 协议和 UDP 协议的区别? 12.HTTP 协议和 HTTPS 协议的区别? 13. 谈谈 JAVA 集合框架。 14.

[每日一题]对比Java中的String、StringBuffer、StringBuilder

帅比萌擦擦* 提交于 2020-04-22 02:46:46
今天来个简单的题目,轻松一下:) 相信很多人对这个问题都不陌生,只要是个Java程序员,肯定就用过这几个类: 1、String是个不可变对象,这就意味着每次字符串拼接都是创建了新的实例 2、StringBuilder和StringBuffer都是专门用来做字符串拼接的 3、StringBuffer是线程安全的,StringBuilder是线程不安全的 4、线程安全是要付出代价的,所以StringBuffer比StringBuilder要慢一点点 OK,上面四条是不是倒背如流了?那问个具体问题: 1、以下虚构出来的三种写法哪个速度最快?哪个最差? String str = "I" + "love" + "Java" + "Python" + ... + "Golang"; String str = new StringBuilder("I").append("love").append("Java").append("Python").append(...).append("Golang").toString(); String str = new StringBuffer("I").append("love").append("Java").append("Python").append(...).append("Golang").toString(); 解答:因为都是字符串字面量

iOS中级面试题一

不问归期 提交于 2020-04-07 04:15:14
一份面试题的意义 我把收到的私信和一百多条评论都仔细读了遍,发现大家之所以会关注大致出于以下几个原因: 刚毕业的同学最近在找工作面试,想刷题增加面试通过率。 有一定的工作经历的同学,想测试下自己的iOS水平,看自己能卖多少钱。 本身iOS基础不错,抱着技多不压身心态补充知识的。 土豪老板就差一个程序员了,想找份带标准答案的面试题找真爱。 除了第三类同学心态正确外,其他的都高估面试题的作用了。面试题只是武功招式,知识体系才是内功心法。刚入门记住的都是招式,但招式何其多,面试的时候总会有遗漏和盲区,内功心法才是一通万通,能以不变应万变。这份面试题你答不全不能说明你iOS不及格,你全答对了你也不能上天。真正应该关注的是这份题背后所包含的理论知识体系。帖子里还有其他不少优质回答,涵盖候选人心态,习惯,基础知识,产品理解等各个方面,都值得一读。当然啦,既然出了题,就得有答案,就有它的目标群体。主要考察对象是从事iOS开发 1~3年的同学。不需要全部答对,能对一半以上问题侃侃而谈就不错了。 评论区百态 评论区有各路神仙吐槽,有的说难,有的说太容易,还有美工和安卓党出现。大家七嘴八舌的讨论意见很杂,但从中可以看出不少同学心态都不正确。技术这条路无穷无尽,广度和深度的拓展都需要长年累月的积累,不存在什么够用就好了,用的时候再查下,没必要了解这么深。技术人员的视野和耐力决定在这条路上你能够走多远

小博老师解析Java经典面试题 ——常见Http状态号

落花浮王杯 提交于 2020-03-24 07:25:39
3 月,跳不动了?>>> [ 引言 ] 我们在 Java Web开发中,经常会接触到Http状态号,404、500等这些在我们开发过程中,耳熟能详(当然,小博老师希望大家越少遇到越好)。那么大家有没有去详细了解过,究竟Http状态号有哪些吗?本文小博老师就给大家罗列下,我们经常会遇见的 Http状态号 。 [ 2XX状态号 ] 2xx状态号一般表示“成功”,当然这种情况下,我们开发人员就不怎么关心它啦。 200 正常:请求已完成。 201 正常:紧接 POST 命令。 202 正常:已接受用于处理,但处理尚未完成。 203 正常:部分信息 — 返回的信息只是一部分。 204 正常:无响应 — 已接收请求,但不存在要回送的信息。 [ 3XX状态号 ] 这类状态号一般指的是,请求服务器成功,但是在服务端转发了客户的请求,由非原客户请求的URL进行处理。 301 已移动 : 请求的数据具有新的位置且更改是永久的。 302 已找到 : 请求的数据临时具有不同 URI。 303 请参阅其它 : 可在另一 URI 下找到对请求的响应,且应使用 GET 方法检索此响应。 304 未修改 : 未按预期修改文档。 305 使用代理 : 必须通过位置字段中提供的代理来访问请求的资源。 306 未使用 : 不再使用;保留此代码以便将来使用。 [ 4XX状态号 ]

编程珠玑:向量旋转(旋转交换)

大兔子大兔子 提交于 2020-03-19 13:04:16
3 月,跳不动了?>>> 问题描述 请将一个具有n个元素的一维向量向左旋转i个位置。例如,假设n=8,i=3,那么向量abcdefgh旋转之后得到向量defghabc。简单编码使用一个具有n个元素的中间向量分n步即可完成此作业。你可以仅使用几十字节的微小内存,花费与n成比例的时间来旋转该向量吗? 解决思路 方案一: 将向量x中的前i个元素复制到一个临时数组中,接着将余下的n-i个元素左移i个位置,然后再将前i个元素从临时数组中复制回x中的后面位置。 该方案使用了i个额外的位置,如i足够大,过于浪费空间。 方案二: 定义一个函数来将x向左旋转一个位置,然后调用该函数i次。 该方案需要将数组移到i将,过于浪费时间。 方案三: 先将x[0]移临时变量t中,然后将x[i]移到x[0]中,x[2i]移到x[i]中,依次类推,直到我们又回到从x[0]中提取元素,不过在这时我们要从t中提取元素,然后结束该过程。当i=3,n=12时,该阶段将以下面的次序移到各个元素。 如果该过程不能移动所有的元素,那么我们再从x[1]开始移动,一直依次进行下去,直到移动了所有的元素时为止。 该方案过于精巧,像书中所说的一样堪称巧妙的杂技表演,非常容易出错。 方案四: 旋转向量x实际上就是将向量ab的两个部分交换为向量ba,这里a代表x的前i个元素。假设a比b短。将b分割成b l 和b r ,使b r

前端开发面试题--html

☆樱花仙子☆ 提交于 2020-02-29 02:34:57
Doctype作用?严格模式与混杂模式如何区分?它们有何意义? doctype是告诉浏览器我的html使用哪个版本的html协议写的,让浏览器按照神明的协议执行。 区别:严格模式是浏览器根据规范去显示页面,混杂模式是一种向后兼容的方式去显示。 意义:决定浏览器如何去渲染网站即浏览器使用哪种规范去解析网页。触发: 浏览器根据doctype是否存在和使用的是那种dtd来决定。 HTML5 为什么只需要写 <!DOCTYPE HTML>? 因为h5不基于SGML,因此不需要对DTD进行引用。但是需要doctype来规范浏览器的行为(让浏览器按照他的方式来运行)。而html4.0.1基于SGML,需要对DTD进行引用,才能告知浏览器文档所使用的文档类型 行内元素有哪些?块级元素有哪些? 空(void)元素有那些? css中规定,每一个元素都有display属性。确定该元素的类型,每一个元素都有默认的display值,比如div的display为block:块级元素。span的display为inline:行内元素。 行内元素有:a b span img input select strong 块级元素:div ul li ol p dl dt dd h1 h2 h3… 知名的空元素: <br> <hr> <img> <input> <link> <meta> 鲜为人知的还有: <area>

C/C++程序员应聘常见面试题深入剖析

邮差的信 提交于 2019-12-20 03:34:58
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> C/C++程序员应聘常见面试题深入剖析 1.引言   本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。  许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程 度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到strcpy 函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。   分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题的深入剖析则可进一步增强自身的内功。 2.找错题   试题1: void test1() {   char string[10];   char* str1 = "0123456789";   strcpy( string, str1 ); }   试题2: void test2() {   char string[10], str1[10];   int i;   for(i=0; i<10; i++)   {    str1 = 'a'

【面试题】实现memcpy函数

不打扰是莪最后的温柔 提交于 2019-12-14 23:33:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 面试中如问到memcpy的实现,那就要小心了,这里有陷阱。 先看下标准memcpy()的解释: void *memcpy(void *dst, const void *src, size_t n); //If copying takes place between objects that overlap, the behavior is undefined. 注意下面的注释,对于地址重叠的情况,该函数的行为是未定义的。 事实上所说的陷阱也在于此,自己动手实现memcpy()时就需要考虑地址重叠的情况。 另外,标准库也提供了地址重叠时的内存拷贝函数:memmove(),那么为什么还要考虑重写memcpy()函数呢? 因为memmove()函数的实现效率问题,该函数把源字符串拷贝到临时buf里,然后再从临时buf里写到目的地址,增加了一次不必要的开销。 下面给出memcpy()的实现,为了与标准库函数区分,我们实现其包裹函数: #include <stdio.h> #include <stdlib.h> #include <string.h> void *Memcpy(void *dst, const void *src, size_t size); int main(int argc, char *argv[]

mysql基础知识理解和sql题讲解分析面试实战(四)之函数讲解和字符串的操作

与世无争的帅哥 提交于 2019-12-10 03:24:35
mysql基础知识理解和sql题讲解分析面试实战(四)之函数讲解和字符串的操作 函数的创建 字符串函数的操作 用例 查询表road 下的roadname的紧挨着第一个括号的是大写字母或数字的记录 创建表 CREATE TABLE `road` ( `id` int(10) NOT NULL, `roadname` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 插入数据 创建函数 用mysql下创建需添加 注意:mysql 安装后默认函数是关闭的 查看创建函数的功能是否开启: mysql> show variables like '%func%'; +-----------------------------------------+-------+ | Variable_name | Value | +-----------------------------------------+-------+ | log_bin_trust_function_creators | ON | +-----------------------------------------+-------+ 1 row in set (0.02 sec) 如果Value处值为OFF,则需将其开启