Programming Interviews Exposed - John Mongan - E-Book

Programming Interviews Exposed E-Book

John Mongan

3,7
20,99 €

oder
-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.
Mehr erfahren.
Beschreibung

Be prepared for your next job interview with this tried-and-trueadvice In today's tight job market, competition for programming jobs ishotter than ever. This third edition of a popular guide toprogramming interviews includes new code examples, information onthe latest languages, new chapters on sorting and design patterns,tips on using LinkedIn, and a downloadable app to help prepareapplicants for the interview. Like its earlier editions, this guidecovers what software companies and IT departments want theirprogrammers to know and includes plenty of helpful hints to boostyour confidence. * Looks at current job search and hiring processes, such as therise of LinkedIn and other social networks as recruitingresources * Addresses the most important languages for a programmer to knowand features examples in multiple languages * Includes new programming questions designed to sharpen yourknowledge * Features all-new chapters on design patterns and sorting,including how to deal with memory constraints and mobilityissues Walk into your next job interview with confidence, knowing youhave thoroughly studied this newest edition of ProgrammingInterviews Exposed.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 583

Veröffentlichungsjahr: 2012

Bewertungen
3,7 (18 Bewertungen)
9
0
3
6
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Table of Contents

Cover

Chapter 1: Before the Search

Know Yourself

Know the Market

Develop Marketable Skills

Get Things Done

Manage Your Online Profile

Chapter 2: The Job Application Process

Finding and Contacting Companies

The Interview Process

A Recruiter’s Role

Offers and Negotiation

Chapter 3: Approaches to Programming Problems

The Process

Solving the Problems

Analyzing Your Solution

Chapter 4: Linked Lists

Why Linked Lists?

Kinds of Linked List

Basic Linked List Operations

Linked List Problems

Chapter 5: Trees and Graphs

Trees

Graphs

Tree and Graph Problems

Chapter 6: Arrays and Strings

Arrays

Strings

Array and String Problems

Chapter 7: Recursion

Understanding Recursion

Recursion Problems

Chapter 8: Sorting

Sorting Algorithms

Sorting Problems

Chapter 9: Concurrency

Basic Thread Concepts

Concurrency Problems

Chapter 10: Object-Oriented Programming

Fundamentals

Construction and Destruction

Object-Oriented Programming Problems

Chapter 11: Design Patterns

What Are Design Patterns?

Common Design Patterns

Design Pattern Problems

Chapter 12: Databases

Database Fundamentals

Database Problems

Chapter 13: Graphics and Bit Manipulation

Graphics

Bit Manipulation

Graphics Problems

Bit Manipulation Problems

Chapter 14: Counting, Measuring, and Ordering Puzzles

Tackling Brainteasers

Brainteaser Problems

Chapter 15: Graphical and Spatial Puzzles

Draw It First

Graphical and Spatial Problems

Chapter 16: Knowledge-Based Questions

Preparation

Problems

Chapter 17: Nontechnical Questions

Why Non-technical Questions?

Questions

Conclusion

APPENDIX: Résumés

The Technical Résumé

Frontmatter

About the Authors

About the Technical Editors

Credits

Preface & Introduction

Preface

Preface to the First Edition

Introduction

Why Programming Interviews?

How to Use this Book

Advertisement

Chapter 1

Before the Search

Before starting your job search, you need to prepare yourself. You shouldn’t apply for jobs without knowing what kind of job you want. Just being a good coder isn’t enough; you must understand what the market wants and how you can improve and package your own skills to make sure that the company with the job you want will want you.

Know Yourself

Stereotypes to the contrary, all programmers are not alike. Knowing what kind of programmer you are is crucial to finding the right kind of job. Although you can probably do many different kinds of programming tasks, you probably don’t find them all equally engaging. Doing something you don’t enjoy is fine on a short-term basis, but you need to be interested in and excited by what you’re doing for it to sustain you over the long term. The best programmers are passionate about their work, and you can’t truly be passionate about something that’s only moderately interesting to you.

If you’re not sure what you like or dislike, ask yourself some questions:

Are you a systems programmer or an application developer?

