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等。
ART_20190430的更多相关文章
随机推荐
- python 爬虫系列05--丑事百科
丑事百科爬虫 import re import requests def parse_page(url): headers = { 'User-Agent':'user-agent: Mozilla/ ...
- 再探canvas(小球实例)
之前学习过canvas的一些使用,也用过canvas绘制过时钟, 但是很久不用,有些遗忘了,这里做一个简单的回顾. 在web页面创建一个canvas画布非常简单,如下即可: <canvas id ...
- Ubuntu系统里下载安装配置redis-2.2.13.tar.gz
不多说,直接上干货! Redis是一个NoSQL数据库,在数据需要频繁更新,并且数据的访问热点范围比较广的应用场景下,Redis的效率很不错. 下面介绍Redis的安装过程,如下面的步骤所示. 第一步 ...
- 案例45-crm练习改写客户列表使用struts2&OGNL
1 修改CustomerAction代码 2 修改jsp/customer/list.jsp代码 <%@ page language="java" contentType=& ...
- Windows x64位通过PEB获得Kernel32基地址
在64位系统下 gs:[0x30] 指向TEB gs:[0x60] 指向PEB kd> dt _TEB nt!_TEB +0x000 NtTib : _NT_TIB +0x000 Excepti ...
- Nginx实践:(2) Nginx语法之localtion
1. 概念 location是根据uri进行不同的定位.在虚拟主机的配置中,是必不可少的.location可以将网站的不同部分,定位到不同的处理方式上. location语法格式如下: locatio ...
- Js内存泄漏的几种情况
想解决内存泄露问题,必须知道什么是内存泄露,什么情况下出现内存泄露,才能在遇到问题时,逐个排除.这里只讨论那些不经意间的内存泄露. 一.什么是内存泄露 内存泄露是指一块被分配的内存既不能使用,又不能回 ...
- Git使用教程,感觉比较全,所以【转载】
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...
- js 获取 Url.Action 设置area
var url = '@Url.Action("UserEdit","User",new { Area = "Setup", id = 1} ...
- File 类 的基本操作
// File 类(静态类) File 的缺点:只能用来读小文件 (它是一下子全都读进去) //创建一个文件 // File.Create(@"C:\Users\wbrm\Deskto ...