【找工作】南京三星中国研究院


一、求职要求

来自:http://search.51job.com/job/51574357,c.html

职位职能:  软件工程师  

职位描述:

业务内容:

1. 从事智能家庭监控,设备互联等技术的研究和产品开发

2. 从事LBS/SNS,以及多屏融合业务的研究和产品开发

3. 从事新一代多媒体电子书编辑器/阅读器的开发及标准的研究


所需专业:

计算机科学/软件工程/信息处理/应用数学等相关专业


应聘要求:

1. 相关专业本科生及以上学历

2. 熟悉C/C++/Java或 CSS/XML/JavaScript等编程语言,熟悉UML和软件设计模式

3. 了解E-Pub, web layout engine或者HTTP, REST, web service等相关技术


符合以下条件之一者优先:

1. 熟悉YouTube, Facebook,Twitter等SNS API者优先

2. 有浏览器内核开发经验者或掌握Eclipse插件开发技术者优先

3. 熟悉数据挖掘,机器学习,计算机视觉等相关算法者优先

 

二、面试要求:

准备内容: 首先会有30分钟编程笔试题

面试交流中,将请您进行5分钟左右英文自我介绍(如:教育背景和重要个人论述、个人强项技术介绍等)

其余时间为面试官提问时间用中文对答,面试时间预计为30分钟左右


三、相关准备

 主要针对网上搜到的提到的相关题目就行准备

1. 简单描述堆和栈(《程序员面试宝典》P179)

(1)它们是两种不同的数据结构,栈(stack)是由操作系统自动分配/释放,存放本地的参数值、局部变量的值等。堆(heap)是程序员手动分配/释放。

(2)栈是线性结构,空间有限;而堆是线性表,比较灵活,有自由的存储区。C中的malloc分配的空间就在堆上,C++中分

         配的空间也在堆上。

 (3)程序在编译时堆变量和函数的分配都在栈上进行,且函数运行中函数的调用的参数的传递也在栈上运行。

   内存分为以下几个部分:代码区 ,全局区(静态区),堆,栈,文字变量区(字符串区)

2. 非递归实现中序遍历二叉树。(《数据结构--使用C++描述》P88)

     递归方法:   

template<class T>
void Visit(T &x)
{
   cout<<x<<“ ”;
}
template<class T>
void BinaryTree<T>::InOder(void(*Visit)(T&x))
{
   InOrder(Visit,root);
}
template<class T>
void BinaryTree<T>::InOrder(void(*Visit)(T &x),BTNode<T>*t)
{
 if(t){
     InPreOrder(Visit,t->lChild);
     Visit(t->element);
     InPreOrder(Visit,t->RChild);
       }    
}

非递归方法:
转载自:http://blog.csdn.net/cxllyg/article/details/7520037
#include <stdio.h>   
#include <malloc.h>   
#include <stdlib.h>   
#include <queue>   
#include <stack>   
#include <iostream>   
using namespace std;  
typedef struct BiTNode{  
    char data;  
    BiTNode *lchild, *rchild;  
}BiTNode,*BiTree;  
  
void CreateBiTree(BiTree &T)//建树,按先序顺序输入节点   
{  
    char ch;  
    scanf("%c",&ch);  
    if(ch==' ')  
    {  
        T=NULL;  
        return;  
    }  
    else  
    {  
        T=(BiTree)malloc(sizeof(BiTNode));  
        if(!T)  
            exit(1);  
        T->data=ch;  
        CreateBiTree(T->lchild);  
        CreateBiTree(T->rchild);  
    }  
}  
void InOrderTraverse(BiTree T)//非递归中序遍历   
{  
      
    stack<BiTree> Stack;  
    if(!T)  
    {  
        printf("空树!\n");  
        return;  
    }  
      
    while(T || !Stack.empty())  
    {  
        while(T)  
        {  
            Stack.push(T);  
            T=T->lchild;  
        }  
        T=Stack.top();  
        Stack.pop();  
        printf("%c",T->data);  
        T=T->rchild;  
    }                                                                                                                                     
}  
  
void PreOrderTraverse(BiTree T)//非递归先序遍历   
{  
      
    stack<BiTree> Stack;  
    if(!T)  
    {  
        printf("空树!\n");  
        return;  
    }  
    while(T || !Stack.empty())  
    {  
        while(T)  
        {  
            Stack.push(T);  
            printf("%c",T->data);  
            T=T->lchild;  
        }  
        T=Stack.top();  
        Stack.pop();          
             T=T->rchild;          
    }                                                                                                                                     
}  
   