Systems programmers work on the code that keeps computer systems running: frameworks, tools, compilers, drivers, servers, and so on. Other programmers are their primary audience, so little interaction occurs with non-programmers — and usually the job involves little or no user interface work. Application developers, on the other hand, work on the pieces that those non-programmers use to do their own work, and often more interaction occurs with non-technical people. Many programmers find interacting with non-technical people about technical topics to be frustrating; on the other hand, you may enjoy creating applications that are seen and used by an audience that extends beyond other programmers.

Do you like coding user interfaces?

User interface design — also referred to as

user experience

(UX)

or

human computer interaction

(

HCI

) — is a role that draws on a diverse set of skills, including programming, graphic design, and psychology. This work is high profile because the user interface is the most visible part of any application. User interface design is particularly important in mobile application development, where the restrictions of the device require even greater creativity and innovation. If you have the necessary skills and enjoy this work, you’re in elite company: Many programmers find it finicky, hard to do well, and easy to criticize, especially when you take internationalization and accessibility issues into account.

Are you a good debugger?

If you think finding problems in your own code is difficult, imagine what it’s like to fix problems with someone else’s code. It requires strong analytical and problem-solving skills. Finding and fixing bugs can be extremely rewarding in its own right. You need to know if you’d be happy doing primarily maintenance work. (Of course, you should always expect to maintain your own code — all programmers need debugging skills.) In many cases, particularly in older companies, maintenance programming jobs involve working primarily with older technologies now considered outdated or no longer in fashion. Developing your experience and skills with older technologies may narrow the range of jobs that you’re suited for, but because expertise in older technologies is hard to find, you may be highly sought after by the smaller number of companies dependent on older programs.

Do you like testing?

Testing — also referred to as

quality

assurance

or QA for short — requires a combination of meticulous attention to detail to ensure that tests cover every conceivable use of a program and outside-the-box creativity to find bugs in the program by generating combinations of inputs that the program’s developers never considered. Skilled testers are hard to find, and good programming skills are required to write tools and automated test cases.

Are you an architect or a coder?

Every coding job includes some kind of design aspect, but certain jobs lean more one way than the other. If you enjoy designing, particularly designing the large-scale structure of big projects, a position as a software architect might be more appealing than a coding-focused job. Although you need a good understanding of how to code to be an effective architect, architecture positions can involve a lot of meetings and interpersonal interactions and little or no coding. Unless you have formal training in software architecture, the usual route to becoming an architect is to code first and to then display an aptitude for designing and fitting together different pieces of a project.

The preceding questions deal with different kinds of programming, but you should also consider non-programming responsibilities that might interest you and the work environment that you prefer:

Does management interest you?

Some coders have a long-term goal to become a manager, but others shiver at the very thought. If management is your goal, you need to develop leadership skills and demonstrate that you can manage the human parts of the software development equation as well as the technical pieces. If management is

not

your goal, look for companies with good

technical

career paths, so you’re not forced to manage people to be promoted. (You still need leadership skills to get promoted no matter which career path you choose, but leadership skills are separate from people management skills.)

Do you want to work for a big company?

There are advantages and disadvantages to working at big companies. For example, a large company may offer more job stability (although layoffs during downturns are common) and some kind of career path. It may also have a name brand that non-techies recognize. On the other hand, you may feel stifled by the bureaucracy, rigidness, and intracompany rivalry often found in bigger companies.

Do you want to work for a small company?

The pay may be less, but getting in on the ground floor at a new company can create opportunities for future advancement (and possibly substantial remuneration) as the company grows and succeeds. Also, the work environment at small companies is often more informal than at larger organizations. The downside, of course, is that most new ventures fail, and you may be out of a job within a year or two, most likely without the kind of severance package you might expect from a large company.

Do you want to work on open source projects?

The vast majority of programming jobs have historically involved proprietary, closed-source projects, which some programmers don’t like. A shift has occurred in some companies in favor of more open software development, which provides opportunities for people to work on open-source projects and still be paid for that participation. If it’s important to you that your work project is open source, it’s best to seek out companies already involved in open source. Trying to champion open source in traditional software companies is often a frustrating and fruitless undertaking.

Do you want long-term or short-term projects?

Some programmers crave change, spending a few months at most on each project. If you like short-term projects and don’t mind traveling, a gig with a consulting company might make more sense than a more conventional corporate job.

