delphi5开发人员指南_建立开发人员职位的黄金指南

这是一份针对Delphi5开发者的详细指南,旨在帮助他们成功获得开发岗位。内容涵盖了从基本技能到面试策略的所有关键点。
摘要由CSDN通过智能技术生成

delphi5开发人员指南

Landing a software engineering position can be one of the most difficult obstacles that you can face. Each rejection can feel like a punch to the face.

获得软件工程职位可能是您面临的最困难的障碍之一。 每次拒绝都会给人以冲击。

This is why it’s important to keep a positive mentality while taking this journey. The company you end up working at can be the 3rd company you apply to or the 200th. Not every company will be looking for the exact skill set that you have to offer, but there is at least one company out there that is. It’s a numbers game. Every rejection is an opportunity to learn from your mistakes, which only increases your chances of finding that perfect match.

这就是为什么在旅途中保持积极的心态很重要的原因。 您最终所在的公司可以是您申请的第三家公司或第二百家公司。 并非每个公司都会寻找您必须提供的确切技能,但是那里至少有一家公司。 这是一个数字游戏。 每一次拒绝都是从错误中学习的机会,这只会增加找到完美匹配的机会。

My goal is to show you what areas to focus on when applying to jobs and how you can become a champion in each one.

我的目标是向您展示在申请工作时应重点关注的领域,以及如何成为每个领域冠军。

目录 (Table of Contents)

作品集 (Portfolio)

Your portfolio is the place where you’ll showcase your best work. It’s where you’ll prove that you can walk the walk. It’s comprised of your projects and your portfolio website.

您的作品集是展示最佳作品的地方。 您将在这里证明自己可以漫步。 它由您的项目投资组合网站组成

Note: I’ll be using “project” and “app” interchangeably.

注意:我将交替使用“项目”和“应用”。

专案 (Projects)

Companies want to see that you can apply your engineering skills to address an actual problem. Your app doesn’t have to be the next Khan Academy, but it should show that you can identify a problem and implement a way to solve it. To illustrate these points, I’ll talk about an app I built called Tangent.

公司希望看到您可以运用您的工程技能来解决实际问题。 您的应用不必一定是下一个可汗学院,但是它应该表明您可以识别问题实现解决问题的方法。 为了说明这些观点,我将讨论我构建的名为Tangent的应用程序。

Tangent is a mobile application for students to convert handwritten mathematical equations to beautifully typed digital text.

Tangent是一个移动应用程序,可让学生将手写的数学方程式转换为精美的数字文本

The first image below is an example of a handwritten math equation and the second is the digital text output. Students would then be able categorize these equations and save them for future studying.

下面的第一个图像是手写数学公式的示例,第二个图像是数字文本输出。 然后,学生将能够对这些方程式进行分类并将其保存以备将来学习。

Image for post

The Problem

问题

Tangent solves a clear problem. It targets the inefficiencies of taking handwritten notes and gives the user an easy way to store math problems.

切线解决了一个明确的问题。 它解决了手写笔记效率低下的问题,并为用户提供了一种存储数学问题的简便方法。

The Implementation

实施

Tangent uses the same technologies of the companies I was applying to. I was applying to primarily web developer positions, so it utilized JavaScript, Node.js and MongoDB.

Tangent使用与我申请的公司相同的技术。 我主要是在Web开发人员职位上申请的,因此它利用了JavaScript,Node.js和MongoDB。

And since I was applying to several educational technology companies, I made sure to use APIs and libraries that made sense. For instance, I used the Mathpix API and Khan Academy’s KaTeX library.

由于我向多家教育技术公司提出了申请,因此我确保使用了有意义的API和库。 例如,我使用了Mathpix API和可汗学院的KaTeX库。

The journey to a finished product can be pretty daunting, so I’ll go over some guidelines on how to ace the main steps of the process.

最终产品的旅程可能会令人生畏,因此,我将介绍一些有关如何实现流程主要步骤的指南。

The Process

流程

  1. Ideation

    构想

At the end of the day, you are trying to solve a problem. The more motivated and inspired you are about the problem, the more productive you’ll be. So, I recommend generating a list of problem domains that are personal to you. Try keeping a notebook and writing down anything that annoys you or you wish were different. What issues do you see as you go about your day? What obstacles do you see your closest friends/family face? Try doing this for around a week and you should find a few good starting points. After you find a problem, brainstorm ways an app could solve it.

归根结底,您正在尝试解决问题。 您对这个问题越有动力和启发,您就会越有效率。 因此,我建议您生成一份针对您个人的问题域列表。 尝试保留笔记本并写下任何使您烦恼或您希望与众不同的烦恼。 您一天的工作中会看到哪些问题? 您看到最亲密的朋友/家人时遇到什么障碍? 尝试进行大约一周的操作,您应该找到一些不错的起点。 发现问题后,请集思广益,确定应用程序可以解决问题的方式。

Your worst enemy during this process is maladaptive perfectionism. I remember pacing in my room for hours critiquing my ideas. Every time I came across a decent idea, I ended up scrapping it because of one issue or another. Perfectionism can be a huge roadblock during this process, so don’t be afraid to simply pick an idea from your list and stick with it.

在此过程中,您最大的敌人是适应不良的完美主义。 我记得我在房间里花了几个小时来打扰我的想法。 每当我遇到一个不错的主意时,我都会因为一个或另一个问题而放弃它。 完美主义在此过程中可能是一个巨大的障碍,因此不要害怕从清单中挑选一个想法并坚持下去

Now that you have identified a problem and how your app would solve it, it’s time to wireframe.

既然您已经确定了问题以及您的应用程序将如何解决该问题,现在该开始线框了

2. Wireframing

2.线框

Wireframing allows you to visualize how the user will use your app. Imagine yourself in the user’s shoes and outline the steps they would take in the app to reach a particular goal.

通过线框图,您可以可视化用户将如何使用您的应用程序。 想象一下自己在用户的鞋子上,并概述他们在应用程序中要实现特定目标所应采取的步骤。

With Tangent, the main goal was to convert handwritten equations to digital text. Here are the initial wireframes I used for that workflow.

使用Tangent,主要目的是将手写方程式转换为数字文本。 这是我用于该工作流程的初始线框。

Image for post

The more complex the app is, the more workflows you’ll need. Paper wireframes are a great way to flesh out all of your workflows quickly and easily. However, there are great tools to build more sophisticated wireframes like Marvel and InVision.

该应用程序越复杂,您将需要的工作流程越多。 纸线框是快速轻松地充实所有工作流程的好方法。 但是,有很多很棒的工具可以构建更复杂的线框,例如MarvelInVision

Now that you have your workflows drawn out, it’s time to break these down into user stories.

现在您已经制定了工作流程,是时候将其分解为用户案例了

2. Divide and Conquer with User Stories

2.划分和征服用户故事

User stories are how you make the jump from blueprint to code. They define the requirements of a specific feature in the app from the user’s perspective.

用户故事是您如何从蓝图过渡到代码。 他们从用户的角度定义应用程序中特定功能的要求

Let’s use Tangent as an example. One of the features is that a user can view all of their saved problems. When they look at the screen, they see the subject and category of each equation. Let’s convert this feature into a user story.

让我们以切线为例。 功能之一是用户可以查看所有已保存的问题。 当他们看着屏幕时,他们看到每个方程的主题和类别。 让我们将此功能转换为用户故事。

Title: As a user, I can see all of my saved problems in one place, so I can easily access them when needed.

标题:作为用户,我可以在一个地方看到所有保存的问题,因此我可以在需要时轻松访问它们。

Acceptance Criteria:

验收标准

  • User can see the problems in a scrollable list format

    用户可以滚动列表格式查看问题
  • Each problem should show the subject and topic

    每个问题都应显示主题和主题
  • When the user taps on any equation, they should be navigated to a detailed view of the problem

    当用户点击任何方程式时,应将其导航到问题的详细视图

As shown above, the main components of the user story are the title and the acceptance criteria.

如上所示,用户故事的主要组成部分是标题接受标准

The title is a short summary of the feature written from the user’s perspective. It’s helpful to format it like so:

title是从用户角度编写的功能的简短摘要。 像这样格式化它会很有帮助:

As a {end user}, I can {action}, so that I can {benefit}

作为{最终用户},我可以{行动},以便{受益}

The acceptance criteria is the set of requirements that must be completed to call the story done. As tempting as it may be: the acceptance criteria should not include implementation instructions. These user stories should be a description of what happens, not how it should be built.

接受标准是必须完成的一组条件才能调用已完成的故事。 可能很诱人:接受标准不应包括实施说明。 这些用户故事应该是对所发生情况描述,而不是应如何构建。

The above user story is somewhat complex. It’ll probably require calls to the backend in order to fetch all of the problems. It may even need pagination to improve the user experience.

上面的用户故事有些复杂。 为了获取所有问题,可能需要调用后端。 甚至可能需要分页来改善用户体验。

Not every story has to be this complex. Some may be simply adding a save button or changing the color of text in the app. Knowing the size of a story will help you determine your capacity, or how many stories you can take on at any point in time. Companies will sometimes use Fibonacci numbers to describe the size of a story. A “3” might be a small design change. A “13” may be a riskier feature that may not have an obvious implementation strategy. It’s important to keep your stories as small as possible. If you’re sizing at a “21”, you should consider breaking down the story into multiple smaller ones.

并非每个故事都必须如此复杂。 有些可能只是添加一个保存按钮或更改应用程序中文本的颜色。 了解故事大小将有助于您确定自己的能力或在任何时间点可以处理多少个故事。 公司有时会使用斐波那契数字来描述故事的大小。 “ 3”可能是一个很小的设计更改。 一个“ 13” 可能是一个风险较高的功能,可能没有明显的实施策略。 保持故事尽可能小很重要。 如果您将尺寸定为“ 21”,则应考虑将故事分解为多个较小的故事。

When working on smaller projects, I find it helpful to use T-shirt sizing. This involves sizing your stories as, small, medium or large. You can then assign a time duration for each size. Maybe small stories take 1–2 hours while large stories take a whole day to complete. This will vary depending on the type of app you’re building and your coding ability.

在处理较小的项目时,我发现使用T恤尺码会有所帮助。 这涉及将您的故事按大小,大小或大小排列。 然后,您可以为每种尺寸指定持续时间。 小故事可能需要1-2个小时,而大故事则需要一整天才能完成。 具体取决于您所构建的应用程序类型和编码能力。

These user stories are your source of truth and will make your development experience much smoother.

这些用户故事是您的真实来源,将使您的开发体验更加流畅。

Once you’ve finished your app, you can add it to your portfolio website!

完成应用程序后,可以将其添加到您的投资组合网站!

投资组合网站 (Portfolio Website)

Your portfolio website is your chance to show why you’re fit for that developer position. You’ll be able to utilize the visual potential that a website can provide in order to impress the recruiter/future employer in a way that a resume or LinkedIn profile simply cannot. I’ll breakdown the main components using my own portfolio website.

您的投资组合网站是您展示自己为何适合该开发人员职位的机会。 您将能够利用网站提供的视觉潜能,以简历或LinkedIn个人资料根本无法做到的方式打动招聘者/未来的雇主。 我将使用自己的投资组合网站细分主要组件。

  1. About Me

    关于我

This section should tell a brief story of who you are, your competencies, and what you hope to do with your career. Be as compelling as possible. Make sure to include these points below:

本节应简要介绍您是谁,您的能力以及您希望如何从事职业。 尽可能引人注目。 确保在下面包括以下几点:

  • Speak to your passions (interested in fintech, edtech, etc).

    谈谈您的激情(对金融科技,教育科技等感兴趣)。

  • Mention accomplishments you’re proud of so your abilities stand out!

    提及成就时,您引以为傲,因此您的能力脱颖而出!

  • Include links to your GitHub, LinkedIn and a PDF of your resume.

    包括指向GitHubLinkedIn的链接以及简历的PDF。

  • Brevity is the soul of wit. Constrain it to 4–5 sentences.

    精简是机智的灵魂。 将其限制为4–5个句子。

Here is my About Me section with the text pasted below it.

这是我的关于我部分,下面粘贴了文本。

Image for post

“As a software engineer who studied at MIT, my goal is to use technology to improve how society utilizes the tools of education and science for social progress.

“作为在麻省理工学院学习的软件工程师,我的目标是使用技术来改善社会如何利用教育和科学工具促进社会进步。

From founding a non-profit in the education sector to helping engineer software that allows anyone to view the microscopic world from their phones, my passion for technology brings me closer to that goal everyday.”

从在教育领域成立非营利组织到帮助工程师开发允许所有人使用手机查看微观世界的软件,我对技术的热情使我每天都更加接近这一目标。”

2. My Projects

2.我的项目

The My Projects section is the core of your portfolio site. It not only showcases the hard work you put into your apps, but the engineering skills you’d be bringing to the position. This section should include:

我的项目部分是投资组合网站的核心。 它不仅展示了您投入应用程序中的辛苦工作,还展示了您将带给自己的工程技能。 本节应包括:

  • A brief description of each app. If possible, include an image/logo.

    每个应用的简要说明。 如有可能,请附上图片/徽标。

  • The technologies and languages you used in each app.

    您在每个应用程序中使用的技术语言

  • Links to the live app. If this is not applicable, be sure to link the GitHub repository.

    链接到实时应用程序。 如果这不适用,请确保链接GitHub存储库。

Take a look at how I outlined my My Projects for reference.

看看我如何概述我的项目以供参考。

Image for post

3. My Education

3.我的教育

Be sure to include any relevant education experience. Include the following:

确保包括任何相关的教育经验。 包括以下这些:

  • Years you attended the institution (e.g., 2015–2020)

    您就读该机构的年限(例如,2015–2020年)

  • A description of what you did there. Could be your major or relevant skills you learned.

    您在那儿干什么描述。 可能是您学到的专业或相关技能。

Image for post

4. Accomplishments

4.成就

Do you have any publications? Any organizations you started? Any popular articles you wrote on Medium? Here is the place to include it. This adds depth to your profile and can set you apart from other candidates.

你有出版物吗? 您创办了任何组织吗? 您在Medium上写过任何热门文章吗? 这是包含它的地方。 这增加了您的个人资料的深度,可以使您与其他候选人脱颖而出。

Personally, I published a test-prep book and started a non-profit when I was younger, so I included those.

就我个人而言,我出版了一本考试准备书,并在我年轻的时候就开始了非营利性活动,因此我将其包括在内。

Image for post
Image for post

And there we have it! Your portfolio website. Now that we’ve covered the portfolio component of your application, let’s review with a short checklist. Use this as a loose guide to confirm that you’re on the right track.

我们终于得到它了! 您的投资组合网站。 既然我们已经介绍了您的应用程序的投资组合部分,下面以简短的清单进行检查。 以此作为宽松的指南,以确认您的工作方向正确。

投资组合清单 (Portfolio Checklist)

  • The​ ​portfolio​ ​is​ ​presented​ ​in​ ​a unique​ ​and​ ​inviting​ ​personal​ ​website that​ ​displays​ ​a​ ​rich​ ​portfolio​ ​of original​ ​projects.

    该组合呈现在一个独特的和诱人的个人网站,显示了丰富的原始项目组合。

  • There are 3 or more projects and a few are creative/sophisticated.

    3个或更多项目,而一些则很有创意/复杂。

  • Projects are easy to explore and use. Make sure there are no barriers like authentication. Assume recruiters/potential employers won’t have the patience to sign up.

    项目易于探索和使用。 确保没有身份验证之类的障碍。 假设招聘人员/潜在雇主将没有耐心来注册。

  • Project code is easy to find.

    项目代码很容易找到

  • Stretch Goal: One or more projects has live users/revenue/GitHub followers.

    延伸目标:一个或多个项目具有实时用户/收入/ GitHub关注者。

At this point, you should have enough information to complete your resume. Let’s take a look at how to write an excellent resume.

在这一点上,您应该有足够的信息来完成您的简历。 让我们看一下如何编写出色的简历。

恢复 (Resume)

The resume is a critical piece to any application. Your resume should be simple and easy-to-read. Keep these following formatting tips in mind when constructing your resume.

简历对于任何应用程序都是至关重要的。 您的简历应该简单易读。 构造简历时,请牢记以下格式提示。

  • Avoid fancy typefaces and images

    避免花哨的字体和图像

  • Stick to black and white

    坚持黑白

  • Keep resume length under one page

    简历长度不超过一页

Let’s review the basic resume components and the strategies to make each section a winner!

让我们回顾一下基本的简历组成部分以及使每个部分成为赢家的策略!

个人信息 (Personal Information)

This should be at the top of your resume. It should include your:

这应该在您的简历的顶部。 它应包括:

  • Name

    名称
  • Address (city and state)

    地址(城市和州)
  • Phone number

    电话号码
  • Email

    电子邮件
  • GitHub link

    GitHub链接
  • LinkedIn profile link

    领英个人资料链接
  • Portfolio website link

    作品集网站链接

I recommend using bitly to shorten links that are too long to fit on the page.

我建议使用一点点的链接来缩短太长而无法容纳在页面上的链接。

技术能力 (Technical Skills)

This will consist of the languages and frameworks that you’re proficient in. List them in the order of strongest to weakest. Be ready to have conversations about any item on this list with your interviewer. Check out the Technical Skills section on my resume below for reference.

这将由您精通的语言和框架组成。按照从最强最弱的顺序列出它们。 准备与您的面试官就此列表中的任何项目进行对话。 在下面的简历中查看“技术技能”部分,以供参考。

Image for post

产品展示 (Products)

The Products section should contain descriptions of the apps you’ve built and their impact. They should also emphasize your individual contribution to the product.

产品”部分应包含对您已构建的应用及其影响的描述。 他们还应强调您对产品的个人贡献

The word, “product” holds more weight than “project”, so I recommend using that. Before I dissect this section, I’ll show you an example from my resume for more context.

“产品”一词比“项目”更具分量,因此我建议使用它。 在剖析本节之前,我将向您展示简历中的示例,以获取更多背景信息。

Image for post

Ordering

订购方式

Be sure to order your products from most to least relevant to the job description. For instance, your front-end apps should come first if you’re applying to front-end developer positions.

确保与职位描述最相关最不相关的顺序订购您的产品。 例如,如果您要申请前端开发人员职位,那么您的前端应用程序应该排在第一位。

Roles

的角色

If you were a part of a team, make sure to include your role on the team. In my examples, I was the backend engineer.

如果您是团队的一部分,请确保将您的角色包括在团队中。 在我的示例中,我是后端工程师。

Action — Result Format

行动-结果格式

The bullet point descriptions of your contributions should follow the action-result format.

您的贡献的项目符号要遵循行动结果格式。

The action will be a verb that emphasizes your skills and contributions. For instance, if you’re applying to startup roles, you would use words like, “built”, “created”, or “initiated”. The result is the outcome of your contributions. Take a look at the two examples below.

动作将是一个动词,强调您的技能和贡献。 例如,如果您要申请启动角色,则可以使用“已构建”,“已创建”或“已启动”之类的词。 结果就是您的贡献的结果。 看下面的两个例子。

Managed [action] a $9,000 budget to organize hackathon events for 1,400 students [result].

管理[活动] 9,000美元的预算,为1,400名学生组织黑客马拉松活动[结果]。

Architected [action] Node.js backend with Mathpix and KaTeX APIs to convert 800+ raw image data objects to rendered html [result].

使用Mathpix和KaTeX API构建的[action] Node.js后端,可将800多个原始图像数据对象转换为渲染的html [结果]。

Make Use of Data

利用数据

Notice that in the examples above, there are quite a few numbers used. Whenever possible, use data to quantify your impact. This could be the number of downloads, users, reviews, page visits, etc. Using numbers communicates the scope of the app’s impact and scale. It’s way more impressive to say my “app reached #X users” than to simply say, “I launched an app”.

注意,在上面的示例中,使用了很多数字。 尽可能使用数据来量化您的影响。 这可以是下载,用户,评论,页面访问等的次数。使用数字可以传达应用的影响范围和规模。 说“我的应用吸引了#X用户”比简单地说“我启动了一个应用”更令人印象深刻。

工作经验 (Work Experience)

This section should include descriptions of your previous roles. Be sure to include the most relevant roles first. Follow the action-result formatting like in the Products section. Feel free to use my Work Experience section below for reference.

本部分应包括您以前的角色的描述。 确保首先包含最相关的角色。 按照产品部分中的操作结果格式进行操作。 请随意使用下面的“我的工作经验”部分作为参考。

Image for post

教育 (Education)

This section is pretty straightforward. Make sure to order by most recent. If your institution or program is not well-known, try including a short description.

本节非常简单。 确保在最近订购。 如果您的机构或课程不知名,请尝试提供简短说明

Image for post

If there is room, feel free to include other accomplishments such as awards or publications in your resume. You could also include relevant volunteer experience. For instance, it would be helpful for interviewers to know that you mentored high school students in computer science.

如果有空间,请在简历中包括其他成就,例如奖项或出版物。 您还可以包括相关的志愿者经验。 例如,对访问员来说,知道您在计算机科学领域指导了高中生很有帮助。

Both your resume and portfolio website are ways to convey your skills as a developer. However, neither would offer the same visibility that a great LinkedIn profile would. So, let’s take a look at some tips on how to construct an effective LinkedIn.

您的简历和投资组合网站都是传达您作为开发人员的技能的方法。 但是,两者都无法提供与出色的LinkedIn个人资料相同的知名度。 因此,让我们看一下有关如何构建有效的LinkedIn的一些技巧。

领英 (LinkedIn)

Fortunately, several of the tips for constructing a strong portfolio website apply to creating your LinkedIn.

幸运的是,构建强大的投资组合网站的一些技巧适用于创建LinkedIn。

关于科 (About Section)

For the About section, you can paste the About Me section you wrote for your portfolio website. Additionally, you’ll want to include your:

对于“关于”部分,您可以粘贴为投资组合网站编写的“关于我”部分。 此外,您需要包括:

  • GitHub link

    GitHub链接
  • Portfolio website link

    作品集网站链接
  • All the languages and frameworks you’re proficient in (paste the ones you wrote for your resume)

    您精通的所有语言和框架(粘贴您为简历编写的语言和框架)

Make sure to exclude the word “student” and any high school experiences. Say that you’re currently an “engineer.” You are — you’ve built more apps than many full-time engineers. The word “student” may undersell your abilities.

确保排除“学生”一词和任何高中经历。 假设您目前是“工程师”。 您就是–与许多专职工程师相比,您构建的应用程序更多。 “学生”一词可能会打败您的能力。

特色栏目 (Featured Section)

Here, you should include:

在这里,您应该包括:

  • Your resume in PDF format

    PDF格式的简历

  • Links to any relevant high quality articles you’ve written

    链接到您撰写的任何相关的高质量文章

  • Any publication or media content that speaks to your credibility

    任何表明您信誉的出版物或媒体内容

其他技巧(Other Tips)

  • Be brief and make it easy for people to skim your entire profile.

    要简短,使人们可以轻松浏览您的整个个人资料。

  • Put all your products in the “Experience Section” of your profile — it will make them more visible. When you do this, be sure to include some indicator that lets recruiters know that the product isn’t a full-time role. You can include the “(product)” at the end of the title. Or include the past time range during which you worked on the product.

    将您所有的产品放在个人资料的“体验”部分中-这将使它们更显眼。 执行此操作时,请确保包含一些指示器,以使招聘人员知道该产品不是专职人员。 您可以在标题末尾添加“(产品)”。 或包括您使用该产品的过去时间范围。

  • Get skill endorsements from classmates, colleagues and friends.

    获得同学,同事和朋友的技能认可

  • Photo — should be professional: business casual with eyes facing the camera.

    照片—应该是专业的:商务休闲,眼睛面对镜头。

Once you’re finished with your LinkedIn profile, I recommend sending it to a classmate or colleague to review and offer feedback. Now that we have LinkedIn covered, let’s move onto your GitHub.

完成LinkedIn个人资料后,建议您将其发送给同学或同事,以进行审查并提供反馈。 现在我们已经涵盖了LinkedIn,让我们进入您的GitHub。

的GitHub (GitHub)

A polished GitHub is key to your job search. Employers will visit your GitHub so it’s important that they can understand your projects and that they see clean code.

精美的GitHub是您求职的关键。 雇主将访问您的GitHub,因此重要的是,他们必须了解您的项目并看到清晰的代码。

Make sure your GitHub meets these requirements:

确保您的GitHub满足以下要求:

实体轮廓 (Solid Profile)

Your profile should contain your location, a link to your portfolio website, and a short bio. Feel free to draw from your About Me portfolio website section.

您的个人资料应包含您的位置,投资组合网站的链接以及简短的简历。 随时从您的“关于我”投资组合网站部分进行绘图。

写得不错的自述文件 (Well-written README)

Use markdown when writing your README and make sure to check your spelling. When describing your project, make sure to:

在编写自述文件时使用markdown,并确保检查拼写。 描述您的项目时,请确保:

  • Name the languages, frameworks and technologies used.

    命名使用的语言,框架和技术

  • Describe the problem you were trying to solve.

    描述你试图解决的问题

  • Include instructions on how the project should used.

    包括有关如何使用项目的说明

  • Include links to relevant, related info.

    包括指向相关的相关信息的链接。

  • Include pictures or GIFs.

    包括图片或GIF。

Feel free to use Alamofire’s README as a solid example.

随意使用Alamofire的自述文件作为一个可靠的例子。

其他技巧 (Other Tips)

  • Try to contribute to other projects. It adds credibility to your profile.

    尝试为其他项目做出贡献。 它增加了您的个人资料的信誉。

  • Do your best to create work that people will want to star.

    尽力创造人们希望出演的作品

Now that we’ve reviewed the components you’ll need for your application (resume, portfolio site, LinkedIn, Github), it’s time to discuss how to get your foot in the door. What are the key strategies to landing the first interview?