void PostOrderTraverse(BiTree T)//非递归后序遍历,用一个标记标记右子树是否访问过   
{  
    int flag[20];  
    stack<BiTree> Stack;  
    if(!T)  
    {  
        printf("空树!\n");  
        return;  
    }  
    while(T)  
    {  
        Stack.push(T);  
        flag[Stack.size()]=0;  
        T=T->lchild;  
    }  
    while(!Stack.empty())  
    {  
        T=Stack.top();            
        while(T->rchild && flag[Stack.size()]==0)  
        {  
            flag[Stack.size()]=1;  
            T=T->rchild;  
            while(T)  
            {  
                Stack.push(T);  
                flag[Stack.size()]=0;  
                T=T->lchild;  
            }  
        }  
        T=Stack.top();  
        printf("%c",T->data);  
        Stack.pop();  
    }                                                                                                                                     
}  
void main()  
{  
    
    BiTree T;  
    CreateBiTree(T);  
    PreOrderTraverse(T);  
    printf("\n");  
         InOrderTraverse(T);  
    printf("\n");  
    PostOrderTraverse(T);  
    printf("\n");  
}



3. 图像轮廓检测常用方法(腾讯面试问过)

      利用边缘灰度的变化率、方向

 (1) 

      



        在没有边缘变化的情况下,g(x,y)的值基本为0,但是在边缘处,g(x,y)的值不为0,运用一个2*2的算子就可以检测出边缘部分,很巧妙的算法。

(2)Sobel 一阶导数算子

        

(3)Prewitt(一阶导数算子)

(4)kirsch(非线性算子)

Kirsch算子是R.Kirsch提出来一种边缘检测新算法,它采用8个模板对图像上的每一个像素点进行卷积求导数,这8个模板代表8个方向,对图像上的8个特定边缘方向作出最大响应,运算中取最大值作为图像的边缘输出

   (5)Laplacian 算子(二阶算子)


         为了去除噪声,可以使用高斯滤波器进行滤波,相当于低通滤波器。原始图像的边缘就处在拉普拉斯的值等于0的地方

(6)Canny算子(待补充)

           

四、面试内容

 (1)笔试部分

        编程题1:输入一个字符串,比如“aa%%bb”,输出其中字母的个数 如a:2;b;2

        编程题2:将一个数据转成单链表并排序(降序)。

                       将一个单链表再排序(升序)。

 (2)面试部分:

        1.堆和栈的区别(面试时忘了,之前还准备的)

        2.C语言中的静态函数解释下。

        3.K-means算法(个人项目内容)

        4.视频摘要介绍下,关键帧的定义?

        5.你还有什么想问我们的?
        6.红黑树是什么?

        7.知道哪些数据结构?

        8.自己独立编过哪些算法?如何实现的?

        9.是否用过其他非监督学习算法做视频摘要?

       10.人脸识别的时候选用什么特征?为什么?

       11. grabcut函数的原理?

       12. 感兴趣区域的广告监测的原理介绍下?

       13.谈谈对操作系统的了解。

       14. 语音识别的原理(腾讯电话面试)

       15. 视频检索你如何实现?

       16.车牌识别的原理?

       17.手写和打印的字你如何分别识别呢?

       18.SIFT算法解释?(联想实习面试)

       19.你如何设计图片检索系统?原理?(联想实习面试

       20.知道一些图像检索的比赛吗?

       21.个人专利中快递单上数字字符识别的原理?       

             其算法包含两个步骤,字符定位和字符识别。

             字符定位即通过用户选定大致区域,进行每个字符的精确定位与分割;而字符识别即对精确分割的每个字符进行识别。

             字符定位主要包含:区域定位、预处理以及字符分割三个步骤,当用户选定数字大致区域后,根据聚类算法准确定位号码区域;接下来,对区域进行去噪、自适应二值

             化以及形态学处理等预处理操作;最后,实现每个字符的精确分割,将单个字符所在区域用最小外接矩形框进行标示。而字符识别的步骤根据字符的性质不同而不同。

            当字符为印刷体的0-9数字时,建立一个包含各种印刷字体和大小的0-9数字的素材库,使用Tesseract-ocr算法进行训练,即可实现印刷体数字的识别。当字符为手写体

             的0-9数字时,同样建立一个各种手写字体和大小的0-9数字的素材库,训练时提取统计和结构特征训练SVM分类器;识别时,通过提取同样的特征,再通过训练好的

            SVM模型即可实现识别。




   


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值