Realize that there are no universal answers to these questions, and no right or wrong way to answer them. The more truthful you are in answering them, the more likely you’ll find the kind of programming job you truly enjoy.

Know the Market

Knowing what you’d like to do is great, but don’t box yourself in too narrowly. You also need to understand the current job market and how it constrains your search for the “ideal” job, especially during an economic downturn like the one that burst the Internet bubble of the late ’90s or the global real estate and banking meltdown of the late 2000s.

Basic Market Information

A number of sources of information exist about what’s hot and what’s not in the developer job market, including the following:

Social networks —

The tremendous growth of social networks, such as LinkedIn, Facebook, and Google+, have transformed social networks into virtual recruiting grounds for all types and sizes of organizations. LinkedIn is particularly important. The other social networks can provide an indirect “pulse” of the market and also valuable leads for new and even unannounced job postings.

Online job sites

— Visit two kinds of job sites as part of your research. Job listing sites such as Dice (which specializes in technology-related career listings) and Monster (a general job listing site) enable you to see what kinds of jobs are currently in demand. Review sites such as Glassdoor and CareerBliss discuss working conditions, salaries, bonuses, perks, and other information useful for finding the right kind of company for you.

Bookstores

— Even though more and more programmer documentation is available online, professionally published books are still important, whether printed or downloadable. The number of books published on any given topic is a good indication of the level of interest the programming community has in that topic. Look especially for niche topics that are suddenly going mainstream, but beware that in most companies, mainstream use of technologies lags the interest levels represented in books by a few years.

Professional development courses

— Colleges and universities try to keep abreast of what companies want and create professional development courses around those needs.

If you’re not in college or university, find out what languages and technologies the local institutions and your alma mater require of their computer science students; although academic needs don’t always coincide with what employers want, educational institutions try to graduate students with practical skills that employers can use.

What About Outsourcing?

Outsourcing and offshoring — contracting tasks to other companies or foreign divisions or companies — is an important part of the technical employment landscape. Outsourcing of ancillary business activities such as payroll administration and property maintenance has been around for decades. More recently, this has expanded to programming, driven by the advent of inexpensive computers, cheap long distance communication provided by the Internet, and the recognition of technically educated workforces in low-wage developing countries. There was a flurry of outsourcing, particularly offshoring, in the mid-2000s. This has become less topical in the past several years because most companies that intend to outsource have already outsourced whatever they can. In addition, the costs of offshoring have risen as wages rise in the developing world, particularly in India and China. This coupled with recognition of the hidden costs of coordination with workforces from different cultures on very different schedules have led some companies to insource roles they previously outsourced. Nevertheless, outsourcing and offshoring remain a possibility for expanding companies that think they may cut costs, as well as established companies wondering if they’re paying too much by keeping their work local.

If outsourcing (and offshoring in particular) is something that worries you, consider taking steps to avoid landing a job that might be outsourced at some point in the future. The following are some suggestions:

Work for software development firms

— A software firm’s

raison d’être

is the intellectual property it develops. Although medium and large firms may open development centers in other parts of the world, the smart ones are unlikely to move their entire operations to other countries or entrust their future to outside firms. That said, some companies outsource all or substantial parts of a project to other countries for cost or other reasons, so it pays to research a company’s behaviors and policies.

Work for an outsourcer

— Oddly enough, many outsourcing firms hire personnel in countries such as the United States.

Move up the programmer food chain

— Design-oriented jobs are less likely to be outsourced. Coders are relatively cheap and plentiful, but good designers are much harder to find. (This assumes that your company recognizes that good design skills are separate from good coding skills.) Another way to make yourself more difficult to replace is to acquire

domain specific knowledge

: expertise related to the programs you write but outside of the field of programming. For example, if you develop financial software, it’s much more difficult to outsource your job if it involves the application of accounting skills in addition to programming than if you’re purely a coder.

Take a management job

— Management can be a refuge from outsourcing, so a management-oriented career path is one option to consider.

Of all these options, moving up the food chain is usually the best approach. The more non-programming knowledge your job requires, or the more interaction with customers, the less likely you are to be outsourced. There’s no guarantee you’ll never be outsourced, of course, or that you’ll always keep your job. Your company may shutter or downsize the project you’re working on at any point, after all, and put you back on the street. This is why developing reusable and marketable skills throughout your career is extremely important.