现在,我们已经审查了应用程序所需的组件(简历,投资组合网站,LinkedIn,Github),现在该讨论如何入门。 进行首次面试关键策略是什么?

踏上大门 (Getting Your Foot In The Door)

Hiring for tech jobs is driven by who you know. You can increase your chances for employment significantly by getting a warm introduction.

您所认识的人驱动着技术工作的招聘。 通过热情的介绍,您可以大大增加您的就业机会。

Let’s say you’re applying to LinkedIn. Your name can reach the hiring manager in one of 2 ways. They can pick out your name from a stack of hundreds of applications or they can hear your name from one of their engineers or recruiters. The latter case is a warm introduction. You’re essentially vouched for by the person giving the introduction. Let’s dive into the steps of getting that warm introduction.

假设您要申请LinkedIn。 您的姓名可以通过以下两种方式之一到达招聘经理。 他们可以从数百个应用程序中选择您的名字,也可以从他们的工程师或招聘人员中听到您的名字。 后一种情况是热烈的介绍。 基本上,介绍者会为您提供担保。 让我们深入了解进行热烈介绍的步骤。

查找连接 (Find Connections)

To find the people you’ll reach out to, leverage your LinkedIn network.

要找到您可以联系到的人,请利用您的LinkedIn网络。

The first step is to find your target jobs. They don’t necessarily have to be at your dream companies. They can be companies that you’re only somewhat interested in. Getting an interview with them is a win because all practice is good practice. You’ll sharpen your skills for your dream job interview.

第一步是找到目标工作。 他们不一定必须在您梦dream以求的公司。 他们可能是您仅对某些公司感兴趣的公司。与他们进行面谈是一个胜利,因为所有实践都是一种良好实践。 您将为梦想的工作面试提高技能。

Here are the steps:

步骤如下:

  1. Go to the jobs search on LinkedIn. Type in your city and the role. Filter by jobs posted in the past month.

    转到LinkedIn上的职位搜索。 输入您的城市和角色。 按过去一个月发布的职位筛选

  2. Choose a job posting and check if you have any connections. Open those connections in new tabs. If you don’t have connections, use the list of employees at that company.

    选择职位发布并检查您是否有任何联系。 在新标签页中打开这些连接。 如果没有连接,请使用该公司的员工列表

  3. Select the engineers and recruiters in the list.

    在列表中选择工程师和招聘人员

请求电话 (Request a Phone Call)

The prerequisite for this step is that you apply to the company. After you do that, you can request a phone call from one of the engineers that works there.

此步骤的前提条件是您必须向公司提出申请。 完成此操作后,您可以要求在那儿工作的一位工程师打个电话。

What about reaching out to the recruiters? You definitely should, but I recommend reaching out to engineers first as their referral can hold more weight than a recruiter. These are the people who can better understand and appreciate your relevance to the department’s needs, and a referral from them is likely to be trusted more by the hiring manager.

与招募人员联系怎么样? 您绝对应该,但是我建议您首先联系工程师,因为他们的推荐比招募者更重要。 这些人可以更好地理解和欣赏您与部门需求的相关性,招聘经理可能会更信任他们。

Try using the following template when sending your message to the engineer on LinkedIn.

在LinkedIn上向工程师发送消息时,请尝试使用以下模板。

Subject : [Name] — [Role] Who Wants to Learn More About [Company name]

主题:[名称]-[角色]谁想了解有关[公司名称]的更多信息

Hi [Engineer’s name],

嗨[工程师的名字]

My name is [Your name]. I recently applied to [Company name] and I believe I would be a great fit. I would love the opportunity to learn more about [Company name]. Are you free for a 5 to 10 minute phone call sometime this week?

我叫[你的名字]。 我最近申请了[公司名称],我认为我很合适。 我希望有机会进一步了解[公司名称]。 您这个星期有空打5至10分钟的电话吗?

This message gets straight to the point. It shows the engineer that you truly care about the company since you’re taking the time to learn more about it from someone else. By asking for a 5 to 10 minute phone call, you’re showing the engineer that you respect their busy schedule.

此消息直达重点。 它向工程师表明,您真正在乎公司,因为您要花时间从其他人那里了解更多。 通过要求5到10分钟的电话,您正在向工程师表明您尊重他们的繁忙日程。

Here are some examples from when I was applying to LinkedIn:

以下是我向LinkedIn提出申请时的一些示例:

Image for post

Sometimes, they’ll simply refer you!

有时,他们只会推荐您!

Image for post

Setting up these phone calls is a great way to grow your network and increase your chances of getting a warm introduction. However, nothing compares to a face-to-face meeting.

设置这些电话是扩大您的网络并增加获得热情介绍的好方法。 但是,没有什么能比得上面对面的会议了。

“伸手喝咖啡”指南 (The “Reach Out For Coffee” Guide)

Getting coffee with your industry contact (e.g., engineer, recruiter) is much more effective than having a short phone call. The “face-to-face”aspect builds more trust and increases your chances of getting a strong referral.

与您的行业联系人(例如,工程师,招聘人员)喝咖啡比打个短电话要有效得多。 “面对面”方面可以建立更多的信任,并增加获得强烈推荐的机会。

The first step is to reach out to the contacts you compiled from the Find Connections section above.

第一步是联系您从上面的“查找连接”部分编译的联系人。

You can use the following template when sending your message. Feel free to customize it with any details about you as an engineer that you think is important. Make sure to keep it short and simple:

发送消息时,可以使用以下模板。 您可以随意定制有关您认为重要的工程师的任何详细信息。 确保简短简短:

Subject : [Name] — [Role] Who Wants to Learn More About [Company name]

主题:[名称]-[角色]谁想了解有关[公司名称]的更多信息

Hi [Contact’s name], I’m a software engineer who is passionate about building awesome products. I would love to get some career advice and learn more about what you do at [Company name]. Would you be open to grab coffee?

嗨,[联系人的名字],我是一位软件工程师,他热衷于构建出色的产品。 我很想获得一些职业建议,并在[公司名称]上详细了解您的工作。 你愿意喝咖啡吗?

If they reply, make sure to suggest a coffee shop near their office. Use a specific address or ask them to suggest a place that’s convenient for them.

如果他们答复,请确保在他们办公室附近建议一家咖啡店。 使用特定的地址或要求他们建议一个对他们方便的地方。

Here are some other tips for the meeting:

以下是会议的其他提示

  • Meet at a location convenient for them. Making the logistics easy will improve your chances of meeting up.

    在方便他们的地点集合。 简化后勤工作将增加您见面的机会。

  • Meet for around 30 minutes. Try your best to not take too much of their time. Show up on time.

    开会约30分钟。 尽最大努力不要花费太多时间。 准时出现。

  • Don’t forget to send a thank-you email. Talk about your biggest takeaways from the conversation. Mention that you appreciate them taking the time to talk.

    不要忘了发送一封感谢电子邮件。 从对话中谈谈您最大的收获。 提及您感谢他们抽出宝贵的时间与他们交谈。

如果他们不答复怎么办? (What If They Don’t Reply?)

If they don’t respond to your request within 4 or 5 days, send a follow-up message. Something like:

如果他们在4或5天内没有回复您的请求,请发送后续消息。 就像是:

Hi [Contact’s name]. Hope all is well! I’m following up on my last message about meeting for coffee. Are you available this week?

嗨[联系人姓名]。 希望一切都很好! 我正在跟进关于咖啡会议的最后一条消息。 你这星期有空吗?

为谈话做准备 (Preparing For The Conversation)

Whether you’re having a phone call or a coffee session, it’s important to prepare for the conversation. Try generating the following:

无论您是打电话还是在喝咖啡,准备对话都很重要。 尝试生成以下内容:

  1. LinkedIn Research Notes

    LinkedIn研究笔记

Scan their LinkedIn profile. Here are some example questions you can answer:

扫描他们的LinkedIn个人资料。 以下是一些您可以回答的示例问题:

  • What are their accomplishments?

    他们有什么成就?
  • What do you want to learn more about?

    您想进一步了解什么?

  • See if you share a place where you were raised. Do you use the same technologies and tools?

    查看您是否与自己共享一个成长的地方。 您是否使用相同的技术和工具

  • What is their professional focus?

    他们的专业重点是什么?
  • What are their aspirations?

    他们的愿望是什么?

2. Top 3 Questions to Ask

2.前三大问题

Come up with 3 or more questions to ask. Some topics:

提出3个或更多问题。 一些主题:

  • The company’s culture. How it compares to other companies they worked at.

    公司的文化。 与他们工作过的其他公司相比如何。

  • Their experience and accomplishments.

    他们的经验和成就。
  • Challenges their facing.

    挑战自己的面子。

3. Top 3 Connections/Interests

3.前3位连接/兴趣

This is your chance to talk about what you have in common. Maybe you both really enjoy using JavaScript. Are you passionate about the same sectors? Maybe you lived in the same city.

这是您讨论共同之处的机会。 也许你们俩都非常喜欢使用JavaScript。 您是否对同一行业充满热情? 也许你住在同一座城市。

The information you compiled above will help you contribute the conversation and warm up the connection.

您在上面汇编的信息将帮助您促进对话并预热连接。

Conversation Stretch Goals:

会话延伸目标:

Try landing these stretch goals:

尝试着陆这些伸展目标:

Stretch Goal 1: Show them one of your favorite portfolio apps. Ask for feedback and advice.

扩展目标1:向他们展示您最喜欢的投资组合应用程序之一。 寻求反馈和建议。

Stretch Goal 2: Offer to show your code. Request a code review. Request a review of the UI/UX of the project.

扩展目标2:主动展示您的代码。 要求进行代码审查。 要求审查项目的UI / UX。

最后,要求转介 (Finally, Ask For A Referral)

If you feel like the conversation went well, try asking for a referral. You can say something:

如果您觉得对话进行得很顺利,请尝试推荐。 您可以说些什么:

Thanks [Contact’s name], for taking the time to talk. I learned a lot!

感谢[联系人的姓名],抽出宝贵的时间进行交谈。 我学到了很多!

I actually already applied to [Company name]. Would you feel comfortable forwarding my resume to the hiring team?

我实际上已经申请了[公司名称]。 您是否愿意将我的简历转发给招聘团队?

查找联系信息的工具 (Tools For Finding Contact Info)

These tools below will assist you in finding the contact’s email/other contact info.

以下这些工具将帮助您查找联系人的电子邮件/其他联系人信息。

ContactOut — chrome extension to find email from their LinkedIn profile

ContactOut — chrome扩展程序,可从其LinkedIn个人资料中查找电子邮件

Hunter.io — finds email from company directory

Hunter.io —从公司目录中查找电子邮件

By now, you’re equipped with the tools to land an interview, so let’s dive into its main components. We’ll dissect both the technical interview and the behavioral interview.

到目前为止,您已经具备了进行采访的工具,因此让我们深入了解其主要组成部分。 我们将剖析技术面试和行为面试。

技术面试 (The Technical Interview)

The technical interview is usually the first interview. A technical phone interview is typical for the initial screening. If you’re able to pass that, you’ll face the more difficult, onsite interview. To ace these, you’ll need to have a solid problem solving strategy.

技术面试通常是第一次面试。 初步筛选通常需要进行技术电话采访。 如果能够通过,您将面临更加困难的现场采访。 要解决这些问题,您需要有一个可靠的问题解决策略。

解决问题的策略 (Problem Solving Strategy)

Keep these points in mind as you’re solving the problem.

解决问题时,请牢记这些要点。

  • Restate the problem. Ensure that you have a solid understanding of the problem.

    重述问题。 确保您对问题有深入的了解。

  • State your assumptions. Often times, we assume too much.

    陈述你的假设。 通常,我们假设太多。

  • Think out loud. Don’t be silent. Share your thought process.

    大声思考。 不要沉默分享您的思考过程。

  • Try the simplest solution first. This is a great starting point. It leaves room for more efficient solutions and refactoring.

    首先尝试最简单的解决方案。 这是一个很好的起点。 它为更有效的解决方案和重构留有空间。

  • Examine why it’s not ideal. Critique your solution. Analyze the complexity of the solution (both time and space complexities) and try to improve it.

    检查为什么它不理想。 批判您的解决方案。 分析解决方案的复杂性(时间和空间复杂性)并尝试对其进行改进。

  • Test multiple inputs. Generate reasonable test cases. Make sure to start simple, then increase complexity.

    测试多个输入。 生成合理的测试用例。 确保从简单开始,然后增加复杂性。

Generating test cases definitely warrants its own section. Let’s dive into it!

生成测试用例肯定需要它自己的部分。 让我们开始吧!

测试用例 (Test Cases)

It’s important to generate test inputs and their expected results. The test inputs are the inputs that will be used by your solution. The expected results are the results that you expect the solution to output. Returning different results than what was expected exposes bugs and gives you an opportunity to improve your solution. Using test cases shows that you’re thorough when solving problems, which is a skill that any good developer should have. We’ll focus on the follow types of inputs:

生成测试输入及其预期结果很重要。 测试输入是您的解决方案将使用的输入。 预期结果是您期望解决方案输出的结果。 返回与预期不同的结果会暴露一些错误,并为您提供改善解决方案的机会。 使用测试用例表明,您解决问题时很全面,这是任何优秀开发人员都应具备的技能。 我们将重点介绍以下几种类型的输入:

  1. Good/Normal Inputs

    正常输入
  2. Bad/Unusual Inputs

    错误/异常输入
  3. Edge Case Inputs

    边缘案例输入

Good/Normal Inputs

正常输入

The following points should give you an idea of what a “good” or “normal” input means.

以下几点应使您了解“良好”或“正常”输入的含义。

  • Uses valid data types

    使用有效的数据类型

  • The values and sizes of the inputs are well within expected bounds

    输入的值和大小都在预期范围内

  • Uses expected types of values based on your assumptions. (e.g., positive integers)

    根据您的假设使用期望的值类型。 (例如,正整数)

Here are a few examples:

这里有一些例子:

  • List of 4–6 unique integers greater than 0 in a small range: [2, 8, 5, 12, 7]

    在较小范围内列出大于0的4–6个唯一整数的列表:[2、8、5、12、7]
  • List of 4–6 unique mixed numbers in a small range: [2.7, -4.2, 0, 3.14]

    在较小范围内的4–6个唯一混合数的列表:[2.7,-4.2、0、3.14]
  • String with 4–6 words in different cases: “I like coding in Python”

    在不同情况下用4到6个单词组成的字符串:“我喜欢用Python编码”

Bad/Unusual Inputs

错误/异常输入

Bad or unusual inputs are any of the following:

错误或异常输入是以下任何一种:

  • Invalid data types

    无效的数据类型

  • Unexpected values

    意外值
  • Data structures with improperly constructed data or pointers

    具有错误构造的数据或指针的数据结构

  • Data that may cause your function to throw an error

    可能导致函数抛出错误的数据

Here are a few examples:

这里有一些例子:

  • List of only integers and floats: [2, 8.2, 6.01e23, 0.000001]

    仅整数和浮点数的列表:[2,8.2,6.01e23,0.000001]
  • Numbers with unexpected values: [8.1, “nice”, null, NaN]

    具有意外值的数字:[8.1,“ nice”,null,NaN]
  • String of digits with too many decimal points: “-14.28.57”

    小数点过多的数字字符串:“-14.28.57”

Edge Inputs

边输入

And finally, we have edge cases:

最后,我们有一些边际案例:

  • Valid input, but one that has the possibility of breaking your code if not handled correctly

    有效输入,但是如果处理不正确,则有可能破坏您的代码

  • Values and sizes of structures at the limit of expected bounds

    结构的值和大小在预期界限之内

  • Breaks assumptions on values

    打破关于价值的假设

Here are a few examples:

这里有一些例子:

  • List of integers with some duplicates: [7, 4, 5, 4, 3]

    具有一些重复项的整数列表:[7、4、5、4、3]
  • List of only 1 or 0 elements: [7] or [“lonely”] or []

    仅包含1或0个元素的列表:[7]或[“ lonely”]或[]
  • Mismatched parameter values (e.g., function expects a number, but you pass a string)

    参数值不匹配(例如,函数需要一个数字,但是您传递了一个字符串)
  • Linked list with 1 or 0 node(s)

    具有1个或0个节点的链接列表

数据结构与算法实践(Data Structures and Algorithms Practice)

There’s no getting around that this process will take a lot of data structures and algorithms practice. Where do you start?

无法避免这个过程将需要大量的数据结构和算法实践。 你从哪里开始?

Save Your Problems

保存您的问题

I recommend opening your favorite code editor and creating a folder called Interview Practice Problems. Here, you’ll store each problem you tackle. These problems can come from sites like, LeetCode or even companies you interviewed at. Why do this?

我建议打开您喜欢的代码编辑器并创建一个名为Interview Practice Problems的文件夹。 在这里,您将存储要解决的每个问题。 这些问题可能来自LeetCode之类的网站,甚至是您访问过的公司。 为什么这样

  • You can revisit the problems that gave you the most trouble and attempt them again. Are linked list problems difficult for you? Then create a folder that contains those types of problems.

    您可以重新考虑给您带来最大麻烦的问题,然后再次尝试。 链表问题对您来说困难吗? 然后创建一个包含这些类型的问题的文件夹。

  • Having one place that contains these different types of problems will help you recognize patterns in the types of interview problems companies give you. There are only so many ways you can ask a candidate to construct a binary search tree.

    在一个地方包含这些不同类型的问题将有助于您认识公司为您提供的面试问题的类型。 您可以通过多种方式要求应聘者构建二叉搜索树。

  • This will be a resource for you once you start the job search again. When you decide to move onto a different company, there’s a good chance that you’ll be a bit rusty in the interview problems department. What better way to hit the ground running than to tackle these personally curated problems?

    一旦您再次开始求职,这将是您的资源。 当您决定转移到另一家公司时,很有可能在面试问题部门有点生疏。 有什么比解决这些个人策划的问题更好的方法?

To give you a better idea of how this works, take a look at the setup I used when I was applying to jobs.

为了让您更好地了解这是如何工作的,请看一下我在申请工作时使用的设置。

Image for post

Notice that I have problems ranging from Interview Cake problems to the ones that I was given during my Google interview.

请注意,我遇到了很多问题,从面试蛋糕问题到我在Google面试中得到的问题。

Practice Resources

实践资源

It’s important to set aside structured blocks of time for technical interview practice. When you’re first starting out, there’s no need to time yourself. The focus should be understanding the fundamentals and the types of problems given. Once you feel comfortable, I recommend timing yourself and trying to improve your speed.

为技术面试练习留出结构化的时间很重要。 当您第一次入门时,无需花费时间。 重点应该是理解所提供问题的基本原理和类型。 一旦您感到舒适,我建议您把握好时机并尝试提高速度。

Here are some good resources for practice problems:

这里有一些练习方面的好资源:

  • LeetCode: Provides a large number of curated interview questions. You can choose questions by company (e.g., Top Amazon questions). You can even set up a mock interview in a timed setting.

    LeetCode :提供大量策划的面试问题。 您可以按公司选择问题(例如,热门亚马逊问题)。 您甚至可以在定时设置中进行模拟面试。

  • Glassdoor: Primarily used to learn more about a company(e.g., salaries and reviews), but it can be extremely helpful when it comes to company interview problems. Former interview candidates sometimes post their interview problems. It doesn’t get more authentic than that.

    Glassdoor :主要用于了解有关公司的更多信息(例如薪水和评论),但是对于公司面试问题可能非常有帮助。 前面试候选人有时会发布他们的面试问题。 没有比这更真实的了。

  • Cracking the Coding Interview: This infamous book is a great tutorial of the fundamental data structures and algorithms you’ll need for your interview. It also includes useful information about interviews at specific companies like Amazon, Facebook, Google and Apple.

    破解编码面试:这本臭名昭著的书很好地介绍了面试所需的基本数据结构和算法。 它还包括有关在亚马逊,Facebook,谷歌和苹果等特定公司进行采访的有用信息。

The above are powerful resources, but the best way to ramp up your interviewing skills is to actually interview with another person. The way you communicate your ideas is a major factor of these interviews and that’s not really something you can learn from a book. You’ll also be able to practice the problem solving strategies you learned in this guide!

以上是强大的资源,但是提高面试技巧的最佳方法是实际与其他人进行面试。 您交流想法的方式是这些访谈的主要因素,而这并不是您可以从书本中学到的东西。 您还可以练习在本指南中学习的问题解决策略

Online Mock Interviewing

在线模拟面试

Below are two amazing online tools for mock interviews:

以下是两个用于模拟采访的出色在线工具

  • Interviewing.io: You’ll be paired with a software engineer anonymously and will run through problems ranging from algorithmic questions to system design questions. The best part is that if you do well, you’ll have the chance to go straight to the onsite interview at that engineer’s company.

    Interviewing.io :您将与一位软件工程师匿名配对,并且将遇到从算法问题到系统设计问题的问题。 最好的部分是,如果做得好,您将有机会直接那个工程师公司的现场采访

  • Pramp: You’ll be paired based on your availability, experience, practice topics, etc. Pramp is unique in that you and your practice peer take turns interviewing each other!

    Pramp :您将根据自己的空缺,经验,练习主题等而配对。Pramp的独特之处在于,您和您的练习同伴轮流互相采访

Offline Mock Interviewing

离线模拟面试

Find a friend who’s also looking for a job or an engineer you know to give you a mock interview. You’ll get to experience the pressures and obstacles of an in person interview. Here’s a step-by-step guide:

寻找一个也正在寻找工作的朋友或您认识的工程师给您进行模拟面试。 您将体验到面试压力和障碍。 以下是分步指南:

  1. Find a partner to do mock interviews with. One will play interviewer and the other, interviewee.

    寻找合作伙伴进行模拟面试。 一个将扮演面试官,另一个将扮演面试官

  2. Work through the problem as if you’re in an actual interview. Your interviewer should have a checklist (see Golden Rubric below) to make sure you follow best practices.

    像参加实际面试一样解决问题。 您的面试官应有一份核对表(请参阅下面的Golden Rubric) ,以确保您遵循最佳做法。

  3. Have your interviewer give you feedback on you did/didn’t do.

    让您的面试官给您有关您是否做了的反馈

  4. Swap roles and work through the next problem.

    交换角色并解决下一个问题。

The following are a few great mock interview problems to start off with:

以下是一些最开始的模拟面试问题

  1. Given an array a of numbers and a target value t, find two numbers that sum to t (that is, a[i] + a[j] = t).

    给定一个由数字组成的数组a和一个目标值t ,找到两个总和为t的数字(即a [i] + a [j] = t)。

  2. Find the k largest values in an array of n numbers. Return them in a new array sorted in decreasing order.

    n个数字的数组中找到k个最大值。 以降序排序的新数组返回它们。

  3. Given a list of n strings with mixed casing, return a new list of all strings that start with a capitalized letter.

    给定包含混合大小写的n个字符串的列表,请返回以大写字母开头的所有字符串的新列表。

  4. Find the longest substring of unique letters in a given string of n letters.

    在给定的n个字母字符串中找到唯一字母的最长子字符串。

I suggested that the interviewer use the Golden Rubric as a checklist. I wrote an article on this where I essentially do a breakdown of the 6 categories that interviewers use to grade your performance. Each category is assigned a score (1 to 4) with 24 points being a perfect score. Use this as a North Star. Aim for perfection (24 points), but understand that not getting there does not mean that you won’t get your dream job.

我建议面试官使用“金色专栏”作为清单。 我写了一篇关于此的文章,从本质上讲,我细分了面试官用来对您的表现进行评分的6个类别。 为每个类别分配一个分数(1到4)满分为24分。 将此用作北极星。 追求完美(24分),但要明白,没有达到目标并不意味着就不会获得理想的工作。

技术面试的黄金法则 (The Golden Rubric For Technical Interviews)

1.编码和语法(1. Coding & Syntax)

4分[强力雇用](4 Points [Strong Hire])

  • No syntax errors

    没有语法错误

  • Translated solution and future improvements into code effortlessly

    将解决方案和将来的改进轻松地转化为代码

  • Demonstrated exemplary knowledge of language constructs as well as paradigms in other languages

    展示了对语言构造以及其他语言范例的示范性知识

  • Compare several coding approaches

    比较几种编码方法

3分[学习租用](3 Points [Leaning Hire])

  • Few-to-none syntax errors

    几乎没有语法错误

  • Translated proposed solution to code with little difficulty

    翻译困难的代码提议解决方案

  • Showed familiarity with common language constructs and paradigms

    Showed familiarity with common language constructs and paradigms

2 Points [Leaning Don't Hire](2 Points [Leaning Don’t Hire])

  • Minor syntax errors

    Minor syntax errors

  • Coded the naive solution but stumbled on occasion

    Coded the naive solution but stumbled on occasion

  • Poor use of language constructs

    Poor use of language constructs

1 Point [Strong Don't Hire](1 Point [Strong Don’t Hire])

  • Several errors (logical or syntactic) that severely impacted the correctness of the solution

    Several errors (logical or syntactic) that severely impacted the correctness of the solution

  • Poor use of language constructs

    Poor use of language constructs

2. Data Structures and Algorithms(2. Data Structures and Algorithms)

4 Points [Strong Hire](4 Points [Strong Hire])

  • Explained the naive solution and its drawbacks, then explained several solutions, ultimately selecting the most optimal

    Explained the naive solution and its drawbacks, then explained several solutions, ultimately selecting the most optimal

  • Explained runtime vs. space trade-offs within the context of different product constraints

    Explained runtime vs. space trade-offs within the context of different product constraints

3 Points [Leaning Hire](3 Points [Leaning Hire])

  • Produced a naive algorithm that properly utilized common data structures

    Produced a naive algorithm that properly utilized common data structures

  • Fully explained or coded a slightly more optimized solution

    Fully explained or coded a slightly more optimized solution

  • Correctly evaluated O-notation for runtime and space

    Correctly evaluated O-notation for runtime and space

2 Points [Leaning Don't Hire](2 Points [Leaning Don’t Hire])

  • Selected sub-optimal data structures for the given problem, demonstrating minor misunderstanding about their inner workings

    Selected sub-optimal data structures for the given problem, demonstrating minor misunderstanding about their inner workings

  • Produced a naive algorithm and perhaps suggested improvements

    Produced a naive algorithm and perhaps suggested improvements

1 Point [Strong Don't Hire](1 Point [Strong Don’t Hire])

  • Selected poorly suited data structures for the given problem

    Selected poorly suited data structures for the given problem

  • Demonstrated lacking knowledge about the inner working of basic data structures

    Demonstrated lacking knowledge about the inner working of basic data structures

  • Struggled to expand past a naive algorithm

    Struggled to expand past a naive algorithm

3. Problem Solving(3. Problem Solving)

4 Points [Strong Hire](4 Points [Strong Hire])

  • Rapidly produced a well written and accurate solution with ample time to deep dive into supplementary problems or alternative solutions

    Rapidly produced a well written and accurate solution with ample time to deep dive into supplementary problems or alternative solutions

3 Points [Leaning Hire](3 Points [Leaning Hire])

  • Solved the problem and had limited time to briefly discuss additional problems or expand on their original solution

    Solved the problem and had limited time to briefly discuss additional problems or expand on their original solution

2 Points [Leaning Don't Hire](2 Points [Leaning Don’t Hire])

  • Barely finished the problem in the allocated time

    Barely finished the problem in the allocated time

  • Either moved slowly or made several incorrect attempts before arriving at a final solution

    Either moved slowly or made several incorrect attempts before arriving at a final solution

1 Point [Strong Don't Hire](1 Point [Strong Don’t Hire])

  • Did not finish the entire problem

    Did not finish the entire problem

  • Often became lost and were unable to progress without assistance

    Often became lost and were unable to progress without assistance

4. Communication(4. Communication)

4 Points [Strong Hire](4 Points [Strong Hire])

  • Clearly explained their solution while also demonstrating tangential knowledge by explaining the inner workings of the standard library and data structures they used

    Clearly explained their solution while also demonstrating tangential knowledge by explaining the inner workings of the standard library and data structures they used

  • Explained the pros/cons of various common approaches to sub-problems within their solution

    Explained the pros/cons of various common approaches to sub-problems within their solution

3 Points [Leaning Hire](3 Points [Leaning Hire])

  • Explained their thought processes very clearly

    Explained their thought processes very clearly

  • Failed to elaborate fully on the design and rationale behind algorithmic/coding decisions

    Failed to elaborate fully on the design and rationale behind algorithmic/coding decisions

2 Points [Leaning Don't Hire](2 Points [Leaning Don’t Hire])

  • Explained their thought process, but would meander when they became lost in their solution

    Explained their thought process, but would meander when they became lost in their solution

  • Sometimes fell silent while they thought

    Sometimes fell silent while they thought

1 Point [Strong Don't Hire](1 Point [Strong Don’t Hire])

  • Spent little to no time explaining their thought processes

    Spent little to no time explaining their thought processes

  • Interviewer had to actively prompt the candidate with questions

    Interviewer had to actively prompt the candidate with questions

5. Thrives in Ambiguity(5. Thrives in Ambiguity)

4 Points [Strong Hire](4 Points [Strong Hire])

  • Was able to work independently

    Was able to work independently

  • Accurately discussed edge cases early

    Accurately discussed edge cases early

  • Engaged in thoughtful discussion by providing several solutions and challenging common assumptions/answers

    Engaged in thoughtful discussion by providing several solutions and challenging common assumptions/answers

3 Points [Leaning Hire](3 Points [Leaning Hire])

  • Required minor hints

    Required minor hints

  • Asked a few good questions

    Asked a few good questions
  • Handled unforeseen edge cases once they became clear

    Handled unforeseen edge cases once they became clear

2 Points [Leaning Don't Hire](2 Points [Leaning Don’t Hire])

  • Required several major hints

    Required several major hints

  • Unclear if they could have progressed without assistance

    Unclear if they could have progressed without assistance

  • Did not engage in thoughtful discussion regarding the problem

    Did not engage in thoughtful discussion regarding the problem

1 Point [Strong Don't Hire](1 Point [Strong Don’t Hire])

  • Struggled to work independently

    Struggled to work independently
  • Did not attempt unfamiliar problems

    Did not attempt unfamiliar problems

  • Relied heavily on interviewer for direction

    Relied heavily on interviewer for direction

6. Values Feedback(6. Values Feedback)

4 Points [Strong Hire](4 Points [Strong Hire])

  • Incorporated feedback quickly

    Incorporated feedback quickly

  • Tried to understand the feedback on a deeper level

    Tried to understand the feedback on a deeper level

  • Challenged the feedback where appropriate

    Challenged the feedback where appropriate

3 Points [Leaning Hire](3 Points [Leaning Hire])

  • Incorporated feedback quickly

    Incorporated feedback quickly
  • Did not challenge or seek to deeply understand the feedback

    Did not challenge or seek to deeply understand the feedback

2 Points [Leaning Don't Hire](2 Points [Leaning Don’t Hire])

  • Incorporated feedback, but slowly and didn’t demonstrate satisfactory understanding of the feedback

    Incorporated feedback, but slowly and didn't demonstrate satisfactory understanding of the feedback

1 Point [Strong Don't Hire](1 Point [Strong Don’t Hire])

  • Blindly ignored or made little use of hints

    Blindly ignored or made little use of hints

The technical interview is only one side of the coin. The other side is the behavioral interview.

The technical interview is only one side of the coin. The other side is the behavioral interview.

The Behavioral Interview(The Behavioral Interview)

The behavioral interview is a series of questions to find out if you’re a good fit for the job. The goal of this interview is not necessarily to see if you can do the job, but rather, if your experience qualifies you to do it. The goal is to find out how you’ll perform by analyzing examples of how you performed in similar situations before.

The behavioral interview is a series of questions to find out if you're a good fit for the job. The goal of this interview is not necessarily to see if you can do the job, but rather, if your experience qualifies you to do it. The goal is to find out how you'll perform by analyzing examples of how you performed in similar situations before .

The behavioral interview doesn’t only benefit the interviewer. This is an opportunity for you to practice:

The behavioral interview doesn't only benefit the interviewer. This is an opportunity for you to practice:

  • Communicating the value you bring to the company.

    Communicating the value you bring to the company.

  • Showcasing your qualifications, talents, skills, and communication.

    Showcasing your qualifications , talents, skills, and communication .

How to Prepare(How to Prepare)

It’s a huge mistake to go into an interview without having done your research on the company. Here are some actions to take beforehand:

It's a huge mistake to go into an interview without having done your research on the company. Here are some actions to take beforehand:

  1. Analyze the position and the company.

    Analyze the position and the company.

  2. Identify your experiences and skills that are most relevant to the position.

    Identify your experiences and skills that are most relevant to the position.

  3. Prepare a few scenarios that demonstrate teamwork, communication and leadership, etc.

    Prepare a few scenarios that demonstrate teamwork, communication and leadership, etc.

  4. Identify your strengths and areas where you can improve.

    Identify your strengths and areas where you can improve .

What Will They Ask?(What Will They Ask?)

The questions your interviewer will ask aren’t random. I mentioned that they are trying to see if you’re a good fit. They’re trying to figure out how well you’ll handle inevitable situations on the job. This means they want to know if you’re able to overcome challenges, handle setbacks, be a team player, make decisions, etc.

The questions your interviewer will ask aren't random. I mentioned that they are trying to see if you're a good fit. They're trying to figure out how well you'll handle inevitable situations on the job. This means they want to know if you're able to overcome challenges , handle setbacks , be a team player , make decisions , etc.

The following are common situational categories and the questions that they may ask for each.

The following are common situational categories and the questions that they may ask for each.

Teamwork

Teamwork

  • Do you like to work independently or as part of a group?

    Do you like to work independently or as part of a group?
  • Tell me about a challenging interaction with a team member.

    Tell me about a challenging interaction with a team member.
  • If I called your teammates, how do you think they would describe you?

    If I called your teammates, how do you think they would describe you?

Challenges

Challenges

  • Tell me about a challenge you faced while working on [portfolio project].

    Tell me about a challenge you faced while working on [portfolio project].

  • Describe a time when you had conflict with a team member. How did you resolve it?

    Describe a time when you had conflict with a team member. How did you resolve it?

Failures

Failures

  • Tell me about a difficult failure you experienced. How did you handle it?

    Tell me about a difficult failure you experienced. How did you handle it?

Mistakes

Mistakes

  • Tell me about a mistake you made. What happened and what did you learn from it?

    Tell me about a mistake you made. What happened and what did you learn from it?

Decision Making

Decision Making

  • Tell me about a time when you had to make a tough decision.

    Tell me about a time when you had to make a tough decision.

Learning

Learning

  • Describe a time when you had to learn something that was difficult for you. How did you approach it?

    Describe a time when you had to learn something that was difficult for you. How did you approach it?

Tech

Tech

  • What’s the hardest bug you’ve ever solved?

    What's the hardest bug you've ever solved?

Achievement

Achievement

  • What is your greatest achievement to date?

    What is your greatest achievement to date?

Fun/Oddball

Fun/Oddball

  • If you were allowed to bring only 3 things to an island, what would you bring?

    If you were allowed to bring only 3 things to an island, what would you bring?

When answering these questions, do your best to be as specific as possible. It’s also important to avoid placing blame, especially when it comes to the mistakes category.

When answering these questions, do your best to be as specific as possible. It's also important to avoid placing blame , especially when it comes to the mistakes category.

Fortunately, there is a well-tested technique to help you give excellent answers.

Fortunately, there is a well-tested technique to help you give excellent answers.

The STAR Technique(The STAR Technique)

This technique will help you prepare clear and concise responses using real-life examples. Let’s break it down.

This technique will help you prepare clear and concise responses using real-life examples. 让我们分解一下。

First, the interviewer will ask the question. Listen carefully and think of an event to use in order to illustrate your answer. Then, apply the STAR technique.

First, the interviewer will ask the question. Listen carefully and think of an event to use in order to illustrate your answer. Then, apply the STAR technique.

STAR stands for: situation, task, action and result.

STAR stands for: situation, task, action and result.

Situation: Describe the event or situation you were in.

Situation : Describe the event or situation you were in.

Task: Explain the task you had to complete.

Task : Explain the task you had to complete.

Action: Describe the specific actions you took in order to complete the task.

Action : Describe the specific actions you took in order to complete the task.

Result: Close with the results of your efforts.

Result : Close with the results of your efforts.

Here’s an example of the STAR technique in action.

Here's an example of the STAR technique in action.

Interview Question

Interview Question

Have you assumed a leadership role before?

Have you assumed a leadership role before?

Your Answer

Your Answer

S — Yes, I have. A developer on my team had to leave for 3 weeks due to personal circumstances and we were weeks away from a big release.

S — Yes, I have. A developer on my team had to leave for 3 weeks due to personal circumstances and we were weeks away from a big release .

T — To make up for his absence, I knew we had to reassign the team’s tasks in order to meet the deadline.

T — To make up for his absence, I knew we had to reassign the team's tasks in order to meet the deadline.

A — I took the initiative to evaluate everybody’s tasks and see how we could make up for the absence as a team. Then I scheduled a meeting with the team to delegate the new tasks to keep us within schedule.

A — I took the initiative to evaluate everybody's tasks and see how we could make up for the absence as a team. Then I scheduled a meeting with the team to delegate the new tasks to keep us within schedule.

R — Almost everyone agreed to the change since it was a major release and we all understood the importance of it.

R — Almost everyone agreed to the change since it was a major release and we all understood the importance of it.

Follow up with lessons learned: I learned some people don’t like being assigned tasks on such short notice. I’ll communicate earlier next time if a similar situation arises.

Follow up with lessons learned: I learned some people don't like being assigned tasks on such short notice. I'll communicate earlier next time if a similar situation arises.

By using this technique, you’ve fully addressed the question about leadership while demonstrating that you can complete a large task competently. And on top of that, you’ve shown that you can take feedback and learn from it. You’re showing rather than telling, which is key to acing the behavioral interview.

By using this technique, you've fully addressed the question about leadership while demonstrating that you can complete a large task competently. And on top of that, you've shown that you can take feedback and learn from it. You're showing rather than telling , which is key to acing the behavioral interview.

Interview The Interviewer(Interview The Interviewer)

The interviewer is trying their best to gauge whether or not you’re a fit for the company. You should be doing the same exact thing. Try your best to answer:

The interviewer is trying their best to gauge whether or not you're a fit for the company. You should be doing the same exact thing. Try your best to answer:

Is this company a fit for me?

Is this company a fit for me?

Here are some questions you can ask in order to better understand the company’s culture and to get a handle on what the day-to-day responsibilities would be:

Here are some questions you can ask in order to better understand the company's culture and to get a handle on what the day-to-day responsibilities would be:

  • Could you describe a typical day or week in this position?

    Could you describe a typical day or week in this position?
  • Can you show me examples of projects I’d be working on?

    Can you show me examples of projects I'd be working on?
  • Where do you see this company in the next 3 years?

    Where do you see this company in the next 3 years?
  • What would you say is the biggest problem that the engineering team is facing today? What about the company as a whole?

    What would you say is the biggest problem that the engineering team is facing today? What about the company as a whole?
  • Do you have any office traditions?

    Do you have any office traditions?
  • What was the last team event you all did together?

    What was the last team event you all did together?

These are only a few examples. Try to ask questions specific to the company. Ask questions that don’t have a quick google search answer. Be curious!

These are only a few examples. Try to ask questions specific to the company . Ask questions that don't have a quick google search answer. Be curious !

Non-verbal Tips(Non-verbal Tips)

There are several pitfalls you can become victim to that are unrelated to the content of the interview itself. Make sure to not miss these:

There are several pitfalls you can become victim to that are unrelated to the content of the interview itself. Make sure to not miss these:

  • Show up early. Get there 15 minutes early.

    Show up early. Get there 15 minutes early .

  • Dress appropriately. You may not need to wear a suit, but don’t be sloppy.

    Dress appropriately. You may not need to wear a suit, but don't be sloppy.

  • Firmly shake the hand of your interviewer.

    Firmly shake the hand of your interviewer.
  • Greet your interviewer by their name.

    Greet your interviewer by their name .

  • Have good eye contact.

    Have good eye contact.
  • Have good posture.

    Have good posture.
  • After the interview, follow up with a thank-you email.

    After the interview, follow up with a thank-you email .

This last tip also applies to life in general,

This last tip also applies to life in general,

No matter who you are interacting with, treat them just as you would the CEO. A bad impression with an intern, recruiter, HR person, janitor, etc., can hurt your chances at landing the role.

No matter who you are interacting with, treat them just as you would the CEO. A bad impression with an intern, recruiter, HR person, janitor, etc., can hurt your chances at landing the role.

And Finally…(And Finally…)

Congrats! You’ve reached the end of the guide. I hope you found this helpful. Feel free to comment below with any questions you have about anything discussed here. Finally, I’ll leave you with some insight that I wish I had before I started applying:

恭喜! You've reached the end of the guide. I hope you found this helpful. Feel free to comment below with any questions you have about anything discussed here. Finally, I'll leave you with some insight that I wish I had before I started applying:

Don’t apply when you feel ready. The worst thing you can do is convince yourself that you should apply to jobs only when you have the right number of projects in your portfolio or only when you feel like you have mastered all of the topics in Cracking the Coding Interview. Interviewing at companies is the best way to prepare for interviewing at companies. That seems obvious, but may not always feel so when you’re in the midst of studying for these interviews. Don’t let perfectionism block you.

Don't apply when you feel ready. The worst thing you can do is convince yourself that you should apply to jobs only when you have the right number of projects in your portfolio or only when you feel like you have mastered all of the topics in Cracking the Coding Interview. Interviewing at companies is the best way to prepare for interviewing at companies. That seems obvious, but may not always feel so when you're in the midst of studying for these interviews. Don't let perfectionism block you.

翻译自: https://medium.com/swlh/the-golden-guide-to-landing-a-developer-position-c78ad34a965f

delphi5开发人员指南

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经典中的经典! 目 录 译者序 序 前言 第一部分 快速开发的基础 第1章 Delphi 5下的Windows编程 1 1.1 Delphi产品家族 1 1.2 Delphi是什么 3 1.2.1 可视化开发环境 3 1.2.2 编译器的速度和已编译代码的效 率 4 1.2.3 编程语言的功能及其复杂性 4 1.2.4 数据库结构的灵活性和可扩展性 5 1.2.5 框架对设计和使用模式的扩充 5 1.3 历史回顾 5 1.3.1 Delphi 1 5 1.3.2 Delphi 2 6 1.3.3 Delphi 3 6 1.3.4 Delphi 4 7 1.3.5 Delphi 5 7 1.3.6 未来 7 1.4 Delphi 5的IDE 7 1.4.1 主窗口 8 1.4.2 窗体设计器 9 1.4.3 Object Inspector 9 1.4.4 代码编辑器 9 1.4.5 代码浏览器 10 1.4.6 源代码生成器 10 1.5 创建一个简单的应用程序 11 1.6 事件机制的优势在哪里 12 1.7 加速原型化 13 1.8 可扩展的组件和环境 13 1.9 IDE最重要的十点功能 13 1.10 总结 15 第2章 Object Pascal语言 16 2.1 注解 16 2.2 新的过程和函数特征 17 2.2.1 圆括号 17 2.2.2 重载 17 2.2.3 缺省值参数 17 2.3 变量 18 2.4 常量 19 2.5 运算符 20 2.5.1 赋值运算符 20 2.5.2 比较运算符 20 2.5.3 逻辑表达式 21 2.5.4 算术运算符 21 2.5.5 按位运算符 22 2.5.6 加减运算过程 22 2.6 Object Pascal类型 23 2.6.1 类型的比较 23 2.6.2 字符 24 2.6.3 字符串 24 2.6.4 变体类型 32 2.6.5 Currency 39 2.7 用户自定义类型 39 2.7.1 数组 39 2.7.2 动态数组 40 2.7.3 记录 41 2.7.4 集合 42 2.7.5 对象 43 2.7.6 指针 44 2.7.7 类型别名 46 2.8 强制类型转换和类型约定 46 2.9 字符串资源 47 2.10 测试条件 47 2.10.1 if语句 47 2.10.2 case语句 48 2.11 循环 49 2.11.1 for循环 49 2.11.2 while循环 49 2.11.3 repeat...until 50 2.11.4 Break()过程 50 2.11.5 Continue()过程 50 2.12 过程和函数 50 2.13 作用域 50 2.14 单元 55 2.14.1 uses子句 55 2.14.2 循环单元引用 56 2.15 包 56 2.15.1 使用Delphi的包 56 2.15.2 包的语法 56 2.16 面向对象编程 57 2.17 使用Delphi对象 58 2.17.1 声明和实例化 58 2.17.2 析构 59 2.18 方法 59 2.18.1 方法的类型 60 2.18.2 属性 61 2.18.3 可见性表示符 62 2.18.4 友类 62 2.18.5 对象的秘密 63 2.18.6 TObject:所有对象的祖先 63 2.18.7 接口 63 2.19 结构化异常处理 66 2.19.1 异常类 68 2.19.2 执行的流程 70 2.19.3 重新触发异常 71 2.20 运行期类型信息 72 2.21 总结 72 第3章 Win32 API 73 3.1 对象:以前和现在 73 3.1.1 内核对象 73 3.1.2 GDI和用户对象 75 3.2 多任务和多线程 75 3.3 Win32内存管理 76 3.3.1 什么是线性内存模式 76 3.3.2 Win32系统是怎样管理内存的 76 3.4 Win32的错误处理 78 3.5 总结 78 第4章 应用程序框架和设计 79 4.1 理解Delphi环境和项目的体系结构 79 4.2 构成Delphi 5项目的文件 79 4.2.1 项目文件 80 4.2.2 单元文件 80 4.2.3 窗体文件 80 4.2.4 资源文件 81 4.2.5 项目选项及桌面设置文件 81 4.2.6 备份文件 81 4.2.7 包文件 82 4.3 项目管理提示 82 4.3.1 一个项目一个目录 82 4.3.2 共享代码的单元 82 4.3.3 多项目管理 84 4.4 Delphi 5项目的框架类 84 4.4.1 TForm类 84 4.4.2 TApplication类 89 4.4.3 TApplication的方法 91 4.4.4 TApplication的事件 92 4.4.5 TScreen类 93 4.5 定义公共体系结构:使用对象库 93 4.5.1 考虑应用程序的体系结构 93 4.5.2 Delphi固有的体系结构 94 4.5.3 体系结构的例子 94 4.5.4 子窗体TChildForm 94 4.5.5 数据库基础模式窗体TDBMode- Form 96 4.5.6 数据库导航/状态窗体TDBNavstat- Form 97 4.5.7 使用框架进行应用程序结构 设计 102 4.6 一些项目管理的功能 103 4.6.1 在项目中添加资源 103 4.6.2 改变屏幕光标 105 4.6.3 避免创建一个窗体的多个实例 106 4.6.4 在DPR文件中增加代码 107 4.6.5 覆盖应用程序的异常处理 107 4.6.6 显示一个封面 109 4.6.7 使窗体尺寸最小 110 4.6.8 运行没有窗体的项目 111 4.6.9 退出Windows 112 4.6.10 防止关闭Windows 113 4.7 总结 113 第5章 理解Windows消息 114 5.1 什么是消息 114 5.2 消息的类型 115 5.3 Windows消息系统是如何工作的 115 5.4 Delphi的消息系统 116 5.5 消息处理 117 5.5.1 消息处理:不是无约定的 118 5.5.2 对Result域赋值 119 5.5.3 TApplication的OnMessage事件 119 5.6 发送自己的消息 120 5.6.1 Perform() 120 5.6.2 sendMessage()和PostMessage() 120 5.7 非标准的消息 121 5.7.1 通知消息 121 5.7.2 VCL内部的消息 122 5.7.3 用户自定义的消息 122 5.8 一个消息系统的剖析:VCL 123 5.9 消息与事件之间的关系 128 5.10 总结 129 第6章 代码标准文档 130 6.1 一般的源代码格式规则 130 6.1.1 缩进 130 6.1.2 边距 130 6.1.3 begin...end 130 6.2 Object Pascal 131 6.2.1 括号 131 6.2.2 保留字和关键字 131 6.2.3 过程和函数 131 6.2.4 变量 132 6.2.5 类型 133 6.2.6 构造类型 133 6.2.7 语句 134 6.2.8 结构化异常处理 134 6.2.9 类 135 6.3 文件 136 6.3.1 项目文件 136 6.3.2 窗体文件 136 6.3.3 数据模块文件 137 6.3.4 远程数据模块文件 137 6.3.5 单元文件 137 6.3.6 文件头 138 6.4 窗体与数据模块 138 6.4.1 窗体 138 6.4.2 数据模块 139 6.5 包 139 6.5.1 运行期包与设计期包 139 6.5.2 文件命名标准 140 6.6 组件 140 6.6.1 自定义组件 140 6.6.2 组件实例的命名规则 140 6.7 代码标准文档升级 141 第7章 使用ActiveX控件 142 7.1 什么是ActiveX控件 142 7.2 何时使用ActiveX控件 142 7.3 把ActiveX控件加到组件面板上 143 7.4 Delphi组件外套 144 7.4.1 外套文件是从哪来的 152 7.4.2 枚举 152 7.4.3 控件接口 152 7.4.4 TOleControl的派生类 152 7.4.5 方法 152 7.4.6 属性 153 7.5 在应用程序中使用ActiveX控件 153 7.6 发布带有ActiveX控件的应用程序 154 7.7 注册ActiveX控件 155 7.8 BlackJack:一个OCX示范程序 155 7.8.1 纸牌 155 7.8.2 游戏 157 7.8.3 调用ActiveX控件的方法 165 7.9 总结 166 第二部分 高级技术 第8章 使用GDI和字体的图像编程 167 8.1 TImage:Delphi的图像显示 167 8.2 存储图像 168 8.3 使用TCanvas的属性 169 8.3.1 画笔 170 8.3.2 使用TCanvas.Pixels属性 175 8.3.3 使用刷子 175 8.3.4 使用字体 180 8.3.5 使用CopyMode属性 181 8.3.6 其他属性 184 8.4 使用TCanvas的方法 184 8.4.1 用TCanvas画线 184 8.4.2 用TCanvas画几何形状 185 8.4.3 画图的示范程序 185 8.4.4 用TCanvas输出文字 189 8.5 坐标系统和映射模式 193 8.5.1 设备坐标系 193 8.5.2 逻辑坐标系 194 8.5.3 屏幕坐标系 194 8.5.4 窗体坐标系 194 8.5.5 坐标映射 195 8.5.6 设置映射模式 196 8.5.7 设置窗口/视区范围 196 8.5.8 关于映射模式的示范程序 197 8.6 创建一个绘画程序 202 8.7 编写动画程序 215 8.8 高级字体 221 8.8.1 Win32字体类型 222 8.8.2 基本字体元素 222 8.8.3 GDI字体分类 223 8.8.4 显示不同字体 223 8.9 实际创建一种字体 224 8.9.1 这个程序是如何工作的 224 8.9.2 显示字体的有关信息 230 8.10 总结 233 第9章 动态链接库 234 9.1 究竟什么是DLL 234 9.2 静态链接与动态链接 235 9.3 为什么要使用DLL 236 9.3.1 共享代码、资源和数据 236 9.3.2 隐藏实现的细节 237 9.3.3 自定义控件 237 9.4 创建和使用DLL 237 9.4.1 数美分:一个简单的DLL 237 9.4.2 显示DLL中的模式窗体 239 9.5 显示DLL中的无模式窗体 241 9.6 在Delphi应用程序中使用DLL 242 9.7 DLL的入口函数和出口函数 246 9.7.1 进程/线程初始化和终止例程 246 9.7.2 DLL入口/出口示例 246 9.8 DLL中的异常 250 9.8.1 在16位Delphi中捕捉异常 250 9.8.2 异常和Safecall指示符 250 9.9 回调函数 250 9.9.1 使用回调函数 253 9.9.2 拥有者绘制的列表框 253 9.10 从DLL中调用回调函数 253 9.11 在不同的进程间共享DLL数据 256 9.11.1 一个可以被共享数据的DLL 256 9.11.2 访问DLL中的共享数据 259 9.12 引出DLL中的对象 261 9.13 总结 265 第10章 Delphi 5的打印 266 10.1 TPrinter对象 266 10.2 TPrinter.Canvas 267 10.3 简单打印 267 10.3.1 打印TMemo组件中的内容 267 10.3.2 打印位图 268 10.3.3 打印RTF格式的文本 269 10.4 打印窗体 269 10.5 高级打印 270 10.5.1 打印分栏报表 270 10.5.2 放弃打印进程 275 10.5.3 打印信封 275 10.5.4 抽象打印 276 10.5.5 一个简单的打印预览程序 285 10.6 其他打印任务 286 10.6.1 TDeviceMode结构 286 10.6.2 设置打印份数 288 10.6.3 设置打印方向 288 10.6.4 设置纸张尺寸 288 10.6.5 设置纸张的长度 289 10.6.6 设置页的宽度 289 10.6.7 设置打印比例 289 10.6.8 设置打印颜色 289 10.6.9 设置打印质量 289 10.6.10 设置双面打印 290 10.6.11 指定默认打印机 290 10.7 获取打印机信息 291 10.7.1 GetDeviceCaps()和DeviceCapa- bilities() 292 10.7.2 获取打印机信息的示范程序 292 10.8 总结 303 第11章 编写多线程应用程序 304 11.1 对线程的解释 304 11.1.1 一种新型的多任务 304 11.1.2 在Delphi程序中使用多线程 304 11.1.3 关于线程的滥用 305 11.2 TThread对象 305 11.2.1 TThread基础 305 11.2.2 TThread实例 307 11.2.3 线程的终止 307 11.2.4 与VCL同步 308 11.2.5 一个演示程序 310 11.2.6 优先级和时序安排 311 11.2.7 挂起和唤醒线程 313 11.2.8 测试线程的时间 313 11.3 管理多线程 314 11.3.1 线程局部存储 314 11.3.2 线程同步 317 11.4 一个多线程的示范程序 325 11.4.1 用户界面 326 11.4.2 搜索线程 330 11.4.3 调整优先级 334 11.5 多线程与数据库 335 11.6 多线程与图形处理 340 11.7 总结 343 第12章 文件处理 344 12.1 处理文件的输入/输出 344 12.1.1 文本文件的处理 344 12.1.2 类型文件的处理 348 12.1.3 无类型文件的处理 356 12.2 TTextRec 和TFileRec结构 359 12.3 内存映射文件 360 12.3.1 内存映射文件的应用 360 12.3.2 使用映射文件 361 12.3.3 内存映射文件的一致性 366 12.3.4 文本搜索实用程序 366 12.4 目录和驱动器 373 12.4.1 获得有效驱动器和驱动器类型列 表 373 12.4.2 获取驱动器信息 374 12.4.3 获取Windows目录位置 376 12.4.4 获取系统目录的位置 376 12.4.5 获取当前目录 377 12.4.6 在目录中查找文件 377 12.4.7 复制和删除目录树 380 12.4.8 获取文件的版本信息 382 12.4.9 获取版本号 387 12.4.10 获得操作系统信息 388 12.4.11 使用TVerInfoRes类 388 12.5 使用SHFileOperation()函数 390 12.6 总结 391 第13章 核心技术 392 13.1 高级消息处理 392 13.1.1 子类化 392 13.1.2 HookMainWindow() 396 13.2 防止同时出现多个应用程序实例 397 13.3 使用Delphi的BASM 401 13.3.1 BASM是如何工作的 401 13.3.2 简易的参数访问 402 13.3.3 var声明的参数 402 13.3.4 Register调用约定 403 13.3.5 全汇编过程 403 13.3.6 记录 403 13.4 使用挂钩 404 13.4.1 设置挂钩 404 13.4.2 使用挂钩函数 405 13.4.3 使用脱钩函数 405 13.4.4 使用SendKeys:一个JournalPlay- back类型的挂钩 405 13.5 使用C/C++的OBJ文件 416 13.5.1 调用一个函数 416 13.5.2 命名问题 417 13.5.3 共享数据 417 13.5.4 使用Delphi RTL 418 13.6 使用C++类 422 13.7 替换 426 13.7.1 generic替换 426 13.7.2 WM_COPYDATA 435 13.8 获取包的信息 440 13.9 总结 443 第14章 获取系统信息 444 14.1 InfoForm:获取一般信息 444 14.1.1 格式化字符串 444 14.1.2 获取内存状态 445 14.1.3 获取操作系统版本信息 446 14.1.4 获取目录信息 447 14.1.5 获取系统信息 448 14.1.6 检查环境 450 14.2 平台无关性 455 14.3 Windows 95/98: 使用ToolHelp32 455 14.3.1 快照 456 14.3.2 列举进程 457 14.3.3 列举线程 460 14.3.4 列举模块 461 14.3.5 列举堆 462 14.3.6 堆的视图 465 14.3.7 程序源码 466 14.4 Windows NT/2000: PSAPI 474 14.5 总结 485 第15章 移植到Delphi 5 486 15.1 Delphi 5的新功能 486 15.1.1 哪个版本 486 15.1.2 单元、组件和包 487 15.2 从Delphi 4移植到Delphi 5 487 15.2.1 IDE问题 488 15.2.2 RTL问题 488 15.2.3 VCL问题 488 15.2.4 Internet开发问题 488 15.2.5 数据库问题 488 15.3 从Delphi 3移植到Delphi 5 489 15.3.1 无符号的32位整数 489 15.3.2 64位整数 490 15.3.3 Real类型 490 15.4 从Delphi 2移植到Delphi 5 490 15.4.1 改变为Boolean类型 490 15.4.2 ResourceString 490 15.4.3 RTL的改变 491 15.4.4 TCustomForm 491 15.4.5 GetChildren() 491 15.4.6 自动化服务器 491 15.5 从Delphi 1移植到Delphi 5 491 15.5.1 字符串和字符 492 15.5.2 变量长度和范围 497 15.5.3 记录的排列 497 15.5.4 32位的数学运算 498 15.5.5 TDateTime类 498 15.5.6 单元结束代码 498 15.5.7 汇编语言 499 15.5.8 调用约定 499 15.5.9 动态链接库 500 15.5.10 Windows操作系统的变化 501 15.5.11 32位的地址空间 501 15.5.12 32位资源 501 15.5.13 VBX控件 502 15.5.14 Windows API函数的变化 502 15.5.15 16位和32位并存 504 15.6 总结 504 第16章 MDI应用程序 505 16.1 创建MDI应用程序 505 16.1.1 理解MDI基础 505 16.1.2 子窗体 506 16.1.3 主窗体 522 16.2 菜单 528 16.2.1 用MDI程序合并菜单 528 16.2.2 在菜单中列出打开的文档 528 16.3 杂类MDI技术 529 16.3.1 在MDI客户区输出一幅位图 529 16.3.2 创建一个隐藏的子窗体 534 16.3.3 最小化、最大化、还原所有MDI 子窗体 536 16.4 总结 538 第17章 用剪贴板共享信息 539 17.1 剪贴板基础 539 17.1.1 剪贴板对文本操作 540 17.1.2 剪贴板对位图操作 540 17.2 创建你自己的剪贴板格式 541 17.2.1 创建一个感知剪贴板的对象 541 17.2.2 使用自定义的剪贴板格式 545 17.3 总结 547 第18章 多媒体编程 548 18.1 创建一个简单的媒体播放器 548 18.2 播放WAV文件 549 18.3 播放视频 550 18.3.1 显示第一帧 550 18.3.2 使用Display属性 551 18.3.3 使用DisplayRect属性 551 18.3.4 理解TMediaPlayer事件 552 18.3.5 DDGMPlay的源代码 552 18.4 设备支持 553 18.5 创建音频CD播放器 554 18.5.1 显示闪屏 555 18.5.2 开始编写CD播放器 555 18.5.3 更新CD播放器的信息 557 18.5.4 刷新CD播放器的方法 558 18.5.5 CD播放器的源代码 559 18.6 总结 565 第19章 测试与调试 566 19.1 常见的编程错误 567 19.1.1 在类的实例创建之前使用了它 567 19.1.2 确保类的实例被释放 567 19.1.3 掌握指针 568 19.1.4 使用未初始化的PChar类变量 568 19.1.5 释放空指针 569 19.2 使用内部集成调试器 569 19.2.1 使用命令行参数 569 19.2.2 断点 569 19.2.3 逐行执行代码 571 19.2.4 使用Watch窗口 572 19.2.5 Debug Inspector 572 19.2.6 计算和修改 572 19.2.7 访问调用栈 572 19.2.8 查看线程 573 19.2.9 事件日志 573 19.2.10 模块视图 574 19.2.11 调试DLL 574 19.2.12 CPU视图 575 19.3 总结 575 第三部分 基于组件的开发 第20章 VCL元素和运行期类型信息 577 20.1 什么是组件 577 20.2 组件的类型 578 20.2.1 标准控件 578 20.2.2 自定义控件 578 20.2.3 图形控件 578 20.2.4 非可视组件 579 20.3 组件的结构 579 20.3.1 属性 579 20.3.2 属性的类型 580 20.3.3 方法 580 20.3.4 事件 581 20.3.5 流属性 582 20.3.6 拥有关系 582 20.3.7 父子关系 583 20.4 可视组件的层次关系 583 20.4.1 TPersistent类 584 20.4.2 TComponent类 584 20.4.3 TControl类 585 20.4.4 TWinControl类 585 20.4.5 TGraphicControl类 586 20.4.6 TCustomControl类 586 20.4.7 其他类 587 20.5 运行期类型信息 589 20.5.1 TypInfo.pas单元:定义运行类型 信息 589 20.5.2 获取类型信息 591 20.5.3 获取方法指针的类型信息 596 20.5.4 获取有序类型的类型信息 600 20.5.5 通过RTTI给属性赋值 604 20.6 总结 606 第21章 编写自定义组件 607 21.1 组件设计基础 607 21.1.1 确定是否需要编写组件 607 21.1.2 编写组件的一般步骤 607 21.1.3 确定一个祖先类 608 21.1.4 创建一个组件单元 609 21.1.5 添加属性 609 21.1.6 加入事件 615 21.1.7 创建自定义的方法 619 21.1.8 构造器和析构器 619 21.1.9 注册组件 620 21.1.10 测试组件 621 21.1.11 提供组件图标 623 21.2 一个组件的示例 623 21.2.1 扩展Win32组件外套功能 624 21.2.2 TddgRunButton: 创建属性 631 21.3 TddgButtonEdit:一个容器组件 636 21.3.1 设计 636 21.3.2 显现属性 637 21.3.3 显现事件 637 21.3.4 TddgDigitalClock:创建组件事 件 639 21.3.5 把窗体加到组件面板上 642 21.4 组件包 644 21.4.1 为什么使用包 644 21.4.2 什么情况下不使用包 645 21.4.3 包的类型 645 21.4.4 包文件 645 21.4.5 在Delphi 5应用程序中使用包 645 21.4.6 把包安装到IDE中 645 21.4.7 设计自己的包 646 21.4.8 包的版本 649 21.4.9 包的编译指令 649 21.4.10 关于{$WEAKPACKAGEUNIT} 指令 649 21.4.11 包的命名约定 650 21.5 附加包 650 21.6 总结 655 第22章 高级组件技术 656 22.1 伪可视组件 656 22.1.1 扩展提示功能 656 22.1.2 创建一个THintWindow的派生 类 656 22.1.3 椭圆型的窗口 658 22.1.4 使派生的提示窗口有效 659 22.1.5 放置TDDGHintWindow 659 22.2 动态组件 659 22.2.1 走马灯组件 659 22.2.2 编写这个组件 659 22.2.3 在内存中的位图上输出 659 22.2.4 输出组件 661 22.2.5 使组件动起来 661 22.2.6 测试TddgMarquee组件 668 22.3 编写属性编辑器 670 22.3.1 派生出一个属性编辑器对象 670 22.3.2 把属性当作文本来编辑 671 22.3.3 注册新的属性编辑器 674 22.3.4 用对话框来编辑属性 675 22.4 组件编辑器 677 22.4.1 TComponentEditor 677 22.4.2 一个简单的组件 678 22.4.3 一个简单的组件编辑器 679 22.4.4 注册组件编辑器 679 22.5 对非公开的组件数据进行流操作 681 22.5.1 声明属性 681 22.5.2 DefineProperty()的例子 682 22.5.3 TddgWaveFile:调用Define- BinaryProperty()的例子 684 22.6 属性类别 690 22.6.1 类别的类 690 22.6.2 自定义类别 691 22.7 组件列表:TCollection和 TCollectionItem 694 22.7.1 声明TCollectionItem类: TRunBtnItem 695 22.7.2 声明TCollection类: TRunButtons 696 22.7.3 实现TddgLaunchPad、TRun- BtnItem和TRunButtons 696 22.7.4 用对话框属性编辑器编辑 TCollectionItem组件的列表 702 22.8 总结 711 第23章 COM和ActiveX 712 23.1 COM基础 712 23.1.1 COM:组件对象模型 712 23.1.2 COM、ActiveX、OLE的异同 713 23.1.3 术语 713 23.1.4 ActiveX的伟大之处 713 23.1.5 OLE 1和OLE 2 713 23.1.6 结构化存储 714 23.1.7 统一数据传输 714 23.1.8 线程模式 714 23.1.9 COM+ 714 23.2 COM与Object Pascal 714 23.2.1 接口 715 23.2.2 使用接口 716 23.2.3 HResult返回类型 719 23.3 COM对象和类工厂 720 23.3.1 TComObject和TComObject- Factory 720 23.3.2 in-process COM服务器 721 23.3.3 创建一个in-proc COM服务器实 例 722 23.3.4 out-of-process COM服务器 723 23.4 聚合 723 23.5 分布式COM 723 23.6 自动化 724 23.6.1 IDispatch接口 724 23.6.2 类型信息 725 23.6.3 后期捆绑与前期捆绑 725 23.6.4 注册 725 23.6.5 创建自动化服务器 725 23.6.6 创建自动化控制器 740 23.7 高级自动化技术 745 23.7.1 自动化事件 745 23.7.2 自动化集合 754 23.7.3 类型库中新的接口类型 760 23.7.4 交换二进制数据 761 23.7.5 COM的语言支持 763 23.8 MTS 766 23.8.1 为什么会出现MTS 767 23.8.2 什么是MTS 767 23.8.3 Delphi中的MTS 770 23.9 TOleContainer 785 23.9.1 一个简单的范例程序 785 23.9.2 一个稍复杂的范例程序 787 23.10 总结 794 第24章 扩展Windows外壳 795 24.1 托盘图标组件 795 24.1.1 API 795 24.1.2 处理消息 797 24.1.3 图标及提示 797 24.1.4 鼠标点击 798 24.1.5 隐藏应用程序 799 24.1.6 托盘图标应用程序举例 805 24.2 应用程序桌面工具栏 807 24.2.1 API 807 24.2.2 TAppBar:AppBar的窗体 808 24.2.3 使用TAppBar 815 24.3 外壳链接 817 24.3.1 获取一个IShellLink实例 818 24.3.2 使用IShellLink 819 24.3.3 创建一个外壳链接 820 24.3.4 获取及设置链接信息 821 24.3.5 一个例子程序 824 24.4 外壳扩展 831 24.4.1 COM对象向导 832 24.4.2 复制钩子处理器 832 24.4.3 上下文菜单处理器 836 24.4.4 图标处理器 844 24.5 总结 850 第25章 创建ActiveX控件 851 25.1 为什么要创建ActiveX控件 851 25.2 创建一个ActiveX控件 851 25.2.1 ActiveX控件向导 852 25.2.2 ActiveX框架 875 25.2.3 属性页 877 25.3 ActiveForm 886 25.4 在Web上的ActiveX 892 25.4.1 与Web浏览器通信 892 25.4.2 Web发布 901 25.5 总结 903 第26章 使用Delphi Open Tools API 904 26.1 Open Tools API接口 904 26.2 使用Open Tools API 905 26.2.1 Dumb向导 905 26.2.2 Wizard向导 908 26.2.3 DDG Search 916 26.3 窗体向导 925 26.4 总结 931 第27章 使用Delphi开发CORBA 932 27.1 ORB 932 27.2 接口 932 27.3 Stub和Skeleton 933 27.4 VisiBroker的ORB 933 27.4.1 VisiBroker的运行时支持服务 933 27.4.2 VisiBroker管理工具 934 27.5 Delphi的CORBA支持 934 27.5.1 CORBA的类支持 935 27.5.2 CORBA对象向导 936 27.5.3 Delphi的类型库编辑器 941 27.6 在Delphi 5中创建CORBA解决方案 942 27.6.1 建立一个CORBA服务器 942 27.6.2 实现IQueryServer的方法 943 27.6.3 编译一个静态绑定的CORBA 客户 956 27.6.4 编译一个动态绑定的CORBA 客户 958 27.6.5 跨语言的CORBA 960 27.7 使用VisiBroker ORB 967 27.8 总结 967 第四部分 开发数据库 第28章 编写桌面数据库应用程序 969 28.1 使用数据集 969 28.1.1 VCL的数据库体系结构 970 28.1.2 BDE数据访问组件 970 28.1.3 打开一个数据集 971 28.1.4 浏览数据集 971 28.1.5 对字段操作 975 28.1.6 刷新数据集 985 28.1.7 变化的状态 986 28.1.8 过滤器 986 28.2 使用TTable组件 988 28.2.1 查找记录 988 28.2.2 主/细表 990 28.2.3 TTable的事件 990 28.2.4 通过代码创建一个数据库表 991 28.3 数据模块 992 28.4 搜索、设置范围和过滤的示例 992 28.4.1 数据模块 992 28.4.2 主窗体 993 28.4.3 Range窗体 995 28.4.4 Key Search窗体 996 28.4.5 Filter窗体 998 28.5 TQuery和TStoredProc:其他数据 集 1000 28.6 文本文件数据库表 1001 28.6.1 概要文件 1001 28.6.2 数据文件 1002 28.6.3 使用文本数据库表 1002 28.6.4 限制 1003 28.6.5 从文本数据库表中引入数据 1003 28.7 用ODBC连接 1004 28.7.1 到哪儿找ODBC驱动程序 1004 28.7.2 ODBC实例:连接MS Access 1004 28.8 ActiveX Data Object 1007 28.8.1 Microsoft 数据访问简介 1007 28.8.2 ADOExpress组件 1008 28.8.3 连接一个ADO数据存储 1008 28.8.4 示例:通过ADO连接 1010 28.8.5 ADO开发 1011 28.9 总结 1011 第29章 开发客户/服务器应用程序 1012 29.1 为什么要采用客户/服务器结构 1012 29.2 客户/服务器体系结构 1013 29.2.1 客户 1013 29.2.2 服务器 1013 29.2.3 业务规则 1014 29.2.4 胖客户、胖服务器、中间层:业 务规则属于哪一端 1014 29.3 客户/服务器模型 1015 29.3.1 两层模型 1015 29.3.2 三层模型 1016 29.4 客户/服务器与桌面数据库开发的比 较 1017 29.4.1 面向集合与面向记录 1017 29.4.2 数据安全 1017 29.4.3 记录锁定方法 1017 29.4.4 数据完整性 1018 29.4.5 面向事务 1018 29.5 SQL在客户/服务器开发中的角色 1018 29.6 Delphi客户/服务器开发 1019 29.7 服务器:后端设计 1019 29.7.1 数据库对象 1019 29.7.2 定义数据库表 1020 29.7.3 使用域 1021 29.7.4 用视图、存储过程和触发器定义 业务规则 1022 29.7.5 数据库对象的访问权限 1027 29.8 客户:前端开发 1028 29.8.1 使用TDatabase组件 1028 29.8.2 TTable还是TQuery 1034 29.8.3 使用TQuery组件 1036 29.8.4 执行存储过程 1041 29.9 总结 1043 第30章 扩展数据库VCL 1044 30.1 使用BDE 1044 30.1.1 BDE单元 1044 30.1.2 Check() 1044 30.1.3 指针和句柄 1045 30.1.4 使指针同步 1045 30.2 dBASE表 1045 30.2.1 物理记录编号 1046 30.2.2 显示被删除的记录 1047 30.2.3 测试被软删除的记录 1047 30.2.4 恢复被软删除的记录 1048 30.2.5 紧缩表 1048 30.3 Paradox表 1049 30.3.1 记录序号 1049 30.3.2 紧缩 1049 30.3.3 限制查询结果 1055 30.3.4 BDE杂项 1056 30.3.5 编写数据感知VCL控件 1059 30.4 扩展TDataSet 1063 30.4.1 过去 1063 30.4.2 现在 1063 30.4.3 创建一个TDataSet派生类 1064 30.5 总结 1083 第31章 用WebBroker使应用程序具有 Internet功能 1084 31.1 ISAPI、NSAPI和CGI—Web服务 器扩展 1085 31.1.1 公共网关接口 1085 31.1.2 ISAPI和NSAPI 1085 31.2 用Delphi创建Web应用程序 1086 31.2.1 TWebModule和TWeb- Dispatcher 1086 31.2.2 TWebRequest和TWeb- Response 1088 31.3 用HTML内容生成器建立动态网 页 1091 31.3.1 TPageProducer 1091 31.3.2 TDatasetTableProducer和 TQueryTableProducer 1092 31.4 使用cookie保存状态 1097 31.5 重定向到另一个Web站点 1099 31.6 从HTML表单中获取信息 1099 31.7 数据流 1101 31.8 总结 1104 第32章 MIDAS开发 1105 32.1 多层应用程序的结构 1105 32.2 多层体系结构的优点 1106 32.3 典型的MIDAS体系结构 1107 32.3.1 服务器 1107 32.3.2 客户 1109 32.4 用MIDAS建立应用程序 1110 32.4.1 设置服务器 1110 32.4.2 创建客户 1111 32.5 增强应用程序的更多选择 1115 32.5.1 客户优化技巧 1115 32.5.2 服务器端的技巧 1116 32.6 几个实例 1117 32.6.1 连接 1117 32.6.2 MIDAS的Web功能 1119 32.7 客户数据集的更多功能 1125 32.7.1 嵌套的数据集 1125 32.7.2 客户主/细连接 1125 32.7.3 两层应用程序 1130 32.8 部署MIDAS应用程序 1131 32.9 总结 1134 第五部分 快速开发数据库应用程序 第33章 货物管理程序:客户/服务器 开发 1135 33.1 设计后端 1135 33.1.1 定义域 1136 33.1.2 定义表 1137 33.1.3 定义生成器 1138 33.1.4 定义触发器 1138 33.1.5 定义存储过程 1139 33.1.6 授权 1141 33.2 集中数据库访问:业务规则 1141 33.2.1 登录和退出方法 1150 33.2.2 Customer表的方法 1151 33.2.3 Part表的方法 1152 33.2.4 Sales表的方法 1152 33.2.5 临时表的方法 1153 33.2.6 TDataModule操纵数据访问 组件的事件 1153 33.3 设计用户界面 1153 33.3.1 TMainForm:应用程序的主窗 体 1154 33.3.2 TCustomerForm:客户输入 1158 33.3.3 TPartsForm: 货物输入 1161 33.3.4 TSalesForm: 销售浏览 1165 33.3.5 TNewSalesForm: 销售输入 1165 33.3.6 CustomerSearch对话框 1169 33.4 总结 1173 第34章 客户跟踪系统:MIDAS开发 1174 34.1 设计服务器应用程序 1174 34.2 设计客户应用程序 1176 34.2.1 客户数据模块 1176 34.2.2 客户主窗体 1184 34.3 总结 1190 第35章 错误报告工具:桌面数据库 开发 1191 35.1 通用应用程序的需求 1191 35.1.1 为WWW做准备 1191 35.1.2 用户的数据输入和登录 1191 35.1.3 错误处理、浏览和过滤 1191 35.1.4 错误注解 1191 35.1.5 用户界面的功能 1192 35.2 数据模型 1192 35.3 开发数据模块 1192 35.3.1 应用程序初始化和登录 1201 35.3.2 生成Paradox关键值 1202 35.3.3 错误处理例程 1202 35.3.4 浏览/过滤错误 1202 35.3.5 增加用户 1202 35.3.6 加入注解 1204 35.4 开发用户界面 1205 35.4.1 主窗体 1205 35.4.2 用户界面的其他问题 1211 35.5 使应用程序具有Web功能 1211 35.6 总结 1211 第36章 错误报告工具:使用 WebBroker 1212 36.1 网页布局 1212 36.2 修改数据模块 1213 36.3 配置TDataSetTableProducer组件: dstpBugs 1213 36.4 配置TWebDispatcher组件: wbdpBugs 1213 36.5 配置TPageProducer组件: pprdBugs 1214 36.6 编写DDGWebBugs ISAPI服务器: 增加TActionItem实例 1214 36.6.1 辅助例程 1214 36.6.2 介绍网页 1215 36.6.3 获取并校验用户登录名字 1216 36.7 浏览错误信息 1219 36.7.1 浏览所有错误信息 1219 36.7.2 浏览用户自己的错误信息 1221 36.7.3 格式化表格单元并显示错误细 节 1222 36.8 增加新的错误信息 1223 36.8.1 获取错误信息 1223 36.8.2 校验插入的错误信息 1225 36.9 总结 1228 第六部分 附 录 附录A 错误信息与异常 1229 附录B BDE错误代码 1247 附录C 参考文献 1264
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值