zoukankan      html  css  js  c++  java
  • ART_20190430

    Algorithm-算法题

    第一个只出现一次的字符

    在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).

    import java.util.*;
    public class Solution {
        public int FirstNotRepeatingChar(String str) {
    
    	if("".equals(str)||str==null) return -1;
        LinkedHashMap<Character,Integer> chMap=new LinkedHashMap<Character,Integer>();
        char[] value=str.toCharArray();
        for(int i=0;i<value.length;i++) 
            chMap.put(value[i],chMap.containsKey(value[i])?-1:i);
        for(char ch:chMap.keySet())
           if(chMap.get(ch)!=-1) return chMap.get(ch);
            //用了LinkedHashMap,有序所以直接取第一个为1个的字符就好,hashmap的话要比较,取最小值
        return -1;
    }
    
    
    }
    

    Tips-面试题

    1. HashMap 的底层实现

    参考文章>Java 8系列之重新认识HashMaphttps://zhuanlan.zhihu.com/p/216738

    HashMap 基于 Hash 算法实现的,我们通过 put(key,value)存储,get(key)来获取。当传入 key 时,HashMap 会根据 key. hashCode() 计算出 hash 值,根据 hash 值将 value 保存在 bucket 里。当计算出的 hash 值相同时,我们称之为 hash 冲突,HashMap 的做法是用链表和红黑树存储相同 hash 值的 value。当 hash 冲突的个数比较少时,使用链表否则使用红黑树。

    2. tcp 和 udp 的区别,tcp为何可靠?

    TCP和 UDP是 OSI 模型中的运输层中的协议。tcp 提供可靠的通信传输,而 udp 则常被用于让广播和细节控制交给应用的通信传输。两者的区别大致如下:

    TCP面向连接,UDP面向非连接即发送数据前不需要建立链接;
    TCP提供可靠的服务(数据传输),UDP无法保证;
    TCP面向字节流,UDP 面向报文;
    TCP 数据传输慢,UDP数据传输快;

    TCP通过序列号、检验和、确认应答信号、重发控制、连接管理、窗口控制、流量控制、拥塞控制实现可靠性。

    Review-技术文章

    Java核心技术36讲-谈谈你对Java平台的理解

    • 对于“Java是解释执行”这句话,这个说法不太准确。我们开发的Java的源代码,首先通过Javac编译成为字节码(bytecode),然后,在运行时,通过 Java虚拟机(JVM)内嵌的解释器将字节码转换成为最终的机器码。但是常见的JVM,比如我们大多数情况使用的Oracle JDK提供的Hotspot JVM,都提供了JIT(Just-In-Time)编译器,也就是通常所说的动态编译器,JIT能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行了。

    • 众所周知,我们通常把Java分为编译期和运行时。这里说的Java的编译和C/C++是有着不同的意义的,Javac的编译,编译Java源码生成“.class”文件里面实际是字节码,而不是可以直接执行的机器码。Java通过字节码和Java虚拟机(JVM)这种跨平台的抽象,屏蔽了操作系统和硬件的细节,这也是实现“一次编译,到处执行”的基础。

    • 除了我们日常最常见的Java使用模式,其实还有一种新的编译方式,即所谓的AOT(Ahead-of-Time Compilation),直接将字节码编译成机器代码,这样就避免了JIT预热等各方面的开销,比如Oracle JDK 9就引入了实验性的AOT特性,并且增加了新的jaotc工具。

    • Java平台包括java语言,class文件结构,jvm,api类库,第三方库,各种编译、监控和诊断工具等。
      Java语言是一种面向对象的高级语言;通过平台中立的class文件格式和屏蔽底层硬件差异的jvm实现‘一次编写,到处运行’;通过‘垃圾收集器’管理内存的分配和回收。
      jvm通过使用class文件这种中间表示和具体语言解耦,使得任何在源码早期编译过程中以class文件为中间表示或者能够转换成class文件的具体语言,都能运行jvm之上,也就可以使用jvm的各种特性。
      api类库主要包含集合、IO/NIO、网络、并发等。
      第三方库包括各种商业机构和开源社区的java库,如spring、mybatis等。
      各种工具如javac、jconsole、jmap、jstack等。

  • 相关阅读:
    apache+php+mysql配置
    欧拉函数知识点总结及代码模板及欧拉函数表
    栈排序
    codeforces 722C (并查集)
    北京网赛I题 hiho1391 (树状数组、区间覆盖最大值问题)
    HDU5898、 HDU 2089(数位DP)
    HDU 5876 (大连网赛1009)(BFS + set)
    codeforces 682D(DP)
    codeforces 666A (DP)
    codeforces 706D (字典树)
  • 原文地址:https://www.cnblogs.com/mewcoder/p/10798067.html
Copyright © 2011-2022 走看看