看准网 · 题目详情

搜狗 java开发 面试

1、写strcpy函数。检查点:1、空异常是否考虑到;2、字符串是否以‘\0’结尾;3、const src ;4、返回指针,为了链式表达式2、hashcode()和equals()      a)要判断两个对象是否相等,或者是否是同一个对象,要比较两个过程一是比较地址,二是比较内容。      b)比较地址时,使用hashcode方法,相当于给对象编码,类似文件的md5(可能会有冲突),返回int类型。     c)比较内容时,使用equals,返回bool。    d)在hashmap中,判断key是否重复,首先先看看hashcode是否相同,再看equals是否相同。    e)对一个自定义的类,判断实例是否相同,再覆盖equal方法的时候也要覆盖hashcode方法。3、String、StringBuilder 和StringBuffer区别String:字符串常量,对String更改值相当于生成新的String对象。当无引用的对象多的时候,垃圾收集器开始工作,影响执行速度。用于操作少量的数据。StringBuffer:对对象本身进行操作。主要方法append,insert。线程安全,用在多线程操作字符串。StringBuilder:对对象本身操作,线程非安全,用于单线程操作字符串。4、jdk中,你常用的方法?从包的角度想:5、设计模式:单例,工厂,责任链,写一下单例      单例:6、mysql,InnoDB,1000万的数据,如何就select * from user where city=?,alive=? order by age desc 建立索引。mysql一张表存放1000万的数据,我想肯定这个设计是有问题的,因为mysql的性能就摆在那里,千万级数据使用mysql存储,是没有优势的。面试官强调的是数据多,如果不建立索引,查询会很慢。innodb只支持b+树索引,进一步分为clustered index 与 secondary index。在一次查询中,只能使用一个索引。clustered index的叶结点保存着整行的数据。如果,定义了primary key,则clustered index就是primary key的索引;如果没有定义primary key mysql会选中第一个仅有not null列的unique索引作为主键,并把此索引当作clustered index使用;如果没找到这样的列,innodb会创建一个6字节的RowId作为主键。所以每张表有且只有一个clustered index。
Secondary index的叶结点不包括行的全部数据,包含键值以外还包括一个bookmark,可以告诉innodb到什么地方可以找到相对应的完整行数据,还保存了主键的健值。Secondary index包含主键,但不包含完整的行数据,所以innodb总是会先从secondary index的叶节点判断是否能得到所需的数据。
1.       搜索的索引列,不一定是所要选择的列。也就是说,最适合索引的列是出现在where子句中的列,或者连接子句中指定的列,而不是出现在select关键字后的选择列表中的列。2.       使用唯一索引。考虑某列的分布,索引的列的基数越大,索引的效果越好。例如,对性别M/F列做索引没多大用处。3.       使用短索引。如果是对字符串进行索引,如果有可能应该指定前缀长度。4.       利用最左前缀。尽量将使用频繁且过滤效果好的字段放“左边”5.       不要过度索引。6.       Innodb默认会按照一定的顺序保存数据,如果明确定义了主键,则按照主键顺序保存。如果没有主键,但有唯一索引,就按照唯一索引的顺序保存。如果有几个列都是唯一的,都可以作为主键的时候,为了提高查询效率,应选择最常用访问的列作为主键。另外,innodb的secondary index都会保存主键的键值,所有主键要尽可能选择较短的数据类型。可以看出,应当尽量避免对主键的修改。经过dba的测试,保证主键的递增可以提高插入性能。1.       对于创建的多列索引,只要查询的条件中用到了最左边的列,索引一般就会被使用。2.       对于使用like的查询,后面如果是常量并且只有%号不在第一个字符,索引才可能被使用。3.       如果对大文本进行搜索,应该使用全文索引,而不是使用like ‘%...%’. 但不幸的是innodb不支持全文索引。4.       如果列名是索引,使用 index_column is null将使用索引。Oracle是不行的。5.       如果mysql估计使用索引比全表扫描更慢,最不会使用索引。6.       如果使用memory/head表并且where条件中不使用”=”进行索引列,那么不会用到索引。Head表只有在”=”的时候才会使用索引。7.       用or分割开的条件,如果or前的条件中的列有索引,而后面列中没有索引,那么涉及到的索引都不会被用到。8.       不是多列索引的第一部分不会走索引。9.       以%开始的like不会走索引10.   如果列是字符串,那么一定要在where条件中把字符串常量值用引号引起来,否则不能走索引。因为,mysql默认把输入的常量值进行转换以后才进行检索。11.   经过普通运算或函数运算后的索引字段不能使用索引12.   不等于操作不能使用索,<>、not in等13.   Order by 优化:某些情况下,mysql可以使用一个索引满足order by,而不需要额外的排序。Where条件与order by 使用相同的索引,并且order by的顺序和索引顺序相同,并且order by的字段都是升序或者都是降序。SELECT * FROM t1 ORDER BY key_part1,key_part2,... ;SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2DESC;SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC;但是以下情况不使用索引:SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC ;--order by 的字段混合 ASC 和 DESCSELECT * FROM t1 WHERE key2=constant ORDER BY key1 ;-- 用于查询行的关键字与 ORDER BY 中所使用的不相同SELECT * FROM t1 ORDER BY key1, key2 ;-- 对不同的关键字使用 ORDER BY   以上是我搜集的mysql方面的索引知识。我当时想建立组合索引,也就是复合索引,即(city, alive, age)索引按照age升序。7、Https的过程。     这个过程,我自己的感觉时,当时看懂了。过段时间又忘了。理解的不够透彻吧。     HTTPS的两个主要过程:身份验证和通信加密。身份验证1、浏览器向服务器发送请求,请求信息中包含机密方式和加密算法,其中加密方式包括对称算法+密钥交换算法+摘要算法2、服务器回复浏览器,自己选择的加密方式,再把自己的证书和公钥发送给浏览器3、浏览器验证证书是否可信,主要验证5点,一是证书是否是根证书的颁发机构锁颁发;二是证书是否在吊销列表中;三是证书是否过期;四是证书的域名是否和网站域名相似;     五是网站是否在黑名单列表。4、服务器验证客户端的信息,例如手机,随机串等等 身份验证成功,或者允许继续通信,进行数据加密传输1、浏览器产生随机的密码,用服务器提供的公钥加密,用hash计算握手消息。把消息发给服务器2、服务器接收到信息后,使用自己的私钥解密,并计算握手信息的hash,如果与客户端传来的相同,此握手过程结束。这个过程是确保双方之间获得一致密码。         8、常见的对称和非对称加密算法。      对称加密:加密和解密过程中用同一个密钥。AES、DES、RC5、IDEA(分组加密),RC4(序列加密)      非对称加密:密钥对成对出现,RSA,DSA、DH9、常用的hash算法。散列算法:MD5,SHA1,Base64,CRC
最后的评价是:“一周内等通知”!没戏。。。
3 0 1063

评论(0)

您还可以输入3000

首页
顶部

帮助 反馈 登录 注册 导航

Copyright © 2020 kanzhun.com
看准网 版权所有

违法和不良公司举报邮箱:kz-report@kanzhun.com 举报电话:400-612-9066

客服邮箱:support@kanzhun.com