code无重复字符的最长子串
小米日常实习 二面
原题链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/
1234567891011121314151617181920212223class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(); char [] cs = s.toCharArray(); // 用作滑动窗口 字符 以及 出现的位置 HashMap<Character,Integer> hash = new HashMap<>(); int left = 0; int ans = 0; for(int i = 0; i < n; i++){ if(hash.containsKey(cs[ ...
code山脉数组的峰顶索引
小米日常实习
原题链接:https://leetcode.cn/problems/peak-index-in-a-mountain-array/description/
12345678910111213141516class Solution { public int peakIndexInMountainArray(int[] arr) { int l = -1, r = arr.length; int n = arr.length; while(l + 1 < r){ int mid = l + r >> 1; if(mid + 1 < n && arr[mid] > arr[mid + 1]){ r = mid; }else{ l = mid; } ...
面经汇总校招
中厂多益网络Java对象创建的方式,除了new?
使用反射(Reflection): 可以使用Class类的newInstance()方法或者Constructor类的newInstance()方法来创建对象。这种方式可以在运行时动态地创建对象,适用于需要根据类名或者构造函数参数来创建对象的情况。
使用clone()方法:通过实现Cloneable接口并重写clone()方法,可以创建对象的副本。使用clone()方法创建的对象是原始对象的浅拷贝,需要注意对象的成员变量是否需要深拷贝。
使用ObjectInputStream和ObjectOutputStream:通过序列化和反序列化来创建对象。将对象写入到流中,再从流中读取对象,可以实现对象的深拷贝。这种方式适用于需要在网络传输或者持久化存储中传递对象的情况。
使用工厂方法(Factory Method):通过定义工厂类和工厂方法来创建对象。工厂方法可以根据不同的条件或者参数来创建不同的对象,提供了更灵活的对象创建方式。
使用依赖注入框架(如Spring):通过依赖注入框架来管理对象的创建和生命周期。框架会根据配置文件或者注解来自动创 ...
面经汇总实习
大厂
小米 日常实习
Java HashMap了解多少?
什么是线程不安全?
大厂小米 日常实习Java HashMap了解多少?HashMap是Java集合框架中的一个重要类,它实现了Map接口,提供了键值对的存储和查找功能
内部实现原理: 是基于哈希表(Hash Table)实现的。HashMap使用键的哈希值来确定键值对在内部数组中的存储位置,这样可以快速地进行插入、查找和删除操作。在HashMap中,键是唯一的,而值可以重复。
底层数据结构: HashMap底层的数据结构和链表(JDK8 以后会有红黑树)
扩容机制: 初始化大小是16 当HashMap中的元素个数超过负载因子(默认为0.75)与容量的乘积时,HashMap会进行扩容操作。扩容涉及重新计算哈希值、重新分配元素位置等操作,以保证哈希表的性能。需要注意的是,Java 8及以上版本的HashMap在链表长度超过一定阈值时会将链表转换为红黑树,以提高查找效率。这是为了解决当链表过长时,查找效率下降的问题。
HashMap可以用null key作为键值
HashMap是线程不安全的
什么是线程不安全 ...
code最大数
蚂蚁金服校招真题
原题链接:https://leetcode.cn/problems/largest-number/description/
贪心 + 排序将两个字符串进行 拼接后进行判断 a + b > b + a 则将a排在前面
12345678910111213141516171819202122232425class Solution { public String largestNumber(int[] nums) { int n = nums.length; String [] ss = new String[n]; for (int i = 0 ; i < nums.length ;i++){ // 这里要给注意要加一个 "" 或者直接给ss全部赋初始值为 "" // 就不会变成 null + nums[i] ss[i] = "" + nums[i]; ...
code翻转数组
多益网络校招
原题链接:https://leetcode.cn/problems/rotate-array/
12345678910111213141516171819202122232425262728/** 三次翻转 1. 全数组翻转 这样尾部的k%mod个数就会移动到队首 2. 然后再将首部k%mod - 1 和 k%mod,n - 1的数分别翻转就能得到答案 */class Solution { public void rotate(int[] nums, int k) { int n = nums.length; k = k % n; // 整体翻转 reverse(0,n - 1,nums); // 翻转(0,k%n - 1) reverse(0,k - 1,nums); // 翻转(k%n,n - 1) reverse(k,n - 1,nums); } private void reverse( ...
面试准备
dc49651648acacfd7b8aa92c798562c50f39888456ccbb95186c7a4273069f6a488c6e95eba3cd6b1edbc4ef1c7dd2ed766d68659788ed98606bad2f1d54648475b17c4255d424da66f77598ecce809cce13f06de2a1e8e6d0fb14fa026629d5ac8234cab2b2caf6108b1913e3e90bee91f209777fba4d7884e268bd6f403aac7bd4e207696146220c8630f0de095206e2f4be56f29dadac9dacd179e2c4a7942ab1517f8909e43b2f2b7856d8d1c52ad174e75d25a7457c55c65f7c0214d7a1af792bbb669ae03813643bd8f2687a9aa96f143f884f43be43e7075777c9fde6b5455d7e30c1ea02afa54947090806a71dbc08179cbed0673 ...
code字符串压缩
美团1面
初级版本字符串压缩原题链接:https://leetcode.cn/problems/compress-string-lcci/description/
123456789101112131415161718192021class Solution { public String compressString(String S) { StringBuilder res = new StringBuilder() ; char [] cs = S.toCharArray(); int i = 0; int n = cs.length; while (i < n){ int count = 1; int j = i + 1; while (j < n && cs[i] == cs[j]){ count++; ...
code删除排序链表中的重复元素
美团校招一面
原题链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-list/description/
1234567891011121314151617181920212223242526272829303132/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */class Solution { public ListNode deleteDuplicates(ListNode ...
code二叉树的右视图
原题链接:https://leetcode.cn/problems/WNC0Lk/
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } ...