【面试】微信支付一面

今天微信支付一面,在线面试。

在collabedit上面进行的,一开始面试官给我打了个电话,说在collabedit上面出好了题目,让做完之后给他回个短信。然后没有多余的废话,就上了collabedit开始做题了。

两个题目,二选一

第一题:在一个二叉树中找到所有节点的内容包含某子串的节点,并使用快速排序方法找到顺序为第n位的节点值。排序规则如下:子串出现的次数,如果次数一样则按字符数排序,如果字符数一样则按ascii排序。

第二题:一个公司有很多员工,也有主管,每天员工和主管都需要签到,但主管可以用签到机确认有多少人上班,也可以按员工ID顺序或签到顺序打印出上班的员工,还可以找出倒数第n个上班的员工是谁。
要求:
    请用OO的方法分析和实现
    所有操作的时间消耗和空间消耗越低越好,其中排序算法时间复杂度不能超过O(nlogn),极端情况下也不可以退化为n^2

考虑到第二题还得设计什么的,直接选了更为直接的第一题-算法题。

第一题给了TreeNode的定义和函数接口

truct TreeNode 
{
    char* value;
    struct TreeNode * left, * right;
}; struct TreeNode * findNode(struct TreeNode * head,char * substr, int n)
{
    //to do
}

其实这个题考查的还是挺多的,字符串匹配(KMP),树的遍历(前中后),前k大元素(堆,快排思想),其实在线面试最看重的是代码风格,然后是思路,最后只要保证人眼bug free就好了。

下面是我做题时实现的代码(不保证无bug,因为没跑过)

struct TreeNode 
{
    char* value;
    struct TreeNode * left, * right;
}; 

vector<pair<TreeNode*, int>> nodes;

struct TreeNode * findNode(struct TreeNode * head,char * substr, int n)
{
    fill_nodes(head, substr);
    TreeNode* result = quick_find(nodes, 0, nodes.size()-1, n);
}

TreeNode* quick_find(vector<pair<TreeNode*, int>>& nodes, int left, int right, int n){
    if(left == right) return nodes[left].first;
    pair<TreeNode*, int> tmp = nodes[0];
    int r = right, l = left;
    while(l < r){
        while(l < r && is_small(tmp, nodes[r])) r--;
        if(l < r){
            nodes[l] = nodes[r];
            l++;
        }
        while(l < r && is_small(nodes[l], tmp)) l++;
        if(l < r){
            nodes[r] = nodes[l];
            r--;
        }
    }
    nodes[l] = tmp;
    if(l == n) return nodes[l].first;
    if(l < n) return quick_find(nodes, l+1, right, n);
    else return quick(nodes, left, l-1, n);
}

bool is_small(pair<TreeNode*, int> node_count1, pair<TreeNode*, int> node_count2){
    if(node_count1.second < node_count2.second) return true;
    if(node_count1.second > node_count2.second) return false;
    int str_len1 = 0, str_len2 = 0;
    char* str1 = (node_count1.first)->value;
    char* str2 = (node_count2.first)->value;
    for(int i = 0; str1[i] != ‘\0‘; i++) str_len1++;
    for(int i = 0; str2[i] != ‘\0‘; i++) str_len2++;
    if(str_len1 < str_len2) return ture;
    if(str_len1 > str_len2) return false;
    for(int i = 0; str1[i] != ‘\0‘; i++){
        if(str2[i] > str1[i]) return false;
    }
    return true;
}

void fill_nodes(TreeNode* head, char* substr){
    if(head == nullptr) return;
    int count = strstr(head->value, substr);
    if(count > 0) nodes.push_back(make_pair(head, count));
    fill_nodes(head->left, substr);
    fill_nodes(head->right, substr);
}

int strstr(char* str, char* substr){
    if(str == nullptr || substr == nullptr) return 0;
    int sub_len = 0;
    for(int i = 0; substr[i] != ‘\0‘; i++) sub_len++;
    int* next = new int[sub_len];
    fill_next(substr, next);
    int i = -1, j = -1;
    while(str[i+1] != ‘\0‘ && substr[j+1] != ‘\0‘){
        if(str[i+1] == substr[j+1]){
            i++; j++;
        }else{
            while(j > -1 && str[i+1] != substr[j+1]) j = next[j];
            if(str[i+1] == substr[j+1]){
                i++; j++;
            }else{
                i++;
            }
        }
    }
    if(substr[j+1] != ‘\0‘) return 0;
    else return 1 + strstr(str+i-sub_len+2);
}

void fill_next(char* substr, int* next){
    next[0] = -1;
    int t = -1; int i = 1;
    for(;substr[i] != ‘\0‘;){
        if(substr[t+1] == substr[i]){
            next[i] = t+1;
            t++; i++;
        }else{
            while(t > -1 && substr[t+1] != substr[i]) t = next[t];
            if(substr[t+1] == substr[i]){
                next[i] = t+1;
                t++; i++;
            }else{
                next[i] = -1;
                i++;
            }
        }
    }
}

这道题做了一小时吧,很蛋碎。写完给面试官发了个短信,面试官给我回来电话,为了下大体的思考过程,然后技术面就结束了,竟然只让做了一道题。之后问了下项目经历,实习经历什么的就完了。等二面中,希望能过吧。

时间: 2024-08-08 09:25:52

【面试】微信支付一面的相关文章

IOS开发--微信支付

前言:下面介绍微信支付的开发流程的细节,图文并茂,你可以按照我的随笔流程过一遍代码.包你也学会了微信支付.而且支付也是面试常问的内容. 正文: 1.首先在开始使用微信支付之前,有一些东西是开发者必须要知道的,打开下面链接: https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=3_1 然后可以看到下面的页面,这个就是微信支付商户平台的开发文档,很多东西是可以查阅和了解的,在开发使用微信SDK支付功能的时候,遇到了问题也可以到这找找相关须知信

微信支付(速学)

微信支付开发IOS图文教程案例 如何成为微信支付商户的方法: 腾讯客服-微信支付商户申请接入信息汇总:http://kf.qq.com/faq/140225MveaUz150107UVFNjy.html 腾讯客服-APP接入微信支付商户方法:http://kf.qq.com/faq/130807me2YZf140528j6JRjE.html 腾讯客服-APP商户接入(微信支付)功能申请教程:http://kf.qq.com/faq/120911VrYVrA140807zmAZvu.html 第一

微信支付PHP SDK —— 公众号支付代码详解

在微信支付 开发者文档页面 下载最新的 php SDK http://mch.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 这里假设你已经申请完微信支付 1. 微信后台配置  如图 我们先进行测试,所以先把测试授权目录和 测试白名单添加上.测试授权目录是你要发起微信请求的哪个文件所在的目录. 例如jsapi 发起请求一般是jsapi.php所在目录 为测试目录,测试白名单即开发人员的微信号. 正式的支付授权目录不能和测试的一样否则会报错.不填

微信支付之JSAPI公众号支付

前提 本教程默认以下几点你已经完全满足: 开通了认证后的服务号 服务号开通的微信支付的认证 腾讯给你的邮件中有商户登录的账号和密码 拥有一个可供上传代码和设置回调域名的网站或云服务 有一点点php知识. 第一步:公众号设置 1. 你的公众号,在支付认证的标签下, 内容应该和下图类似.证明公众号已经完成了认证和合约的签署. 2. 然后在微信支付–开发配置中,设置测试授权目录和测试白名单 3. 在公众号设置-功能设置标签中,设置JS接口安全域名,这个域名在认证获取token的过程中可能会用到.但具体

微信支付错误两个问题的解决:curl出错,错误码:60

如下是运行微信支付测试代码时出错代码: Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroot\weixinpaytest\pay\WxPay.JsApiPay.php on line 99 Fatal error: Uncaught exception 'WxPayException' with message 'curl出错,错误码:60' in D:\wwwroot\weixinpa

H5版如何在微信外(非微信浏览器)进行微信支付技术方案

官方是支持在非微信内置浏览器中调起微信支付的!H5支付是基于公众号基础开发的一种非微信内浏览器支付方式(需要单独申请支付权限),可以满足在微信外的手机H5页面进行微信支付的需求.同时,由于H5链接传播十分方便.来源不易追踪,商户需要特别注意做好防钓鱼.防刷单的处理,控制风险. 流程原理 接口说明 (1)用户打开商户H5网页选购商品,生成支付订单:(2)商户调用[统一下单]接口(接口中trade_type需定义为WAP),获得预支付交易会话标识prepayid:(3)商户按照微信H5支付协议生成d

微信公众号可通过现金红包接口发放微信支付现金红包(附开发教程)

农历新年将至,支付宝红包打了一仗,微信在朋友圈屏蔽了它的分享,但单防守还不行,进攻才是最好的防守.昨日,微信支付现金红包接口正式开放,只需开通微信支付,即可接入现金红包.微信公众号也可以发放现金红包了! 通过现金红包接口,公众号开发者可以策划相关运营活动,向用户发放微信支付现金红包,更好的达到品牌推广及回馈用户的效果. 1.商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景 2.领取到红包后,用户的资金直接进入微信零钱,避免繁复的领

微信支付

后台 public ActionResult WxAddVoucher_Center(double money) { int money= int.Parse((money * 100).ToString()); String ip = Request.UserHostAddress; //随机商品ID String id = ""; Random rd = new Random(); for (int i = 1; i < 16; i++) { id += (rd.Next(0

Unity3d接入微信支付sdk返回-1

背景:U3d导出安卓项目包之后,进行SDK的接入工作. 由于习惯性的右键->Run As->Android Application生成安卓包,导致没有对apk进行签名.App装入之后,微信支付老是返回-1,翻来覆去的找问题终于找到正确的操作流程: 之后,点击finish即可.