微信支付后台开发面经

本人Java,岗位是C++

一二面后面补上



三面

两个笔试题:
①、

给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

输出:7 -> 0 -> 8

原因:342 + 465 = 807


public class Main{
    static class ListNode{
        public ListNode(){}
        public ListNode(int val)
        {
            this.val=val;
        }
        int val;
        ListNode next;
    }

    public static void main(String[]args)
    {
        ListNode root01=new ListNode(2);
        ListNode l12=new ListNode(4);
        ListNode l13=new ListNode(3);
        root01.next=l12;
        l12.next=l13;
        ListNode root02=new ListNode(5);
        ListNode l22=new ListNode(6);
        ListNode l23=new ListNode(4);
        root02.next=l22;
        l22.next=l23;
        ListNode res=deal(root01,root02);
        while (res!=null)
        {
            System.out.print(res.val+"_");
            res=res.next;
        }
    }
    static ListNode deal(ListNode l1,ListNode l2)
    {
        int tmp=0;
        int jin;
        ListNode res=new ListNode();
        ListNode head=res;
        while (l1!=null || l2!=null)
        {
            if (l1!=null)
            {
                tmp+=l1.val;
                l1=l1.next;
            }
            if (l2!=null)
            {
                tmp+=l2.val;
                l2=l2.next;
            }
            head.next=new ListNode();
            head=head.next;
            head.val=tmp%10;
            jin=tmp/10;
            tmp=jin;
        }
        if (tmp!=0)
        {
            head.next=new ListNode();
            head.next.val=tmp;
        }
        return  res.next;
    }
}


②、

无重复字符的最长子串 - 语言不限

题目

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"

输出: 3

解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: "bbbbb"

输出: 1

解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

public class Main{
    public static void main(String[]args)
    {
        String str="asddsffabcdefghijkabcd";
        System.out.println(deal(str));
    }

    static int deal(String str)
    {
        int left=0;
        int right=0;
        int maxLen=0;
        char ch;
        Set<Character>set=new HashSet<>();
        while (left<=right && right<str.length())
        {
            ch=str.charAt(right);
            if (!set.add(ch))
            {
                int tmp=right-left;
                if (tmp>maxLen)
                {
                    maxLen=tmp;
                }
                while ( left<=right && str.charAt(left)!=ch)
                {
                    set.remove(str.charAt(left));
                    left++;
                }
                left++;
                right++;
                continue;
            }
            right++;
        }
        return Math.max(maxLen,(right-left));
    }
}


1、讲讲c++的指针
2、Java里面的常量实现方式,有没得const
3、Java里的static变量特性,生命周期等
4、有没有用MySQL?MySQL的索引实现方式,底层是哪些结构?考察哈希索引和B+树索引,各自的特点等。
5、聚簇索引和普通索引的差别
6、MySQL四种隔离级别,每种隔离级别会出现的情况
7、MySQL如何实现事务的
8、平时哪些地方会用到http?http缺点是什么?
9、说说https,https如何保证安全的,说说ssl握手过程


最后有啥想问的?

全程一小时左右。


四面(面委会)

  • 简介
  • 做题:是个格式化输出,给一个字符串按下格式
代码:
public class Main {
    public static void main(String[]args)
    {
        String s="This utility is a filter which displays the specified files,&nbs***bsp;the standard input, if no files are specified, in a user spec";
        deal(s,16);
    }