Develop Marketable Skills

In the appendix we discuss your résumé as a marketing tool to get you job interviews. The easiest thing to sell is something that people want, so it’s important that you have marketable skills to offer a prospective employer.

To stand out from the crowd both on paper and in the interviews you need to develop skills and accomplishments, especially if you’re entering the job market for the first time. The following are some approaches you can take:

Upgrade your credentials

— Companies such as Google are well known for favoring job applicants with graduate degrees. Getting a master’s or doctorate degree is one way to upgrade your credentials. You can upgrade your credentials in other ways, such as taking university or professional development courses or participating in programming contests.

Get certified

— Certification is a contentious issue in the software development profession, but some jobs either prefer or require candidates to be certified in specific technologies, especially IT jobs. Consider surveying job listings to see whether certifications are required for the jobs that interest you before you invest time and money in certifications.

Work on a side project

— A great way to expand your skill set is to work on a project not directly related to your primary work or study focus. Starting or joining an open-source development project is one way to go. Or if you work at a company, see if it will let you spend time on an ancillary project.

Do well in school

— Although grades aren’t everything, they are one measure that companies use to rank new graduates with little job experience. The better your grades, especially in computer science and mathematics courses, the more you can impress a potential employer.

Keep learning

— The end of formal education doesn’t mean you should stop learning, especially when so much information about programming is available from a wide variety of sources. Whether it’s books or blogs, there’s always a way to keep current, no matter what type of programming you do. It’s also a great way to expand your horizons and discover other areas of interest. This kind of learning doesn’t show up on your résumé, but it’s something you can highlight in your technical interviews.

Be an intern

— New graduates who manage to secure employment during their non-school terms — especially those that participate in cooperative education programs — have a huge advantage over their peers who haven’t yet ventured into the real world. Software development in the field is often different from software development in an academic setting, and potential employers are cognizant of this.

The key is to keep learning, no matter the stage of your career. You can’t develop marketable skills overnight; they take some effort and initiative on your part but can have long-lasting effects on your career.

Get Things Done

Companies look for software developers who get things done. You may look great on paper in terms of skills and education, but credentials and knowledge don’t make products or services that a company can sell. It’s your ability to accomplish something that truly sets you apart from the other candidates.

Getting an advanced degree such as a Ph.D., becoming a trusted contributor to a widely used open source project, or carrying a product through from start to launch are all big accomplishments. But small accomplishments can be just as important, such as adding a feature to a product, making a measurable improvement to the product’s performance, starting and completing a side project, or creating a useful application for a class project. These all show that you can get things done.

Recruiters and hiring committees like to see that you have multiple accomplishments — a pattern of getting things done. This is especially true for more senior and experienced developers. You need to show those accomplishments on your résumé and your online profile. Whether your accomplishments are big or small, always be ready to talk intelligently and confidently about each one. This is incredibly important! Make sure you can clearly and succinctly describe the underlying problem and how your project solved it, even to a non-technical person. Displaying a passion for programming is always positive; clearly communicating how your passion produces products and services that other people can use makes you really stand out from the other candidates.

Manage Your Online Profile

Your online profile — everything public about you online — is just as important as your résumé. Recruiters use online profiles to find desirable candidates. Screeners use them to weed out undesirable applicants. Interviewers use them to prepare in-depth interview questions when résumés lack details.

An online profile consists of any or all these things:

LinkedIn profile

— LinkedIn is a social network for tracking professional connections. It’s free to join, and you can create a detailed profile about yourself, including your jobs and your education — essentially an online résumé. Colleagues and customers can publicly endorse you or your work, which can be quite valuable.

Other social network profiles

— Other social networks such as Facebook or Google+, depending on your privacy settings.

Personal website

— This is a potential source of more in-depth information about you.

Articles and blog posts

— If you write about programming-related topics, this is a good way for recruiters to assess your experience.

Comments and forum posts

— These provide another way to gain some insight into your programming skills and your general attitude toward technology and technology companies.

The impression employers get from your online profile can affect your chances of being hired. If your résumé lists extensive experience with C# but they find a forum posting you made only 6 months ago asking how to open a file in C#, they’ll probably conclude that you’re exaggerating your experience level, putting your whole résumé into doubt. Or if they see disturbing or inflammatory material that they think you’ve authored, they may decide to pass you over for an interview, no matter how well your résumé reads or how long ago you wrote those things. No one’s proud of everything they ever did in high school or college, but those who have grown up in the post-Internet era see things follow them that they’d rather forget about, something the older generations rarely had to contend with.

At some point before you apply for a job, take a good look at your online profile. Put yourself in a company’s shoes to see how much information — good or bad — they can find about you, or link to you. If your online profile is possibly going to prevent you from being hired, take some steps to sanitize your profile. If possible, remove questionable material from the web and from the search engines.

Spend some time developing the positive aspects of your profile. This is particularly important if there’s unfavorable material about you on the web that you’re unable to remove. You may want to read a little about search engine optimization (SEO) and apply some of these techniques to get the positive aspects of your profile to appear before older, less favorable items in search results. If you don’t have a LinkedIn profile, create one, and make it as detailed as possible; if you already have one, make sure it’s up to date. Consider creating a profile on Stack Overflow or a similar Q&A site, and spend some time answering questions relating to your areas of expertise.

WARNING One caveat about updating your LinkedIn profile: By default, all your contacts are notified of your updates. Many people have learned to interpret these notifications as de facto announcements that someone is looking for a new job. That might help you get the word out, but if your contacts include people at your current company and you don’t want them to know you’re looking for a new job, disable these notifications before you make your updates.

Develop an online profile that doesn’t throw any red flags in front of the screeners and shows you in the best possible light. Finding a good job is hard enough — why make it harder?

Summary

What you do before a formal job search is critical to finding the right kind of job. With that in mind, you should consider the following things:

Know your likes and dislikes as a programmer and a prospective employee.

Understand the market to find and apply for the best jobs.

Develop the marketable skills that employers look for and that can enhance your career.

Manage your public profile to show you in the best possible light and make sure there are no surprises to turn off potential employers.

Once you’ve worked through all these points, you’re ready to begin your job search.

Chapter 2

The Job Application Process

Interviewing and recruiting procedures are similar at most tech companies, so the more prepared you are for what you will encounter, the more successful you will be. This chapter familiarizes you with the entire job-search process, from contacting companies to starting your new job, so you won’t need to write off your first few application attempts as learning experiences. Hiring procedures at technical companies are often substantially different from those followed by more traditional firms, so you may find this information useful even if you’ve spent some time in the working world.

Finding and Contacting Companies

The first step to getting a job is to find and make contact with companies you’re interested in working for. Although referrals are the best way to land a job, you can also work with headhunters or contact a company directly.

Finding Companies

You can better target your search if you know which companies you’re most interested in working for. Big companies are easy to find — you can probably name a dozen national and international tech companies off the top of your head. You can identify candidate medium-sized (as well as large) companies through articles in trade and local business press. Many magazines and newspapers regularly compile lists of successful companies and rankings of the best places to work. (Take these rankings with a grain of salt: There’s often a lot of variation in quality of work life across large companies.) Most companies of this size also advertise at least some of their job openings on online job boards; these postings can help you identify companies to investigate even if the specific job posted isn’t right for you.

Small companies, especially early-stage startups, can be much more challenging to find. Often these companies are too small, too new, or too secretive to get much press. They may lack the resources to advertise their openings beyond their own website, which you can’t find unless you know the name of the company. One good way to find these companies is asking friends and acquaintances if they know of startups that are hiring. Another technique is to use online social networks. You can use some sites, such as LinkedIn, to search for people by profession within a region. Most people on these sites list the name of their company, so you can build a list of companies in a particular region by going through the results of this search. This can be laborious, but part of the payoff is that if you can’t find these companies any other way, neither can anyone else, so you’re likely to be competing with fewer applicants.

Getting Referrals

Referrals are the best way to find a job. Tell all your friends about what kind of job you’re looking for. Even if they don’t work for the kinds of companies that might hire you, they may know people who do. Coming from “Susan’s friend” or “Bill’s neighbor,” your résumé is sure to receive more careful consideration than the hundreds (or thousands) of anonymous résumés that come flooding in from online postings, job fairs, and other recruitment activities. Be sure to use your social networks, both real and virtual, to identify potential job opportunities.

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!