University at Buffalo, The State University of New York
Master of Science, Computer Science and Engineering, 01/2013
GPA:3.7/4.0
Courses:Introduction to Operating Systems, Parallel and Distributed Processing, Analysis of Algorithm, Fundamentals of Programming languages, Software Enigneering Concepts, Rigorous Software Development, Introduction to Pattern Recognition,Computer Security,Applied Cryptography and Computer Security,Modern Networking Concepts.
Language: C, C++, Perl, java, Shell Scripts, c#, Python, Tcl, Assembly (Intel 8086)
APIs/Tools: Vim, GCC, GDB, Microsoft Visual Studio, Win32 API, MFC, Eclipse
Operating System: Unix/Linux, Red Hat Enterprise Linux, Ubuntu, Windows XP, Win7
Networking: TCP/IP, Ldap, WMI, router and switch, Security, FTP, HTTP, Wireless 3G UMTS network
Database: Oracle, SQL, MySQL , DB2
Source Code Management: Perforce, SVN
Professional Experience
System software intern at Palo Alto Networks Jun 2012 - Aug 2012
     Develop a Full-featured Perl program to monitor the memory usage of PanOS and agent to discover bugs and solve them.
     Analyze the performance of PanOS and agent in terms of memory usage and efficiency and then using stringbuffer method to speed up the xml composition process by 9 times.
     Measure the scale of PanOS in terms of large information and then fix a bug in cache to enhance the reliability of PanOS.
     Synchronize Ldap access operations by using windows critical section synchronization method and fix a bug in using windows event object synchronization.
     Add system logs when directory server connection fails using Wmic in PanOS.
PROJECTS
Information Safety Competition, Project Leader(total 5 teammates), March-June 2010
     Designed to propose a set of comprehensive solution to adapt to network environment and improve the safety of operating system.
     Contributed to design and implementation of an Adaptive Prevention System using GCC, SHELL, C/C++,PERL.
     Organized planning projects, allocating work, organized discussion and arranged meetings.
     Charged for modifying final System.
     Published the paper "The Threats and Some Solutions Faced by Modern Operating Systems" on the 2nd International Conference Subject to Software Technology and Engineering (ICSTE 2010) and could be indexed in IEEE Explore, Ei Compendex, ISI Proceeding and other indexing services.
Multi-threaded Webserver
     Speaks a simplified version of HTTP/1.0: it responds to GET and HEAD requests according to RFC1945.
     The server will consist of 2+n threads. A pool of n threads will be always ready for executing/serving incoming requests (n x execution threads). One thread will be responsible for listening to incoming HTTP requests and inserting them in a ready queue (1 x queuing thread). Another thread will be responsible for choosing a request from the ready queue and scheduling it to one of the execution threads (1 x scheduling thread).
     The scheduling policy to be used will be set via the [-s sched] option when server is first started. The available policies are First Come First Serve (FCFS) and Shortest Job First (SJF).
     It can also do log, debug, set listen port, change root directory, queuing time, number of execution threads and scheduling policy by using options when starting the server.
Election: A distributed leader selection protocol
     Implemented a program (a client) which will connect to other clients (peers). This networked group of clients will select a leader in a distributive fashion (i.e. there is no central authority that decides who the leader will be).
     First, each client will be assigned a unique numeric token by other clients. After client receives all tokens, it will claim the highest number as it’s ID. Then clients will broadcast message in which ID are included. Finally, all clients will send a salutary message to the leader who has the highest ID.
     Created both TCP and UDP connections among clients. Tokens passing will be sent over TCP connections, whereas the broadcast messages will be sent over UDP connections.
Virtual memory manager:
     Develop FIFO, SC, LFU and Optimal page replacement policies in virtual memory’s page replacement.
     This program can take a sequence of page references as well as the number of available frames as an input and compare the performance of the replacement-policy chosen by the user to the Optimal algorithm.
     Showed that SC algorithm is the best one and FIFO is slighter worse than SC. LFU is the worst. On the other hand, the performance of these algorithms heavily depends on the sequence of page references.
Disk Scheduling Simulator:
     Develop FCFS, SSTF,C-SCAN and LOOK policies in Disk Scheduling.
     This program takes a sequence of disk cylinder I/O requests as an input, as well as the total number of cylinders on the disk. It performs the scheduling of incoming I/O requests using the disk scheduling policy specified by the user(i.e. FCFS, SSTF,C-SCAN and LOOK policies), and measures total number of cylinders travelled by the disk head.
     Showed that SSTF is the best algorithm in terms of cylinders traveled. LOOK algorithm is slighter worse than SSTF and then FCFS is slighter worse than LOOK.C-SCAN is the worst. On the other hand, the performance of these algorithms heavily depends on the sequence of request.
ChatterBox team project:
     The objective of this project is to provide a simple, easy and affordable technology to help speech impaired individuals to communicate without any human support.
     Applying software concepts into this project, like requirement analysis, requirement specification, system specification, Brochure, change request form and a demo which is based on Android platform by java.
     You can visit Chatterbox website to find more information.
Parsing and Type Inference for TinyPL
     Write a Java program that reads in a syntactically well-formed TinyPL function from a file and prints out its inferred type or else reports a type-clash error.
     Write a recursive-descent, or top-down, parser for the given grammar. The output of the parser is a parse tree, which is a tree consisting different types of nodes corresponding to the different constructs of TinyPL.
     Write a visitor that traverses the parse tree output by the parser and constructs a list of type equations, where one equation is generated for each occurrence of an assignment statement, arithmetic and relational operator, and return statement in the TinyPL program.
     Write a type equation solver, which iterates over the list of equations solving for type variables. It may need to make multiple iterations in order to solve all equations.