    static void deal(String str,int lineNum)
    {
        StringBuilder stringBuilder=new StringBuilder();
        StringBuilder stringBuilder1=new StringBuilder();
        //init
        int count=0;
        int lineCount=0;
        stringBuilder.append("00000000")
                .append(" ");
        int lineLen=0;
        for (char ch:str.toCharArray())
        {
            count++;
            stringBuilder.append(getNum(ch))
                    .append(" ");
            stringBuilder1.append(ch);
            if (count==lineNum)
            {
                lineLen=stringBuilder.length();
                System.out.print(stringBuilder.toString());
                System.out.println(stringBuilder1.toString());
                stringBuilder.delete(0,stringBuilder.length()+1);
                stringBuilder1.delete(0,stringBuilder1.length()+1);
                count=0;
                lineCount++;
                stringBuilder
                        .append(format(getNum(lineCount*lineNum)))
                        .append(" ");
            }
        }
        System.out.print(stringBuilder.toString());
        int tmp=stringBuilder.length();
        while (tmp++<lineLen)
        {
            System.out.print(" ");
        }
        System.out.println(stringBuilder1.toString());
        stringBuilder.delete(0,stringBuilder.length()+1);
        stringBuilder1.delete(0,stringBuilder1.length()+1);
    }

    static String format(String num)
    {
        String res=num;
        while (res.length()!=8)
        {
            res='0'+res;
        }
        return  res;
    }
    static String getNum(int ch)
    {
        int chInt=ch;
        int res=0;
        while (chInt/16!=0)
        {
            res=res*10+(chInt/16);
            chInt-=((chInt/16)*16);
        }
        return res +getChar(chInt);
    }

    static String getChar(int num)
    {
        if(num<10)
        {
            return String.valueOf(num);
        }
        char ch;
        switch (num)
        {
            case 10:
                ch='a';
                break;
            case 11:
                ch='b';
                break;
            case 12:
                ch='c';
                break;
            case 13:
                ch='d';
                break;
            case 14:
                ch='e';
                break;
            default:
                ch='f';
        }
        return String.valueOf(ch);
    }
}
  • 笔试完讲思路。遇到了什么问题
  • 问问题:


  1. 知道Java里的 Timer 么?如果公司现在有个需求,需要自己实现一个 Timer,你会怎么设计?场景:海量任务。
  2. 任务怎么存储?怎么查询?系统如何高效的定时?
  3. 说说项目,遇到啥问题?有啥难点?特色?







感觉死翘翘,,,,

五面(面委会)

