241. 在一个二维01矩阵中找到全为1的最大正方形,返回其面积。

样例 10 10 0 10 111 11111 10 0 10 返回4



public int max Square (int [] [] matrix; { // write your code here int row = matrix, length; /#丁大小 int line = matrix [0]. length. //列大小 //一个与matrix相同大小的辅助数组 int [] [] tmp = new int [row] [line]; W matrix的第一行和第一列元素直接存放到 for(int i=0;i<row;i++){ tmp [i] [0] = matrix [i] [0:; for (int i=0;Kline;i++) { tmp [0] [i] = matrix [0] [i:; for(int i=l;i<row;i++){ for(int j=l;j<line;j++)[ if(matrix[i] [j] == 1){ tmp[i] [j]= Math, min (Math, mm ( tmp[i-l] [j], tmp[i] [j-1]:, tmp[i-l] [j-1]) + 1; if(matrix[i] [j] == 0){ tmp[i] [j] = 0; int max=0; //记录tmp中最大元素的值(tmp中元素值表示正方形的边长) for(int i=0;i<row;i++){ for(int j=0;j<line;j++)[ if (tmp[i] [j] > max)[ max = tmp[i] [j]. return max*max;


242.常见的HTTP状态码

1XX系列响应代码仅在与HTTP服务器沟通时使用。

100("Continue") 这是对HTTP LBYL (1 o ok-b ef or e-you-1 e sp )请求的一个可能的响应。该响应代码表明: 客户端应重新发送初始请求,并在请求中附上第一次请求时未提供的(可能很大或者包含敏 感信息的)表示。客户端这次发送的请求不会被拒绝。对LBYL请求的另一个可能的响应是 417("Expectation Failed")。 请求报头:要做一个LBYL请求,客户端必须把Expect请求报头设为字符串 〃100-continue气除此以外,客户端还需要设置其他一些报头,服务器将根据这些报头决定 是响应100还是417。 101("Switching Protocols") 当客户端通过在请求里使用Upgrade报头,以通知服务器它想改用除HTTP协议之外的 其他协议时,客户端将获得此响应代码。101响应代码表示“行,我现在改用另一个协议了”。 通常HTTP客户端会在收到服务器发来的101响应后关闭与服务器的TCP连接。101响应代 码意味着,该客户端不再是一个HTTP客户端,而将成为另一种客户端。 尽管可以通过Upgrade报头从HTTP切换到HTIPS,或者从HTIP1.1切换到某个未来的 版本,但实际使用Upgrade报头的情况比较少。Upgrade报头也可用于HTTP切换到一个完 全不同的协议(如IRC)上,但那需要在Web服务器切换为一个IRC服务器的同时,Web客 户端切换为一个IRC的客户端,因为服务器将立刻在同一个TCP连接上幵始使用新的协议。 请求报头:客户端把Upgrade报头设置为一组希望使用的协议。 响应报头:如果服务器同意切换协议,它就返回一个Upgrade报头,说明它将切换到那 个协议,并附上一个空白行。服务器不用关闭"P链接,而是直接在该"P连接上幵始使用 新的协议。 2XX:成功 2XX系列响应代码表明操作成功了。 200("0K") —般来说,这是客户端希望看到的响应代码。它表示服务器成功执行了客户端所请求的 动作,并且在2XX系列里没有其他更适合的响应代码了。 实体主体:对于GET请求,服务器应返回客户端所请求资源的一个表示。对于其他请求, 服务器应返回当前所选资源的一个表示,或者刚刚执行的动作的一个描述。 -201 ("Created") 当服务器依照客户端的请求创建了一个新资源时,发送此响应代码。 响应报头:Location报头应包含指向新创建资源的规范URI。 实体主体:应该给出新创建资源的描述与链接。若已经在Location报头里给出了新资 源的URI,那么可以用新资源的一个表示作为实体主体。 -202("Accepted") 客户端的请求无法或将不被实时处理。请求稍后会被处理。请求看上去是合法的,但在 实际处理它时有出现问题的可能。 若一个请求触发了一个异步操作,或者T•需要现实世界参与的动作,或者一个需要很 长时间才能完成且没必要让Web客户端一直等待的动作时,这个相应代码是一个合适的选 择。 响应报头:应该把未处理完的请求暴露为一个资源,以便客户端稍后查询其状态。 Location报头可以包含指向该资源的URI。 实体主体:若无法让客户端稍后查询请求的状态,那么至少应该提供一个关于何时能处 理该请求的估计。 203(^Non"Authoritative Information^; 这个响应代码跟200 —样,只不过服务器想让客户端知道,有些响应报头并非来自该服 务器一他们可能是从客户端先前发送的一个请求里复制的,或者从第三方得到的。 响应报头:客户端应明白某些报头可能是不准确的,某些响应报头可能不是服务器自己 生成的,所以服务器也不知道其含义。 204("No Content") 若服务器拒绝对PUT、POST或者DELETE请求返回任何状态信息或表示,那么通常采用 此响应代码。服务器也可以对GET请求返回此响应代码,这表明“客户端请求的资源存在, 但其表示是空的”。注意与304 ("Not Modified")的区别。204常常用在Ajax应用里。服务 器通过这个响应代码告诉客户端:客户端的输入已被接受,但客户端不应该改变任何UI元 素。 实体主体:不允许。 205("Reset Content") 它与204类似,但与204不同的是,它表明客户端应重置数据源的视图或数据结构。假 如你在浏览器里提交一个表单,并得到响应代码204,那么表单里的各个字段值不变, 可以继续修改它们;但假如得到的响应代码2D5,那么表单里的各个字段将被重置为它们的 初始值。从数据录入方面讲:204适合对单条记录做一系列编辑,而205适于连续输入一组 记录。 206("Partial Content") 它跟200类似,但它用于对部分GET请求(即使用Range请求报头的GET请求)的响应。 部分GET请求常用于大型二进制文件的断点续传。 请求报头:客户端为Range请求报头设芝一个值。 响应报头:需要提供Date报头。ETag扌艮头与Content-Location报头的值应该跟正常 GET请求相同。 若实体主体是单个字节范围(byte range),那么HTTP响应里必须包含一个 Content-Range报头,以说明本响应返回的是表示的哪个部分,若实体主体是一个多部分实 体(multipart entity)(即该实体主体由多个字节范围构成),那么每一个部分都要有自 己的 Content-Range 报头。 实体主体:不是整个表示,而是一个或者多个字节范围。 3XX重定向 3XX系列响应代码表明:客户端需要做些额外工作才能得到所需要的资源。它们通常用 于GET请求。他们通常告诉客户端需要向另一个URI发送GET请求,才能得到所需的表示。 那个URI就包含在Location响应报头里。 300("Multiple Choices") 若被请求的资源在服务器端存在多个表示,而服务器不知道客户端想要的是哪一个表示 时,发送这个响应代码。或者当客户端没有便用Accept-対艮头来指定一个表示,或者客户 端所请求的表示不存在时,也发送这个响应代码。在这种情况下,一种选择是,服务器返回 一个首选表示,并把响应代码设置为200,不过它也可以返回一个包含该资源各个表示的URI 列表,并把响应代码设为300 o 响应报头:如果服务器有首选表示,那么它可以在Location响应报头中给出这个首选 表示的URI。跟其他3XX响应代码一样,客户端可以自动跟随Location中的URI。 实体主体:一个包含该资源各个表示的UKI的列表。可以在表示中提供一些信息,以便 用户作出选择。 301("Moved Permanently") 服务器知道客户端试图访问的是哪个资源,但它不喜欢客户端用当前URI来请求该资 源。它希望客户端记住另一个听1,并在今后的请求中使用那个新的听1。你可以通过这个 响应代码来防止由于URI变更而导致老URI失效。 响应报头:服务器应当把规范URI放在Location响应报头里。 实体主体:服务器可以发送一个包含新反1的信息,不过这不是必需的。 302(“Found") 重要程度:应该了解,特别市编写客户端时。但我不推荐使用它。 这仓响应代码市造成大多数重定向方面的混乱的最根本原因。它应该是像307那样被处 理。实际上,在HTTP 1.0中,响应代码302的名称是” Moved Temporarily",不幸的是, 在实际生活中,绝大多数客户端篁它像303 —样处理。它的不同之处在于当服务器为客户端 的PUT, POST或者DELETE请求返回302响应代码时,客户端要怎么做。 为了消除这一混淆,在HTIP1.1中,该响应代码被重命名为"Found",并新加了一个响 应代码307。这个响应代码目前仍在广泛使用,但它的含义市混淆的,所以我建议你的服务 发送307或者303,而不要发送302.除非你知道正在与一个不能理解303或307的HTIP1.0 客户端交互。 响应报头:把客户端应重新请求的那个URI放在Location报头里。 实体主体:一个包含指向新听1的链接的超文本文档(就像301—样)。 303("See Other°) 请求已经被处理,但服务器不是直接返回一个响应文档,而是返回一个响应文档的URK 该响应文档可能是一个静态的状态信息,也可能是一个更有趣的资源。对于后一种情况,303 是一种令服务器可以“发送一个资源的表示,而不强迫客户端下载其所有数据"的方式。容 户端可以向Location报头里的URI发送GET请求,但它不是必须这么做。 303响应代码是一种规范化资源URI的好办法。一个资源可以有多个URIs,但每个资源 的规范URI只有一个,该资源的所有其他URIs都通过303指向该资源的规范URI,例如: 303 可以把一个对 http: //ww. example, com/software/current, tar. gz 的请求重定向到 http://www. example.com/software/1.0.2.tar. gzo 响应报头:Location报头里包含资源的URI。 实体主体:一个包含指向新听1的链接的超文本文档。 304("Not Modified") 这个响应代码跟204 (〃N。Content")类似:响应实体主体都必须为空。但204用于没有 主体数据的情况,而304用于有主体数据,但客户端已拥有该数据,没必要重复发送的情况。 这个响应代码可用于条件HTTP请求(conditional HTTP request).如果客户端在发送GET 请求时附上了一个值为Sunday的If-Modified-Since报头,而客户端所请求的表示在服务 器端自星期日(Sunday)以来一直没有改变过,那么服务器可以返回一个304响应。服务器 也可以返回一个200响应,但由于客户端已拥有该表示,因此重复发送该表示只会白白浪费 宽带。 响应报头:需要提供Date报头。Etag与Content-Location报头的值,应该跟返回200 响应时的一样。若Expires, Cache-Control Vary报头的值自上次发送以来已经改变,那 么就要提供这些报头。 实体主体:不允许。 305("Use Proxy") 这个响应代码用于告诉客户端它需要再发一次请求,但这次要通过一个HTTP代理发送, 而不是直接发送给服务器。这个响应代码使用的不多,因为服务器很少在意客户端是否使用 某一特定代理。这个代码主要用于基于代理的镜像站点。现在,镜像站点(如 http://ww.exajnple.com.mysite.com/)包含跟原始站点(如 http://ww.exajnple.com/) —样的内容,但具有不同的听1,原始站点可以通过307把客户端重新定向到镜像站点上。 假如有基于代理的镜像站点,那么你可以通E把http://proxy.mysite.com/ig为代理,使 用跟原始URI (http://ww. example, com/)—样的URI来访问镜像站点。这里,原始站点 example, com可以通过305把客户端路由到f 地理上接近客户端的镜像代理。web浏览器 一般不能正确处理这个响应代码,这是导致335响应代码用的不多的另一个原因。 响应报头:Location报头里包含代理的URI。 306未使用 重要程度:无 306响应代码没有在HTTP标准中定义过。 307("Temporary Redirect") 请求还没有被处理,因为所请求的资源不在本地:它在另一个URI处。客户端应该向那 个听1重新发送请求。就GET请求来说,它只是请求得到一个表示,该响应代码跟303没有 区别。当服务器希望把客户端重新定向到一个镜像站点时,可以用307来响应GET请求。但 对于POST, PUT及DELETE请求,它们希望服务器执行一些操作,307和303有显著区别。 对POST, PUT或者DELETE请求响应303表明:操作已经成功执行,但响应实体将不随本响 应一起返回,若客户端想要获取响应实体主体,它需要向另一个听1发送GET请求。而307 表明:服务器尚未执行操作,客户端需要向Location报头里的那个URI重新提交整个请求。 响应报头:把客户端应重新请求的那个呱1放在Location报头里。 实体主体:一个包含指向新听1的链接的超文本文档。 4XX:客户端错误 这些响应代码表明客户端出现错误。不是认证信息有问题,就是表示格式或HTTP库本 身有问题。客户端需要自行改正。 400("Bad Request") 这是一个通用的客户端错误状态,当其他4XX响应代码不适用时,就采用400。此响应 代码通常用于“服务器收到客户端通过PUT或者POST请求提交的表示,表示的格式正确, 但服务器不懂它什么意思”的情况。 实体主体:可以包含一个错误的描述文档。 401("Unauthorized") 客户端试图对一个受保护的资源进行操作,却又没有提供正确的认证证书。客户端提供 了错误的证书,或者根本没有提供证书。这里的证书(credential)可以是一个用户名唇 码,也可以市一个API key,或者一个认证令牌。客户端常常通过向一个URI发送请求,并 查看收到401响应,以获知应该发送哪种证王,以及证书的格式。如果服务器不想让未授权 的用户获知某个资源的存在,那么它可以谎报一个404而不是401。这样做的缺点是:客户 端需要事先知道服务器接受哪种认证一这将导致HTTP摘要认证无法工作。 响应报头:WW-Authenticate报头描述服务器将接受哪种认证。 实体主体:一个错误的描述文档。假如疑务用户可通过“在网站上注册”的方式得到证 书,那么应提供一个指向该注册页面的链接。 402("Payment Required") 除了它的名字外,HTTP标准没有对该响应的其他方面作任何定义。因为目前还没有用 于HTTP的微支付系统,所以它被留作将来使用。尽管如此,若存在一个用于HTTP的微支付 系统,那么这些系统将首先出现在web服务领域。如果想按请求向用户收费,而且你与用户 之间的关系允许这么做的话,那么或许用得上这个响应代码。 注:该书印于2008年 403("Forbidden") 客户端请求的结构正确,但是服务器不想处理它。这跟证书不正确的情况不同一若证书 不正确,应该发送响应代码401。该响应代码常用于一个资源只允许在特定时间段内访问, 或者允许特定IP地址的用户访问的情况。403暗示了所请求的资源确实存在。跟401 —样,若服务器不想透露此信息,它可以谎报一个404。既然客户端请求的结构正确,那为 什么还要把本响应代码放在4XX系列(客户端错误),而不是5XX系列(服务端错误)呢? 因为服务器不是根据请求的结构,而是根据请求的其他方面(比如说发出请求的时间)作出 的决定的。 实体主体:一个描述拒绝原因的文档(耳选)。 404("Not Found") 这也许是最广为人知的HTTP响应代码了。404表明服务器无法把客户端请求的URI转 换为一个资源。相比之下,410更有用一些。web服务可以通过404响应告诉客户端所请求 的URI是空的,然后客户端就可以通过向该URI发送PUT请求来创建一个新资源了。但是 404也有可能是用来掩饰403或者401. 405("Method Not Allowd") 客户端试图使用一个本资源不支持的HTTP方法。例如:一个资源只支持GET方法,但 是客户端使用PUT方法访问。 响应报头:Allow报头列出本资源支持哪些HTTP方法,例如:Allow: GET, POST 406("Not Acceptable") 当客户端对表示有太多要求,以至于服务器无法提供满足要求的表示,服务器可以发送 这个响应代码。例如:客户端通过Accept头指定媒体类型为application/j son+hic,但是 服务器只支持application/jsono服务器的另一个选择是:忽略客户端挑剔的要求,返回 首选表示,并把响应代码设为200。 实体主体:一个可选表示的链接列表。 407(“Proxy Authentication Required”; 只有HTTP代理会发送这个响应代码。它跟401类似,唯一区别在于:这里不是无权访 问web服务,而是无权访问代理。跟401—样,可能是因为客户端没有提供证书,也可能是 客户端提供的证书不正确或不充分。 请求报头:客户端通过使用Prox厂Authorization报头(而不是Authorization)把证 书提供给代理。格式跟Authrization —样。 响应报头:代理通过Prox厂Authentic ate报头(而不是WW-Authentic ate)告诉客户 端它接受哪种认证。格式跟WW-Authenticate —样。 408("Reqeust Timeout") 假如HTTP客户端与服务器建立链接后,却不发送任何请求(或从不发送表明请求结束 的空白行),那么服务器最终应该发送一个4。8响应代码,并关闭此连接。 409 ("Conflict") 此响应代码表明:你请求的操作会导致服务器的资源处于一种不可能或不一致的状态。 例如你试图修改某个用户的用户名,而修改后的用户名与其他存在的用户名冲突了。 响应报头:若冲突是因为某个其他资源的存在而引起的,那么应该在Location报头里 给出那个资源的URI。 实体主体:一个描述冲突的文档,以便容户端可以解决冲突。 410("Gone") 这个响应代码跟404类似,但它提供的有用信息更多一些。这个响应代码用于服务器知 道被请求的听1过去曾指向一个资源,但该资源现在不存在了的情况。服务器不知道 该资源的新听1,服务器要是知道该URI的话,它就发送响应代码301.410和310 一样, 都有暗示客户端不应该再请求该听1的意思,不同之处在于:410只是指出该资源不存在, 但没有给出该资源的新听1。RFC2616建议“对短期的推广服务,以及属于个人但不继续在 服务端运行的资源〃采用410. 411("Length Required") 若HTTP请求包含表示,它应该把Content-Length请求报头的值设为该表示的长度(以 字节为单位)。对客户端而言,有时这不太方但(例如,当表示是来自其他来源的字节流时)。 所以HTTP并不要求客户端在每个请求中部提供Content-Length报头。但HTTP服务器 可以要求客户端必须设置该报头。服务器可以中断任何没有提供Content-Length报头的请 求,并要求客户端重新提交包含Content-Length报头的请求。这个响应代码就是用于中断 未提供Content-Lenght报头的请求的。假如客户端提供错误的长度,或发送超过长度的表 示,服务器可以中断请求并关闭链接,并返回响应代码413。 412(^Precondition Failed") 客户端在请求报头里指定一些前提条件,并要求服务器只有在满足一定条件的情况下才 能处理本请求。若服务器不满足这些条件,就返回此响应代码。If-Unmodified-Since是一 个常见的前提条件。客户端可以通过PUT请求来修改一个资源,但它要求,仅在自客户端最 后一次获取该资源后该资源未被别人修改过才能执行修改操作。若没有这一前提条件,客户 端可能会无意识地覆盖别人做的修改,或者导致409的产生。 请求报头:若客户但设置了 If "Mat ch, If-None-Match 或 If-Urunodified-Since 报头, 那就有可能得到这个响应代码o If-None-Match稍微特别一些。若客户端在发送GET或HEAD 请求时指定了 If-None-Match,并且服务器不满足该前提条件的话,那么响应代码不是412 而是304,这是实现条件HTTP GET的基础。若客户端在发送PUT, POST或DELETE请求时指 定了 If-None-Match,并且服务器不满足该前捏条件的话,那么响应代码是412.另外,若容 户端指定了 If-Match或If-Unmodified-Since (无论采用什么HTTP方法),而服务器不滴足 该前提条件的话,响应代码也是412。 413("Request Entity Too Large") 这个响应代码跟411类似,服务器可以用它来中断客户端的请求并关闭连接,而不需要 等待请求完成。411用于客户端未指定长度的情况,而413用于客户端发送的表示太大,以 至于服务器无法处理。客户端可以先做一个LBYL (10ok-before-you-leap)请求,以免请 求被413中断。若LBYL请求获得响应代码为100,客户端再提交完整的表示。 响应报头:如果因为服务器方面临时谒到问题(比如资源不足),而不是因为客户端方 面的问题而导致中断请求的话,服务器可以把Retry-After报头的值设为一个日期或一个间 隔时间,以秒为单位,以便客户端可以过段旺间重试。 414 ("RequesLURI Too Long") HTTP标准并没有对URI长度作出官方限刽,但大部分现有的web服务器都对URI长度 有一个上限,而web服务可能也一样。导致UF.I超长的最常见的原因是:表示数据明明是该 放在实体主体里的,但客户端却把它放在了 U^I里。深度嵌套的数据结构也有可能引起URI 过长。 415(^Unsupported Media Type") 当客户端在发送表示时采用了一种服务畧无法理解的媒体类型,服务器发送此响应代 码。比如说,服务器期望的是XML格式,而容户端发送的确实JSON格式。 如果客户端采用的媒体类型正确,但格式有问题,这时最好返回更通用的400。 416("Requestd Range Not Satisfiable*) 当客户端所请求的字节范围超出表示的实际大小时,服务器发送此响应代码。例如:你 请求一个表示的1-100字节,但该表示总共只用99字节大小。 请求报头:仅当原始请求里包含Range报头时,才有可能收到此响应代码。若原始请求 提供的是H-Range报头,则不会收到此响应代码。 响应报头:服务器应当通过Content-Range报头告诉客户端表示的实际大小。 417("Expectation Failed") 此响应代码跟100正好相反。当你用LBYL请求来考察服务器是否会接受你的表示时, 如果服务器确认会接受你的表示,那么你将获得响应代码100,否则你将获得417。 5XX服务端错误 这些响应代码表明服务器端出现错误。一般来说,这些代码意味着服务器处于不能执行 客户端请求的状态,此时客户端应稍后重试。有时,服务器能够估计客户端应在多久之后重 试。并把该信息放在Reh厂After响应报头里。 5XX系列响应代码在数量上不如4XX系列度,这不是因为服务器错误的几率小,而是因 为没有必要如此详细--对于服务器方面的问题,客户端是无能为力的。 500(“Internal Server Error 这是一个通用的服务器错误响应。对于大多数web框架,如果在执行请求处理代码时谒 到了异常,它们就发送此响应代码。 501("Not Implemented") 客户端试图使用一个服务器不支持的HTTP特性。 最常见的例子是:客户端试图做一个采用了拓展HTTP方法的请求,而普通web服务器 不支持此请求。它跟响应代码405比较相似,405表明客户端所用的方法是一个可识别的方 法,但该资源不支持,而501表明服务器根本不能识别该方法。 502("Bad Gateway") 只有HTTP代理会发送这个响应代码。它表明代理方面出现问题,或者代理与上行服务 器之间出现问题,而不是上行服务器本身有叵題。若代理根本无法访问上行服务器,响应代 码将是504。 503("Service Unavailable") 此响应代码表明HTTP服务器正常,只是F层web服务服务不能正常工作。最可能的原 因是资源不足:服务器突然收到太多请求,以至于无法全部处理。由于此问题多半由客户端 反复发送请求造成,因此HTTP服务器可以选择拒绝接受客户端请求而不是接受它,并发送 503响应代码。 响应报头:服务器可以通过Retry-After报头告知客户端何时可以重试。 504(“Gateway Timeout^) 跟502类似,只有HTTP代理会发送此响应代码。此响应代码表明代理无法连接上行服 务器。 505("HTTP Version Not Supported")


243. 25匹马,5个赛道,最少赛多少次找岀前三没有计时, 只有先后.

7次。理由如下: 1. 先分开赛5组(A-E), 5次,每组的最后两名肯定会被淘汰,(-10)o 2. 5组第一名赛一次,假设A1>B1>C1> D1>E1,那么Al肯定是总体第一名。则D, E全部被淘汰(-6).现在需要在剩下的里面职2个,那么C2,C3,B3也会被淘汰(-3)。 3. 那么就剩ITA2, A3, Bl, B2, C1 (,冉募一次,取前两名(-3)。 最多7次比呑,前5次总共淘汰10匹,箕6次淘汰9匹,第7次淘汰3匹。总共淘汰 22匹。


244. 计算机为什么能识别二进制机器码?

1、计算机的理论基础 布尔代数是计算机的理论基础, Boolean (布尔运算)通过对两个以上的物体进行并集、差集、交集的运算,从而得到 新的物体形态。系统提供了 4种布尔运算方式:Union (并集)'Intersection (交集)和 Subtraction (差集,包括和B-A两种). 1) 与逻辑和乘法 乘法原理中自变量是因变量成立的必要芸件,与逻辑的定义正好和乘法原理的描述一 致,所以与逻辑和乘法对应。 2) 或逻辑和加法 加法原理中自变量是因变量成立的充分芸件,或逻辑的定义正好和加法原理的描述一 致,所以或逻辑和加法对应。 乘法就是广义的与逻辑运算,加法就是广义的或逻辑运算。与逻辑运算可以看作是乘法 的特例。或逻辑运算可以看作是加法的特例。 总之,乘法原理、加法原理可以看作是与逻辑和或逻辑的定量表述;与逻辑和或逻辑可 以看作是乘法原理、加法原理的定性表述。 通俗来讲:这是一门运用”与“”或“” “非〃 “假〃 “真”来描述任意两个量(可以 是任何具体事物的或者抽象概念)的逻辑关系。

2、 逻辑代数与计算机电路 应用于逻辑中,解释。为假,1为真,△为与,V为或,的非。涉及变量和布尔运 算的表达式代表了陈述形式,两个这样的表达式可以使用上面的公理证实为等价的,当且仅 当对应的陈述形式是逻辑等价的。由于逻辑彳燉小的逻辑单元与二进制高度契合,再加上电 路最为简单的开和关恰好也对应。和1,于是就有了依据逻辑代数理论创建一系列的电路在 表达基础的逻辑理论,这就是计算机具有判断、计算能力的基础。

3、 二进制机器识别过程 根据前面两点可以知道,如果选用二进制原理作为计算机的判断计算依据,将会使得电 路制造的实现成为可能,但是自然界是不存在二进制的,为了处理这个问题,统一人为规定 将其他非二进制数据表示成二进制机器码,供计算机读取。然而。随着对数据的处理能力要 求越来越高,处理数据也越来越大,为了解决这个问题,汇编器出现,替代了将非二进制数 据转化为二进制数据,但是这远远不足,为了更好处理,直接将硬件与汇编器组合,单独发 展更高级汇编器(实质就是现在熟知的各类程序),这样,硬件与软件彻底分开。实质上就 是将数据转化与判断和数据的录入、存储、输出彻底分幵,使计算机的使用者可以完全不必 再关注计算机的具体运算。 也就是说,计算机为什么能够识别二进制机器码,是因为有以逻辑代数原理制造的数字 电路,为什么选用二进制已经解释过了。同旺,也应该明白,为何程序会出现假,1为真, A为与,V为或,呐非这五个元素,算法对何而来,指的就是优化数据之间的逻辑代数 关系。


245.如何理解mac寻址?

曲C地址是网卡的物理地址,每块网卡都有一个属于自己的独有的MAC地址,如 00-0A-EB-97-5F-65。 IP地址就是我们常见的202.106.46.151 192.168.1.1这样的。 通过MC地址寻找主机是MC地址寻址,通过IP地址寻找主机叫IP地址寻址。它们适 用于不同的协议层。


246. 如何理解IO多路复用的三种机制Select, Poll, Epoll?

1. Select 首先先分析一下select函数 int select ( int maxfdpi, fd_set *readset, fd_set *wxiteset, fd_set *exceptset, const struct timeval *timeout ); 【参数说明】 int maxfdpl指定待测试的文件描述字个数,它的值是待测试的最大描述字加1。 fd_set *readset , fd_set *writeset , fd_set *exceptset fd_set可以理解为一个集合,这个集合中存放的是文件描述符(file descriptor),即 文件句柄。中间的三个参数指定我们要让内核测试读、写和异常条件的文件描述符集合。 如果对某一个的条件不感兴趣,就可以把它设为空指针。 const struct timeval *timeout timeout B知内核等待所指定文件描述符集合中的任 何一个就绪可花多少时间。其timeval结构用于指定这段时间的秒数和微秒数。 【返回值】 int若有就绪描述符返回其数目,若超旺则为。,若出错则为-1 select运行机制 select ()的机制中提供一种fd.set的数据结构,实际上是一个long类型的数组,每一 个数组元素都能与一打开的文件句柄(不管是Socket句柄,还是其他文件或命名管道或 设备句柄)建立联系,建立联系的工作由程序员完成,当调用select ()时,由内核根 据10状态修改fd.set的内容,由此来通知执行了 select ()的进程哪一 Socket或文件 可读。 从流程上来看,使用select函数进行10请求和同步阻塞模型没有太大的区别,甚至还 多了添加监视socket,以及调用select函数的额外操作,效率更差。但是,使用select 以后最大的优势是用户可以在一个线程内同时处理多个socket的10请求。用户可以注 册多个socket,然后不断地调用select读职被激活的socket,即可达到在同一个线程 内同时处理多个I。请求的目的。而在同步阻塞模型中,必须通过多线程的方式才能达 到这个目的。 select机制的问题 每次调用select,都需要把fd_set集合从用户态拷贝到内核态,如果fd_set集合很 大时,那这个开销也很大 同时每次调用select都需要在内核遍历传递进来的所有fd.set,如果fd.set集合很 大时,那这个开销也很大 为了减少数据拷贝带来的性能损坏,内核对被监控的f d_set集合大小做了限制,并且 这个是通过宏控制的,大小不可改变(限制为1024). 2. Poll poll的机制与select类似,与select任本质上没有多大差别,管理多个描述符也是 进行轮询,根据描述符的状态进行处理,但是POU没有最大文件描述符数量的限制。 也就是说,Poll只解决了上面的问题3,并没有解决问题1, 2的性能开销问题。 下面是P11的函数原型: int poll(struct pollfd *fds, nfds_t nfds, int timeout); typedef struct pollfd {

添加图片注释,不超过 140 字(可选)

//需要被检测或选择的文件描述符 //对文件描述符fd上感兴趣的事件 //文件描述符fd上当前实际发生的事件 } pollfd_t; poll改变了文件描述符集合的描述方式,使用了 pollfd结构而不是select的fd_set 结构,使得Poll支持的文件描述符集合限制远大于select的1024 【参数说明】 struct pollfd *fds fds是一个struct pollfd类型的数组,用于存放需要检测其状 态的socket描述符,并且调用poll函数之后fds数组不会被清空;一个pollfd结构 体表示一个被监视的文件描述符,通过传递fds指示pollO监视多个文件描述符。其 中,结构体的events域是监视该文件描述符的事件掩码,由用户来设置这个域,结构 体的revents域是文件描述符的操作结果事件掩码,内核在调用返回时设置这个域 nfds_t nfds记录数组fds中描述符的总数量 【返回値】 int函数返回fds集合中就绪的读、写,或出错的描述符数量,返回。表示超时,返回 Epoll epoll在Linux2.6内核正式提出,是基于事件駆动的I/O方式,相对于select来说, epoll没有描述符个数限制,使用一个文件描述符管理多个描述符,将用户关心的文件 描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一 次。 Linux中提供的epoll相关函数如下: int epoll_create(int size); int epoll_ctl( int epf d, int op, int fd, struct epoll_event *event ); int epoll_wait( int epf d, struct epoll_event * events, int maxevents, int timeout 1) . epoll_create函数创建一个epoll句柄,参数size表明内核要监听的描述符数量。 调用成功时返回一个epoll句柄描述符,失败时返回-1。 2) .epoll_ctl函数注册要监听的事件类型。四个参数解释如下: epfd表示epoll句柄 □P表示fd操作类型,有如下3种 EPOLL_CTL_ADD 注册新的 fd 到 epfd 中 EPOLL_CTL_MOD修改已注册的fd的监听事件 EPOLL_CTL_DEL 从 epfd 中删除一个 fd fd是要监听的描述符 event表示要监听的事件 epoll_event结构体定义如下: struct epoll_event { uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */ }; typedef union epoll_data { void *ptr; int fd; uint32_t u32; _uint64_t u64; } epoll_data_t; 3). epoll.wait函数等待事件的就绪,成功时返回就绪的事件数目,调用失败时返回 -1,等待超时返回0。 ⑴epfd是epoll句柄 ⑵events表示从内核得到的就绪事件集合 (3)maxevents告诉内核events的大小 ⑷timeout表示等待的超时事件 epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用 10接口 select/poll的増强版本,它能显著提高程序在大量并发连接中只有少量活跃 的情况下的系统CPU利用率。原因就是获职事件的时候,它无须遍历整个被侦听的描述 符集,只要遍历那些被内核10事件异步唤塑而加入Ready队列的描述符集合就行了。 epoll除了提供select/poll那种10事件的水平触发(Level Triggered)夕卜,还提供 了边缘触发(Edge Triggered),这就使得用户空间程序有可能緩存10状态,减少 ep 01 l_wai t /ep o 1 l_pwai t的调用,提高应用程序效率。 ⑴水平触发(LT):默认工作模式,即当epoll-wait检测到某描述符事件就绪并 通知应用程序时,应用程序可以不立即处理该事件;下次调用epoll.wait时,会 再次通知此事件 ⑵边缘触发(ET):当epoll_wait检测到某描述符事件就绪并通知应用程序时, 应用程序必须立即处理该事件。如果不处理,下次调用epoll.wait时,不会再次 通知此事件。(直到你做了某些操作导致该描述符变成未就绪状态了,也就是说边 缘触发只在状态由未就绪变为就绪旺只通知一次)。 LT和ET原本应该是用于脉冲信号的,可能用它来解释更加形象。Level和Edge指的就 是触发点,Level为只要处于水平,那么就一直触发,而Edge则为上升沿和下降沿的 时候触发。比如:0->1就是Edge, 1->1就是Levelo ET模式很大程度上减少了 epoll事件的触发次数,因此效率比LT模式下高。


247. 给定一个数,算岀平均值是整数的算法。例如;5平均2 份,则结果为,2和支8平均为3份,则为2, 3, 3; 11平均4份,则为2, 3, 3, 3; 15平均3份,则为;5, 5, 5o



public class Divide { public static int sum(int[] res)[ int sum=0; for(int i:res) { sum += i; return sum; public static void aveDivide(int n, int n) { if (n <= 0){ return; int res [] = new int[n]; int i = 0; while(true) { if(sum(res) == m) { break; } else { res[i%n] x 1; if public static void main(String f] args) { aveDivide(15,10);


248. linux内核调度详细说一下

i.i、调度策略 定义位于 liniax/include/uapi/linux/sched. h 中 SCHED项ORMAL:普通的分时进程,使用的f air_sched_class调度类 SCHED_FIFO:先进先出的实时进程。当调用程鳶把CPU分配给进程的时候,它把该进程 描述符保留在运行队列链表的当前位置。此调度策略的进程一旦使用CPU则一直运行。如果 没有其他可运行的更高优先级实时进程,进程就继续使用CPU,想用多久就用多久,即使还 有其他具有相同优先级的实时进程处于可运行状态。使用的是rt.sched.class调度类。 SCHED_RR:时间片轮转的实时进程。当调度程序把CPU分配给进程的时候,它把该进程 的描述符放在运行队列链表的末尾。这种策略保证对所有具有相同优先级的SCHED_RR实时 进程进行公平分配CPU时间,使用的rt.sched.class调度类 SCHED_BATCH:是SCHED项0RMAL的分化版本。采用分时策略,根据动态优先级,分配 CPU资源。在有实时进程的时候,实时进程优先调度。但针对呑吐量优化,除了不能抢占外 与常规进程一样,允许任务运行更长时间,更!子使用高速緩存,适合于成批处理的工作,使 用的fair_shed_class调度类 SCHED_IDLE:优先级最低,在系统空闲旺运行,使用的是idle_sched_class调度类, 给。号进程使用 SCHED_DE.WLINE:新支持的实时进程调度策略,针对突发型计算,并且对延迟和完成时 间敏感的任务使用,基于EDF (earliest deadline first),使用的是dl_sched_class调 度类。 1.2、调度触发

编辑

添加图片注释,不超过 140 字(可选)

调度的触发主要有两种方式,一种是本地定时中断触发调用scheduler.tick ©数,然 后使用当前运行进程的调度类中的task_tick,另外一种则是主动调用schedule,不管是哪 —种最终都会调用到—schedule函数,该函数调用pick_netx_task,通过rq->nr.running ==rq->cfS.h_nz_running判断出如果当前运行队列中的进程都在cfs调度器中,则直接调 用cfs的调度类(内核代码里面这一判断使用)likely说明大部分情况都是滴足该条件的)。 如果运行队列不都在cfs中,贝通过优先级 stop_s ched_c1as > dl_s ched_c1ass"t_s che d_c1ass"air_s ched_class~>idle_s ched_ class遍历选出下一个需要运行的进程。然后进程任务切换。 处于TASK_RUNNIMG状态的进程才会被进程调度器选择,其他状态不会进入调度器。系 统发生调度的时机如下: &调用 cond_r e s che d ()时 &显式调用schedule ()时 &从中断上下文返回时 当内核开启抢占时,会多出几个调度时机如下: d在系统调用或者中断上下文中调用preemJenableO时(多次调用系统只会在最后一 次调用时会调度) d在中断上下文中,从中断处理函数返回到可抢占的上下文时 2、CFS调度 该部分代码位于 1 inux /k erne 1 /s che d/f air. c 中 定义了 const struct sched_c 1 assf air_sched_c 1 ass,这个是 CFS 的调度类定义的对 象。其中基本包含了 CFS调度的所有实现。 CFS实现三个调度策略: 1> SCHED项ORMAL这个调度策略是被常规任务使用 2> SCHED_BATCH这个策略不像常规的任务那样频繁的抢占,以牺牲交互性为代价 下,因而允许任务运行更长的时间以更好的利用緩存,这种策略适合批处理 3> SCHED.IDLE这是nice值甚至比19还弱,但是为了避免陷入优先级导致问题, 这个问题将会死锁这个调度器,因而这不是一个真正空闲定时调度器 CFS调度类: n enqueue-task (-)当任务进入runnable状态,这个回调将把这个任务的调度实体 (entity)放入红黑树并且増加nz.running变量的值 n de queue* ask (…)当任务不再是runnab le状态,这个回调将会把这个任务的调度 实体从红黑树中职出,并且减少nz.running 量的值 n yield_task(-)除非compat_yield sysctl是打开的,这个回调函数基本上就是 一个dequeue后跟一个enqueue,这那种情况下,他将任务的调度实体放入红黑树的最右端 n checkereempt_cuzr (-)这个回调丞数是检查一个任务进入runnable状态是否 应该抢占当前运行的任务 n pick_next_taSk (-)这个回调函数选出下一个最合适运行的任务 n Set_cuzr_taSk (-)当任务改变他的调度类或者改变他的任务组,将调用该回调函 数 n taSk_tick(-)这个回调函数大多数是被time tick调用。他可能引起进程切换。 这就駆动了运行时抢占 2.1、CFS 调度 Tcik中断,主要会更新调度信息,然后调整当前进程在红黑树中的位置。调整完成以 后如果当前进程不再是最左边的叶子,就标记为Need.resched标志,中断返回时就会调用 scheduler ()完成切换、否则当前进程继续占用CPU。从这里可以看出CFS抛弃了传统时间 片概念。Tick中断只需要更新红黑树。 红黑树键值即为runtime,该值通过调用update_cuzr函数进行更新。这个值为 64位的变量,会一直逢増,_enqueue_entity中会将vxuntime作为键值将要入队的实体插 入到红黑树中。_pick_first_entity会将红黑树中最左侧即vxuntime最小的实体取出。


249.如何从10亿数据中找到前1000大的数?



public class TopN { //当前节点的父节点


private int parent(int n){ return (n~l)/2; } //当前节点的左子节点 private int left(int n){ return 2*n+l; } //当前节点的右子节点 private int right(int n){ return 2*n+2; } //构建堆 private void buildHeap (int n, int [] data) { for(int i=l;i<n;i++){ intt=1 while(t!=0 && data[parent(t)]>data[t]) { int temp = data[parent(t)]; data [parent (t) ]=data[t]; data[t]=temp; t=parent (t); //调整堆,为小顶堆 private void adjust (int i, int n, int [] data) { if (data[O]>=data[i]) { return; L int temp = data[i]; data[i] = data[0]; data[0] = temp; int t=0; //调整时,堆顶比子节点大,从较小的子节点幵始调整 while((left(t)<n&&data[t]>data[left(t) ]) || (right (t) <n&&data[t: >data [right (t) ])) { if((right(t) < n && data[right(t)] < data[left(t)])){ temp=data[t]; data [t] =data [right (-)]; data[right(t)]=temp. t=right(t); }else{ temp=data[t]; data[t]=data[left (t!]; data[left(t)]=temp; //寻找topN数 public void f indTopN (int n, int.] data) { buildHeap(n, data); for (int i=n; i<data. length; iT») { adjust (i, n, data); //打印 public void print(int[] data){ for (int i=0; i<data. length; L) { System, out. print (data [i. ");


250. 用UDP通讯如何保证对方百分百收到数据?

在UDP通讯中,当你的数据包发出去后,至于对方有没有正确收到数据,并不知道,那 么,如何保证你发出去的数据,对方一定能收到呢?? ?我们可以借签"P协议的做法(回 复+ 重发+ 编号机制) 1) 接收方收到数据后,回复一个确认包,如果你不回复,那么发送端是不会知道接收 方是否成功收到数据的 比如A要发数据" {data}”到B,那B H姪U后,可以回复一个特定的确认包" {0K}” , 表示成功收到。 但是如果只做上面的回复处理,还是有I礪,比如B收到数据后回复给A的数据〃{0K}〃 的包,A没收到,怎么办呢? ? ? 2) 当A没有收到B的〃{0K}〃包后,要做定时重发数据,直到成功接收到确认包为止, 再发下面的数据,当然,重发了一定数量后还是没能收到确认包,可以执行一下姗的流程, 防止对方网卡更换或别的原因。 但是这样的话,B会收到很多重复的数据,假如每次都是B回复确认包A收不到的话。 3) 发送数据的包中加个标识符,比如A要发送的数据〃{标识符|data}〃到B, B收到后, 先回复“{0K} 〃确认包,冉根据丿泉有的标识符进行比较,如果标识符相同,则数据丢失,如 果不相同,则原有的标识符=接收标识符,且处理数据。 当A发送数据包后,没有收到确认包,贝拷隔x秒,把数据重发一次,直到收到确认包 后,更新一下标识符,再进行后一包的数据发送。 经过上面1),2), 3)点的做法,则可以保证数据百分百到达对方,当然,标识符用 ID号来代替更好。


251. 如何初始化一个指针数组?

例如:定义f指针瞄*a[5] 让其各个指针头地1 畛另指向 {1,1,1,1,1}, {2,2,2,2,21, {3,3,3,3,31, {4,4,4,4,41, {5,5,5,5,51



int a[5]= {....} int* pt [5]; for(i=0;i<5;i++) [ pt[i] = &a[i]; }

指针数组不可以直接赋值,因为指针本质上是一组地址。但可以通 过“指向”赋值


252. 你所知道的设计模式有哪些?

有23种设计模式,不需要所有的回答,但是其中常用的几种设计模式应该去掌握。 总体来说设计模式分为三大类: 创建型模式共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合 模式、享元模式。 行为型模式共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模 式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 这里主要讲解简单工厂模式,代理模式,适配器模式,单例模式4中设计模式. 1、 简单工厂模式 主要特点是需要在工厂类中做判断,从而创造相应的产品,当増加新产品时,需要修改 工厂类。使用简单工厂模式,我们只需要知道具体的产品型号就可以创建一个产品。 缺点:工厂类集中了所有产品类的创建谗辑,如果产品量较大,会使得工厂类变的非常 腕肿。 2、 代理模式 代理模式:为其它对象提供一种代理以控制这个对象的访问。在某些情况下,一个对象 不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作 用。 优点: 职责清晰。真实的角色只负责实现实际依业务逻辑,不用关心其它非本职责的事务,通 过后期的代理完成具体的任务。这样代码会简洁清晰。 代理对象可以在客户端和目标对象之间起到中介的作用,这样就保护了目标对象。 扩展性好。 3、 适配器模式 适配器模式可以将一个类的接口转换成容户端希望的另一个接口,使得原来由于接口不 兼容而不能在一起工作的那些类可以在一起工作。通俗的讲就是当我们已经有了一些类,而 这些类不能满足新的需求,此时就可以考虑是否能将现有的类适配成可以满足新需求的类。 适配器类需要继承或依赖已有的类,实现想要的目标接口。 缺点:过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调 用的是A接口,其实内部被适配成了 B接口的实现,一个系统如果太多出现这种情况,无 异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。 4、单例模式 单例模式顾名思义,保证一个类仅可以有一个实例化对象,并且提供一个可以访问它的 全局接口。实现单例模式必须注意一下几点: 单例类只能由一个实例化对象。 单例类必须自己提供一个实例化对象。 单例类必须提供一个可以访问唯一实例化对象的接口。 单例模式分为懒汉和欲汉两种实现方式。


253. 如何计算struct占用的内存?

1. 每个成员按其类型大小和指定对齐参数n中较小的一个进行对齐 2. 确定的对齐参数必须能够整除起始地址(或偏移量) 3. 偏移地址和成员占用大小均需对齐 4. 结构体成员的对齐参数为其所有成员使用的对齐参数的最大值 5. 结构体总长度必须为所有对齐参数的整数倍



#include<stdio. h> struct test [ char a; int b; float c; }; int main(void) { printf(^char=%d\n°j sizeof(char):; printf("int=%d\n”, sizeof(int)); printf ("f loat=%d\n”, sizeof (floa~)); printf(°struct test=%d\n°, sizeof(struct test)); return 0; I 执行结果为1, 4, 4, 12

占用内存空间的计算过程: 对齐参数为4。假设结构体的起始地址为Ox。 a的类型为char,因此所占内存空间大小为1个字节,小于对齐参数4,所以选择1 为对齐数,而地址0x0能够被1整除,所以0x0为a的起始地址,占用空间大小为1个字节: b的类型为int ,所占内存空间大小为4个字节,与对齐参数相同,因此4为对齐数, 0x1不能被4整除,因此不能作为b的起始地址,依次往下推,只能选用0x4作为b的起始 地址,因此中间会空出3个字节的空余空间; c的类型为float,占用4个字节,因此4为对齐数,0x8能被4整除,所以c的起始 地址为0x8 因此整个结构体占用的内存大小为12字节。


254. mysql为什么要使用B+树作为索引呢?

b树的特点: 一个M阶的b树具有如下几个特征:(如下图M=3)(下文的关键字可以理解为有效数 据,而不是单纯的索引) 定义任意非叶子结点最多只有M个儿子,且M>2; 根结点的儿子数为2 M]; 除根结点以外的非叶子结点的儿子数为[恥,M],向上取整;(儿子数:[2, 3]) 非叶子结点的关键字个数=儿子数-1 ;(关键字=2) 所有叶子结点位于同一层; k个关键字把节点拆成k+1段,分别指向蚌1个儿子,同时满足查找树的大小关系。(k=2) 有关b树的一些特性,注意与后面的b+树区分: 关键字集合分布在整颗树中; 任何一个关键字出现且只出现在一个结点中; 搜索有可能在非叶子结点结束; 其搜索性能等价于在关键字全集内做一次二分查找:

编辑

添加图片注释,不超过 140 字(可选)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

b+树,是b树的一种变体,查询性能更好。m阶的b+树的特征:

有n棵子树的非叶子结点中含有n个关键字(b树是n-l个),这些关键字不保存数据, 只用来索引,所有数据都保存在叶子节点(b树是每个关键字都保存数据)。

所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子 结点本身依关键字的大小自小而大顺序链接。

所有的非叶子结点可以看成是索引部分,结点中仅含其子树中的最大(或最小)关键字。通常在b+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。同一个数字会在不同节点中重复出现,根节点的最大元素就是b+树的最大元素。

编辑

添加图片注释,不超过 140 字(可选)

B+树的中间节点不保存数据,是纯索引,但是B树的中间节点是保存数据和索引的,相对来说,B+树磁盘页能容纳更多节点元素,更“搂胖” 5

B+树查询必须查找到叶子节点,B树只要匹配到即可不用管元素位置,因此b+树查找更 稳定(并不慢);

对于范围查找来说,B+树只需遍历叶子节点链表即可,B树却需要重复地中序遍历,在 项目中范围查找又很是常见的

増删文件(节点)时,效率更高,因为E+树的叶子节点包含所有关键字,并以有序的 链表结构存储,这样可很好提高増删效率。


255. 输入ping IP后敲回车,发包前会发生什么?

ping目标ip时,先查路由表,确定出接口

如果落在直连接口子网内,此时若为以太网等 多路访问网络 则先查询axp緩存,命 中则直接发出,否则在该接口上发axp询问目标ip的mac地址,职得后发出,若为PPP等 点 对点网络,则直接可以发出;

如果查表落在缺省路由上,此时若为以不网等多路访问网络则先查询网关axp緩 存,命中则直接发出,否则在该接口上发axp询问网关的mac地址,取得后发出,若为ppp 等点对点网络,则直接可以发出;

若查表未命中,则返回不可达。


256. 对于一颗二叉树,如何对此进行层次遍历,并且按行输出。

解法1:



class Solution {


public:


vector<vector<int>> levelOrder(Hode* root) {


BFS (root, 0);


return res;


}


public:


void BFS(Node* node, int level)


[


if(node == nullptr) return;


if (level == res. sizeO)


res. push_back (vector<in*:> ());


res[level]. push_back(node">Tal);


for(auto n:node~>children)


BFS(n, level+1);


private:


vector<vector<int>^ res;


};

解法2:



class Solution {


public:


vector<vector<int>> levelOrder(Hode* root) { vector〈vectoroutput;


if (Jroot) return output;


queue<Node*> treeTemp; treeTemp. push(root);


auto treeNum = treeTemp. size();


while (treeNum) {


vector<int> valTemp;


for (auto i=0; KtreeNun; ++i) { root = treeTemp. front(); valTemp. push_back (root->val); treeTemp. pop();


for (auto childTemp:root">children) treeTemp. push(childTemp);


}


output. push_back(valTemp); treeNum = treeTemp. size 3 ;


}


return output;


357. 如何实现一个高效的单向链表逆序输岀?



static class Node{


private int data;


private Node next;


Node(int d){


data = d;


next = null;


}


public int getDataO {


return data;


public void setData(int data) { this, data = data;


}


public Node getNext() {


return next;


public void setNext(Node next) { this, next = next;


public static void reverse(Node head)


{


if(null == head || null == head. getNext()){ return;


Node prev=null;


Node pcur = head. getNext();


Node next;


while (pcur i=null){


if (pcur.getNext()==null: {


pcur.setNext(prev);


break;


next=pcur.getNext();


pcur.setNext(prev);


prev=pcux;


pcur=next;


}


head. setNext(pcur);


Node tmp = head. getNext();


while(tmpJ= null){


System, out. print(tmp. ge*Data()+^ “); tmp=tmp. getNext();


258. 从innodb的索引结构分析,为什么索引的key长度不 能太长?

key太长会导致一个页当中能够存放的key的数目变少,间接导致索引树的页数目变 多,索引层次増加,从而影响整体查询变更的效率。


259. MySQL的数据如何恢复到任意时间点?

恢复到任意时间点以定时的做全量备份,以及备份増量的binlog日志为前提。恢复到 任意时间点首先将全量备份恢复之后,再此基础上回放増加的binlog直至指定的时间点。


260. 请解释下为什么鹿啥发布恋情的时候,微博系统会崩溃, 如何解决?

鹿啥首先是一个明星,流量明星。粉丝量众多,所以,他已公布恋情,瞬间的流量很大。 但是我们要注意到,这里面有一个问题。就是这个瞬间流量増大,増的不仅是浏览量。如果 仅仅是阅读,我们只需把鹿啥的这条微博放入Redis緩存,以微博技术,不可能挂得了的 吧。

这个之所以微博挂掉,是因为这个时间段,转发+评论量非常的大,并不是只有阅读 量大。

另外针对明星的微博,会有一个消息推送功能。第一时间热点数据,只要你联的有网, 都能够收到推送。

最后总结如下:

L获取微博通过pull方式还是push方式

2. 发布微博的频率要远小于阅读微博

3. 流量明星的发微博,和普通博主要区分对待,比如在shading的时候,也要考虑 这个因素


秋招大厂经典面试题及答案整理不断更新中,感兴趣且正在学习的同学可以点个关注;狮会不断更新文章连载,有问题或者见解可以评论区讨论。

2023秋招大厂经典面试题及答案整理归纳(241-260)校招必看相关推荐

  1. 2023秋招大厂经典面试题及答案整理归纳(201-220)校招必看

    目录 201.数组al[O,mid-l]和al[mid,num-l],都分别有序.将其 merge成有序数组al[O,num-1],要求空间复杂度0(1). 202. 一个url指向的页面里面有另一个 ...

  2. 2023秋招大厂经典面试题及答案整理归纳(141-160)校招必看

    目录 141. 动态连接库的两种方式? 142. IP组播有那些好处? 143. 列举几种进程的同步机制及优缺点 144. 什么是预编译,何时需要预编译? 145. int(*s[10])(int)表 ...

  3. 2023秋招大厂经典面试题及答案整理归纳(161-180)校招必看

    目录 161. MySQL 中 myisam 与 innodb 的区别. 162. 画出OSI和TCP/IP协议栈的对应关系. 163. 简述停止-等待协议(ARQ)的工作原理? 164. redis ...

  4. 2023秋招大厂经典面试题及答案整理归纳(1-20)校招必看

    目录 前言 1. 使用mysql索引都有哪些原则?索引什么数据结构? 1). 对于查询频率高的字段创建索引: 2). 对排序.分组.联合查询频率高的字段创建索引: 3). 索引的数目不宜太多 4). ...

  5. 【2023秋招大厂真题】携程校招-2022.9.28-k-好数组

    2023大厂真题提交网址(含题解): www.CodeFun2000.com(http://101.43.147.120/) 最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练 ...

  6. 【2023秋招大厂真题】科大讯飞校招-2022.10.14-奖品发放

    2023大厂真题提交网址(含题解): www.CodeFun2000.com(http://101.43.147.120/) 最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练 ...

  7. 【2023秋招大厂真题】华为校招-2022.10.11-字母加密

    2023大厂真题提交网址(含题解): www.CodeFun2000.com(http://101.43.147.120/) 最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练 ...

  8. 2023最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)

    近期总结一一些面试题 都是企业的面试题笔记题 感觉薪资10k-15k的常见面试题 个人录制的最新Vue项目学习视频:B站 小胖梅-的个人空间_哔哩哔哩_Bilibili 红色为常见面试题 ====== ...

  9. 2022年最新互联网大厂前端面试题及答案-前端工程必备技能(持续整理更新中【关注收藏不迷路】)

    对于做前端的朋友,或者做了前端几年了,基础不好的,或者想进大厂的想了解深入,下面的知识点很多前端朋友都没有深入了解.很重要,看完有种茅塞顿开感觉,**关注+收藏哦,总有一天用的得.** 涉及到知识点: ...

  10. 大疆秋招IBG后端笔试题 2023

    大疆秋招IBG后端笔试题 2023 题型 编程 计算时间差(Leetcode359) 最小偏移量(Leetcode1657) 题型 单选:20道:(不可修改答案好像,我没找到返回上一题的界面) 多选: ...

最新文章

  1. JSP复习题【侵权联系我删除】
  2. 3、将对象存储到zookeeper中,然后再拿下来还原
  3. 揭秘!Greenplum并行执行引擎到底是如何工作的?
  4. LeetCode 70. 爬楼梯(Climbing Stairs)
  5. ×××服务器是指什么?我怎样控制自己的电脑端口的开启和关闭?
  6. c++中的异常---3(系统标准异常库,编写自己异常类)
  7. 【python教程入门学习】两道关于递归的练习题
  8. 小新触控板不能用了_小新Pad Pro体验----高颜值新青年平板
  9. Java中对Array数组的api展示
  10. Java并发编程框架Disruptor
  11. Xshell连接Linux下Oracle无法回退的解决办法
  12. ubuntu16.04源码编译安装nginx1.16.2
  13. android 预约挂号代码_还在医院苦苦排队挂号?Python定时自动挂号和快捷查询化验报告!...
  14. ffmpeg 音乐循环_背景音乐自动循环播放
  15. 模糊数学笔记-模糊集
  16. span 禁止选中_网页代码常用小技巧(禁止另存为)
  17. win10怎么更新显卡驱动_荒野大镖客2优化:NVIDIA更新GeForce 441.41显卡驱动
  18. P4556 [Vani有约会]雨天的尾巴 树链剖分 线段树合并
  19. MSP430学习心得
  20. html进行语音播报,JQuery插件制作:[2]语音播报jspeech

热门文章

  1. 系统分析与设计-(二)系统规划
  2. JDK9的32位版本下载
  3. 高斯核函数 python实现
  4. Linux电源管理--PM QoS
  5. MCtalk教育大咖说:不忘教育初心,柚子练琴聚焦音乐陪练
  6. 一天一个产品分析之Finger_米米米米粒口红_新浪博客
  7. sql2012下载,安装,
  8. 转:有了这些网站,英文论文再也不难写了(15个英文论文写作辅助网站介绍和使用技巧)
  9. 不完美破解四川电信中兴B860A高安机顶盒
  10. 【Java】JavaWeb概述