四面两小时内收到五面。

  • 简介

  1. 问项目是怎么样的,介绍下,上线没呢?(显然没有🤣
  2. 看你简历都是Java,你咋个学的Java?看过哪些书
  3. 你来说说Java的 volatile 和synchronized的原理。哪些时候会用到 以上两个东西
  4. 知道JVM不?你知道 JVM内存分很多块不?
  5. 你知道Java编程经常面临内存回收,或者说内存膨胀的问题,你会怎么解决?从编程层面和 JVM层面说说。
  6. 看你写MySQL?你是只用过么?还是明白底层原理?(只晓得索引、存储等一些原理啥的,其它不是太清楚)
  7. 看你写了 Redis,你知道基本类型么?知道底层实现么?(说了下底层数据结构就,,,,,)
  8. 知道TCP么?知道TIME-WAIT阶段么?说说这个阶段的原理,为啥有这个阶段?这个阶段存在什么问题?(大致说了下,但是面试官说有点问题)
  9. 选个项目,详细说说,,,,,
  10. 做题:

①、     下面一段函数实现带有$和*两种通配符的字符串的匹配功能。其中:$表示长度大于0

的数字串,*表示任意长度的字符串。要求:按照自己对于算法的理解填写该函数的5个空白。可以应用strcmp,strcat,strlen等字符串操作函数,不要应用其它的C或者C++的库函数。请注意:必须是完全匹配才能返回true,比如21.txt和2a.txt可以匹配2*.txt, 2.tx或者2.txta 不能匹配*.txt。通配符可能出现多次函数的参数与返回值的说明请参见函数的注释。

// 功能描述:表达式是否匹配成功,$表示长度大于0的数字串,*表示任意长的字符串

// 输入参数: @pRule     以’’结束的字符串,表示规则;

//           @pStr,    以’’结束的待匹配的字符串;

// 返回值:  true:匹配成功; false:匹配失败



//        没填完就不写答案了,害

bool IsRegularMatching(const char* pRule, const char* pStr)

{

const char* pTempRulePtr = pRule;

const char* pTempStrPtr = pStr;

unsigned int dwCount = 0;

unsigned int dwStrLen = (unsigned int)strlen(pStr);

while ((*pTempRulePtr != '') && (*pTempStrPtr != ''))

{

switch (__________)

{

case '*':

pTempRulePtr = pTempRulePtr + 1;

if (*pTempRulePtr == '')

return true;

else

{

dwStrLen = (unsigned int)strlen(pTempStrPtr);

for (dwCount = 0; dwCount < dwStrLen; dwCount++)

{

if (_______________)

return true;

}

}

break;

case '$':

if ( _____________ )

return false;

while ((*pTempStrPtr != '') && (*pTempStrPtr >= '0')

&& (*pTempStrPtr <= '9'))

pTempStrPtr++;

pTempRulePtr++;

break;

default:

if (*pTempRulePtr != *pTempStrPtr)

return _________________;

++pTempRulePtr;

++pTempStrPtr;

break;

}

}

if ((*pTempRulePtr != '') && (*pTempStrPtr == ''))

{

if (strcmp(pTempRulePtr, "*") == 0)

return true;

}

else

{

Return_______ ;

}

return false;

}



②、   从一个无序的存放了N个数文件中,找到最大的M个。要求给出一个快速的方法, 请说明思路。
就分块加小根堆的方式

③、  在机场中,你想从A点前往B点。(为了将问题简化,假设机场是一条线性通道。)一些区域有电动扶梯(双向的),另一些区域没有。你的步行速度恒定为v,电动扶梯的运行速度为u,因此在扶梯上,你的实际速度为v+u。(显然,你不会搭乘与你前进方向不一致的扶梯。)你的目标是尽可能快地从A点到达B点。

1.     假定你需要暂停片刻,比如系鞋带。请问你应该在电动扶梯上系,还是在没有上电动扶梯时系?假定两种情况下,系鞋带的时间相同。

2. 假定你有有限数量的多余能量,用来奔跑。在跑动时,你的速度提高到v’(如果在电动扶梯上,就相应为v’+u)。请问你应该在电动扶梯上跑,还是在没有上电动扶梯时跑?假定两种情况下,你可供奔跑的能量相同。





死翘翘的一轮😭





5月6号,挂了











#腾讯##C++工程师##面经##校招#
全部评论
校招吗?
点赞 回复 分享
发布于 2021-04-28 23:53
请问楼主是实习还是正式批?
点赞 回复 分享
发布于 2021-05-02 09:57
楼主这是4月底面的吗😅
点赞 回复 分享
发布于 2021-05-04 13:04
最后的程序填空有答案吗
点赞 回复 分享
发布于 2021-08-16 16:21

相关推荐

头像
11-10 13:42
已编辑
门头沟学院 Java
总时长75分钟,拷打的有点狠,深挖框架+实践&nbsp;+&nbsp;基础知识,还以为在面阿里。面试官是阿里系相关的,连JDK版本的优化都摸得很透彻。问的有点多,有些记不起了。内容包括:java基础&nbsp;+&nbsp;java并发&nbsp;+&nbsp;MySQL&nbsp;+&nbsp;Redis&nbsp;+&nbsp;Netty&nbsp;+&nbsp;Spring&nbsp;+&nbsp;SpringCloud&nbsp;+&nbsp;Nacos&nbsp;+&nbsp;项目更新:很遗憾,发感谢信了。Java基础:有用过集合吗?说一说常用的集合Hashmap的底层结构?是怎么装入的?那HashMap扩容是怎样的,有特别的运算吗?知道哪些&nbsp;java&nbsp;并发包下的工具,详细介绍一下?synchronized,AQS是什么,有什么区别?volatile&nbsp;是什么,和synchronized&nbsp;有什么区别?synchronized能保证可见性吗?AQS的实现类有哪些?说一下reentrantlock,除了reentrantlock还知道其他吗?乐观锁和悲观锁是什么?具体的实现方案有哪些?公平锁和非公平锁的优点是什么?公平锁需要维护等待队列吗?ArrayList和LinkedList是什么,有什么区别?JUC:线程池是怎样的?有哪些创建方式?那线程池的参数怎样设计?线程的状态有哪些?线程池如何处理这些任务?非核心线程会回收,那核心线程会回收吗?如果回收怎么设置呢?如果设计一个动态线程池,你会怎样设计呢?详细说明一下。如果要动态更改线程池线程的类型,有什么设计方法吗?项目中有用到多线程吗?是为了做什么?Redis、MySQL:现实中用有到哪些Redis的数据结构,举例说明一下。布隆过滤器的底层是怎样的?有什么优缺点?布隆过滤器有误判吗?是实际存在有误判还是不存在有误判?那么误判怎么进一步处理?是直接查询数据库吗?MySQL的log文件有哪些?介绍一下作用MySQL有哪些锁?RocketMQ:RocketMQ怎么实现顺序消息?为什么会存在幂等消息,处理方案呢?Spring:Spring&nbsp;的框架的核心是什么?JDK&nbsp;代理和&nbsp;CGLib&nbsp;代理是什么?区别?听说过AOP吗,是怎样实现的?有什么功能?Spring&nbsp;是怎样解决循环依赖的?Spirng&nbsp;的Bean的初始化过程是怎么样的?Spring&nbsp;的常见注解有哪些,有什么功能?Spirng&nbsp;MVC是什么?SpringCloud:了解过微服务吗?SpringCloud有哪些组件和对应的功能?直到SpringCloudAlibaba吗?有哪些组件?Nacos是什么?作用主要是什么?sentinel&nbsp;的限流是怎样的?底层是怎样实现的?限流在项目中是怎么用的?Netty是什么了解吗?它为什么高效,怎么做到的?从底层角度讲一讲。反问:技术栈,部门,导师等。
查看80道真题和解析
点赞 评论 收藏
分享
昨天 22:42
已编辑
门头沟学院 Web前端
总结:面试官人很好,整个面试过程中就像是聊天一样,全程演示项目,中间穿插了一点八股-&nbsp;蓝桥杯是什么-&nbsp;问简历上的项目是实验室还是个人项目&nbsp;&nbsp;面试官说都会把比赛项目给放到前面,所以以为这也是实验室作品。然后我就拿了挑战杯写的前端页面简单说了一下以下基本都是项目细节:-&nbsp;Mod&nbsp;开发组与你是什么关系(甲乙方?)-&nbsp;为什么分了开源核心&nbsp;+&nbsp;后台仓库(后台仓库代码不安全,需要审查)- 编辑人员提交流程(后台编辑 + 管理员提交 ->&nbsp;gitee&nbsp;pr&nbsp;+&nbsp;审查后合并&nbsp;+&nbsp;webhook&nbsp;触发&nbsp;cicd&nbsp;同步到&nbsp;oss)-&nbsp;Astro&nbsp;是什么,SSG&nbsp;SSR&nbsp;是什么(说了一下基于&nbsp;vite&nbsp;进行驱动与支持&nbsp;ssg&nbsp;+&nbsp;ssr,然后说了一下&nbsp;ssr&nbsp;的动态拼接字符串;然后面试官说了什么&nbsp;jeklly?)-&nbsp;选了他的原因是什么(博客落地实践过,知道一些底层原理,内容驱动生成网站,符合&nbsp;wiki&nbsp;定位要求)-&nbsp;框架可以插入&nbsp;react&nbsp;或者&nbsp;vue&nbsp;组件吗(可以,且可以一起使用)-&nbsp;有试过放在一起吗(没有,提了一下&nbsp;vite&nbsp;放在过一起导致开发声明报错,其次是两个应用相互独立,通过各自的&nbsp;app&nbsp;创建函数来渲染页面,只要他们副作用不会相互影响我觉得问题都不算大,不过现在看来感觉还得想一想&nbsp;vue&nbsp;react&nbsp;底层,他们的更新机制不一样,会不会一个框架的占用线程太久导致了另一个框架更新不及时)-&nbsp;整个项目内核升级是什么意思(说了用插件将所有的逻辑进行封装,最后进行复用,要求展示了一下除了简历还有哪个网站复用了)-&nbsp;编译器和&nbsp;polyfill&nbsp;的关系,知不知道每一个&nbsp;es&nbsp;版本的区别(不会)-&nbsp;VSCode&nbsp;插件展示一下,具体在&nbsp;VSCode&nbsp;做了什么,用途(mdx&nbsp;转&nbsp;ast&nbsp;语法树,对节点进行分析,并读取工作目录下的资源进行查错;给一些编外的词条编辑人员使用)?-&nbsp;网页插件展示一下?(没实现,说了一下对每一个用户都要开一个专用检查进程的原因)-&nbsp;看一下你的分析器和&nbsp;mdx&nbsp;官方分析器的关系(完全独立,没来得及说存在的优化部分)本来要进笔试了,然后说了一下&nbsp;yjs&nbsp;是核心之一-&nbsp;在线平台演示效果-&nbsp;yjs&nbsp;是什么(协同编辑中编辑冲突的一个库)-&nbsp;协同主要问题(说了并发冲突和&nbsp;YATA&nbsp;算法的作用,面试官似乎没做过这个领域)笔试:```ts//&nbsp;写一个类似迅雷的下载管理器,用户可以不停往里面push&nbsp;url,管理器需要保证同一时间最多只有3个请求在并发下载。class&nbsp;Downloader&nbsp;{&nbsp;&nbsp;urls&nbsp;=&nbsp;[]&nbsp;&nbsp;push(url)&nbsp;{&nbsp;&nbsp;}}//&nbsp;每个url均需要被传入以下fakeAxiosWrapper函数。你可以把这个函数当做一个封装好的axios函数,作用是请求远程api,不要改动这个函数。async&nbsp;function&nbsp;fakeAxiosWrapper(url)&nbsp;{ return new Promise((resolve, reject) =>&nbsp;{ setTimeout(() =>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(`download&nbsp;${url}&nbsp;done`)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resolve()&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;3000);&nbsp;&nbsp;})}//&nbsp;验证代码const&nbsp;downloader&nbsp;=&nbsp;new&nbsp;Downloader()downloader.push(`url1`)downloader.push(`url2`)downloader.push(`url3`)downloader.push(`url4`)downloader.push(`url5`)//&nbsp;等待3s后,同时输出//&nbsp;download&nbsp;url1&nbsp;done//&nbsp;download&nbsp;url2&nbsp;done//&nbsp;download&nbsp;url3&nbsp;done//&nbsp;再等待3s后,同时输出//&nbsp;download&nbsp;url4&nbsp;done//&nbsp;download&nbsp;url5&nbsp;done```没写出来很可惜,因为以前写过一个类似的并发下载控制,结果这里没写好。面试官换了个节流,问了一下为什么&nbsp;setInterval&nbsp;可以用来证明你这个函数是节流的(宏任务队列首部)反问:工作时间(上午十点到晚上八点半)地点(深圳总部)实习时长(越久越好)技术栈(挺多跨端技术的,感觉进去又要开始上手新东西了)有没有什么可以改进的地方(没有,做的很好(不知道是不是客套话整体下来感觉最大的问题还是信息差与沟通点没到位,项目yjs部分展示的内容不是很多,然后还浪费了一些时间,只能说很可惜,下一次对于不会的内容就应该直接说不会(恼)。然后就是没问多少八股,这真的正常吗()
查看17道真题和解析
点赞 评论 收藏
分享
4 51 评论
分享
牛客网
牛客企业服务